more misc porting work yay

This commit is contained in:
Ellpeck 2020-01-23 22:40:03 +01:00
parent 8ebe165a28
commit 3077a0869a
11 changed files with 49 additions and 98 deletions

View file

@ -5,6 +5,7 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.item.IAuraRecharge; import de.ellpeck.naturesaura.api.aura.item.IAuraRecharge;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityImpl; import de.ellpeck.naturesaura.blocks.tiles.TileEntityImpl;
import de.ellpeck.naturesaura.chunk.AuraChunk; import de.ellpeck.naturesaura.chunk.AuraChunk;
import net.minecraft.advancements.Advancement;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
@ -255,11 +256,11 @@ public final class Helper {
public static void addAdvancement(PlayerEntity player, ResourceLocation advancement, String criterion) { public static void addAdvancement(PlayerEntity player, ResourceLocation advancement, String criterion) {
if (!(player instanceof ServerPlayerEntity)) if (!(player instanceof ServerPlayerEntity))
return;/* TODO add advancements return;
ServerPlayerEntity playerMp = (ServerPlayerEntity) player; ServerPlayerEntity playerMp = (ServerPlayerEntity) player;
Advancement adv = playerMp.getServerWorld().getAdvancementManager().getAdvancement(advancement); Advancement adv = playerMp.getServerWorld().getServer().getAdvancementManager().getAdvancement(advancement);
if (adv != null) if (adv != null)
playerMp.getAdvancements().grantCriterion(adv, criterion);*/ playerMp.getAdvancements().grantCriterion(adv, criterion);
} }
public static int getIngredientAmount(Ingredient ingredient) { public static int getIngredientAmount(Ingredient ingredient) {

View file

@ -5,6 +5,9 @@ import de.ellpeck.naturesaura.api.aura.type.BasicAuraType;
import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.api.recipes.WeightedOre; import de.ellpeck.naturesaura.api.recipes.WeightedOre;
import de.ellpeck.naturesaura.chunk.effect.OreSpawnEffect; import de.ellpeck.naturesaura.chunk.effect.OreSpawnEffect;
import net.minecraft.block.Block;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.Tag;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
@ -121,7 +124,8 @@ public final class ModConfig {
try { try {
for (String s : general.additionalOres) { for (String s : general.additionalOres) {
String[] split = s.split(":"); String[] split = s.split(":");
WeightedOre ore = new WeightedOre(split[0], Integer.parseInt(split[1])); Tag<Block> tag = BlockTags.getCollection().get(new ResourceLocation(split[0]));
WeightedOre ore = new WeightedOre(tag, Integer.parseInt(split[1]));
String dimension = split[2]; String dimension = split[2];
if ("nether".equalsIgnoreCase(dimension)) if ("nether".equalsIgnoreCase(dimension))
NaturesAuraAPI.NETHER_ORES.add(ore); NaturesAuraAPI.NETHER_ORES.add(ore);

View file

@ -39,7 +39,7 @@ public class AnimalSpawnerRecipe {
MobEntity living = (MobEntity) entity; MobEntity living = (MobEntity) entity;
living.rotationYawHead = entity.rotationYaw; living.rotationYawHead = entity.rotationYaw;
living.renderYawOffset = entity.rotationYaw; living.renderYawOffset = entity.rotationYaw;
living.onInitialSpawn(world, world.getDifficultyForLocation(living.getPosition()), SpawnReason.SPAWNER, null, null); // TODO test if null is okay here living.onInitialSpawn(world, world.getDifficultyForLocation(living.getPosition()), SpawnReason.SPAWNER, null, null);
} }
return entity; return entity;
} }

View file

@ -1,13 +1,15 @@
package de.ellpeck.naturesaura.api.recipes; package de.ellpeck.naturesaura.api.recipes;
import net.minecraft.block.Block;
import net.minecraft.tags.Tag;
import net.minecraft.util.WeightedRandom; import net.minecraft.util.WeightedRandom;
public class WeightedOre extends WeightedRandom.Item { public class WeightedOre extends WeightedRandom.Item {
public final String name; public final Tag<Block> tag;
public WeightedOre(String name, int weight) { public WeightedOre(Tag<Block> tag, int weight) {
super(weight); super(weight);
this.name = name; this.tag = tag;
} }
} }

View file

@ -11,6 +11,7 @@ import net.minecraft.inventory.CraftingInventory;
import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.Container;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.EntityPredicates; import net.minecraft.util.EntityPredicates;
@ -76,8 +77,7 @@ public class TileEntityAutoCrafter extends TileEntityImpl implements ITickableTi
this.crafting.setInventorySlotContents(i, stack.copy()); this.crafting.setInventorySlotContents(i, stack.copy());
} }
// TODO get recipes from the recipe registry?? IRecipe recipe = this.world.getRecipeManager().getRecipe(IRecipeType.CRAFTING, this.crafting, this.world).orElse(null);
IRecipe recipe = /*CraftingManager.findMatchingRecipe(this.crafting, this.world);*/null;
if (recipe == null) if (recipe == null)
return; return;

View file

@ -59,8 +59,7 @@ public class TileEntityPlacer extends TileEntityImpl implements ITickableTileEnt
BlockPos up = pos.up(); BlockPos up = pos.up();
BlockState state = this.world.getBlockState(up); BlockState state = this.world.getBlockState(up);
// TODO maybe allow the placer to place on more than air? if (state.getMaterial().isReplaceable())
if (state.isAir(this.world, up))
validPositions.add(up); validPositions.add(up);
} }
if (validPositions.isEmpty()) if (validPositions.isEmpty())
@ -106,44 +105,12 @@ public class TileEntityPlacer extends TileEntityImpl implements ITickableTileEnt
} }
private ItemStack tryPlace(ItemStack stack, BlockPos pos) { private ItemStack tryPlace(ItemStack stack, BlockPos pos) {
if (this.handleSpecialCases(stack, pos))
return stack;
if (!(this.world instanceof ServerWorld)) if (!(this.world instanceof ServerWorld))
return stack; return stack;
FakePlayer fake = FakePlayerFactory.getMinecraft((ServerWorld) this.world); FakePlayer fake = FakePlayerFactory.getMinecraft((ServerWorld) this.world);
fake.inventory.mainInventory.set(fake.inventory.currentItem, stack); fake.inventory.mainInventory.set(fake.inventory.currentItem, stack);
BlockRayTraceResult ray = new BlockRayTraceResult(new Vec3d(pos).add(0.5F, 0.5F, 0.5F), Direction.UP, pos, false); BlockRayTraceResult ray = new BlockRayTraceResult(new Vec3d(pos).add(0.5F, 0.5F, 0.5F), Direction.UP, pos, false);
ForgeHooks.onPlaceItemIntoWorld(new ItemUseContext(fake, Hand.MAIN_HAND, ray)); ForgeHooks.onPlaceItemIntoWorld(new ItemUseContext(fake, Hand.MAIN_HAND, ray));
return fake.getHeldItemMainhand().copy(); return fake.getHeldItemMainhand().copy();
} }
private boolean handleSpecialCases(ItemStack stack, BlockPos pos) {
// TODO placer special cases
/* if (stack.getItem() == Items.REDSTONE)
if (Blocks.REDSTONE_WIRE.canPlaceBlockAt(this.world, pos))
this.world.setBlockState(pos, Blocks.REDSTONE_WIRE.getDefaultState());
else
return false;
else if (stack.getItem() == Item.getItemFromBlock(ModBlocks.GOLD_POWDER))
if (ModBlocks.GOLD_POWDER.canPlaceBlockAt(this.world, pos))
this.world.setBlockState(pos, ModBlocks.GOLD_POWDER.getDefaultState());
else
return false;
else if (stack.getItem() instanceof IPlantable) {
IPlantable plantable = (IPlantable) stack.getItem();
BlockState plant = plantable.getPlant(this.world, pos);
if (!plant.getBlock().canPlaceBlockAt(this.world, pos))
return false;
BlockState state = this.world.getBlockState(pos);
if (!state.getBlock().isAir(state, this.world, pos))
return false;
this.world.setBlockState(pos, plant);
} else*/
return false;
/*stack.shrink(1);
return true;*/
}
} }

View file

@ -11,17 +11,18 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation; import net.minecraft.item.ItemUseContext;
import net.minecraft.util.Tuple; import net.minecraft.util.*;
import net.minecraft.util.WeightedRandom; import net.minecraft.util.math.*;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.common.util.FakePlayerFactory;
import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -96,24 +97,21 @@ public class OreSpawnEffect implements IDrainSpotEffect {
if (orePos.distanceSq(powderPos.x, powderPos.y, powderPos.z, true) <= range * range if (orePos.distanceSq(powderPos.x, powderPos.y, powderPos.z, true) <= range * range
&& orePos.distanceSq(pos) <= this.dist * this.dist && world.isBlockLoaded(orePos)) { && orePos.distanceSq(pos) <= this.dist * this.dist && world.isBlockLoaded(orePos)) {
BlockState state = world.getBlockState(orePos); BlockState state = world.getBlockState(orePos);
Block block = state.getBlock(); if (state.getBlock() != requiredBlock)
if (block != requiredBlock)
continue; continue;
// TODO place ores outer:
/*outer:
while (true) { while (true) {
WeightedOre ore = WeightedRandom.getRandomItem(world.rand, ores, totalWeight); WeightedOre ore = WeightedRandom.getRandomItem(world.rand, ores, totalWeight);
List<ItemStack> stacks = OreDictionary.getOres(ore.name, false); for (Block toPlace : ore.tag.getAllElements()) {
for (ItemStack stack : stacks) { if (toPlace == null || toPlace == Blocks.AIR)
if (stack.isEmpty())
continue;
Block toPlace = Block.getBlockFromItem(stack.getItem());
if (toPlace == Blocks.AIR)
continue; continue;
FakePlayer player = FakePlayerFactory.getMinecraft((ServerWorld) world); FakePlayer player = FakePlayerFactory.getMinecraft((ServerWorld) world);
BlockState stateToPlace = toPlace.getStateForPlacement(world, pos, Direction.UP, 0, 0, 0, stack.getDamage(), player, EnumHand.MAIN_HAND); player.setHeldItem(Hand.MAIN_HAND, ItemStack.EMPTY);
BlockRayTraceResult ray = new BlockRayTraceResult(new Vec3d(pos).add(0.5F, 0.5F, 0.5F), Direction.UP, pos, false);
BlockItemUseContext context = new BlockItemUseContext(new ItemUseContext(player, Hand.MAIN_HAND, ray));
BlockState stateToPlace = toPlace.getStateForPlacement(context);
if (SPAWN_EXCEPTIONS.contains(stateToPlace)) if (SPAWN_EXCEPTIONS.contains(stateToPlace))
continue; continue;
@ -125,7 +123,7 @@ public class OreSpawnEffect implements IDrainSpotEffect {
IAuraChunk.getAuraChunk(world, highestSpot).drainAura(highestSpot, toDrain); IAuraChunk.getAuraChunk(world, highestSpot).drainAura(highestSpot, toDrain);
break outer; break outer;
} }
}*/ }
} }
} }
} }

View file

@ -1,15 +1,12 @@
package de.ellpeck.naturesaura.potion; package de.ellpeck.naturesaura.potion;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.reg.IModItem; import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.ModRegistry; import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.potion.Effect; import net.minecraft.potion.Effect;
import net.minecraft.potion.EffectType; import net.minecraft.potion.EffectType;
import net.minecraft.util.ResourceLocation;
public class PotionImpl extends Effect implements IModItem { public class PotionImpl extends Effect implements IModItem {
private static final ResourceLocation TEXTURE = new ResourceLocation(NaturesAura.MOD_ID, "textures/gui/potions.png");
protected final String baseName; protected final String baseName;
protected PotionImpl(String baseName, EffectType type, int liquidColorIn) { protected PotionImpl(String baseName, EffectType type, int liquidColorIn) {
@ -19,20 +16,6 @@ public class PotionImpl extends Effect implements IModItem {
ModRegistry.add(this); ModRegistry.add(this);
} }
/* TODO potion textures
@Override
public Effect setIconIndex(int x, int y) {
return super.setIconIndex(x, y);
}
@Override
@OnlyIn(Dist.CLIENT)
public int getStatusIconIndex() {
Minecraft.getMinecraft().renderEngine.bindTexture(TEXTURE);
return super.getStatusIconIndex();
}*/
@Override @Override
public String getBaseName() { public String getBaseName() {
return this.baseName; return this.baseName;

View file

@ -30,6 +30,7 @@ import net.minecraft.tags.ItemTags;
import net.minecraft.tags.Tag; import net.minecraft.tags.Tag;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.Tags;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import java.util.Arrays; import java.util.Arrays;
@ -267,22 +268,17 @@ public final class ModRecipes {
spawner("wolf", "minecraft:wolf", 50000, 60, ing(Items.LEATHER), ing(Items.BONE)); spawner("wolf", "minecraft:wolf", 50000, 60, ing(Items.LEATHER), ing(Items.BONE));
spawner("zombie", "minecraft:zombie", 100000, 100, ing(Items.ROTTEN_FLESH)); spawner("zombie", "minecraft:zombie", 100000, 100, ing(Items.ROTTEN_FLESH));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreCoal", 5000)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre(Tags.Blocks.ORES_COAL, 5000));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherCoal", 5000)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre(Tags.Blocks.ORES_IRON, 3000));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreIron", 3000)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre(Tags.Blocks.ORES_GOLD, 500));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherIron", 3000)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre(Tags.Blocks.ORES_DIAMOND, 50));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreGold", 500)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre(Tags.Blocks.ORES_LAPIS, 250));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherGold", 500)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre(Tags.Blocks.ORES_REDSTONE, 200));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreDiamond", 50)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre(Tags.Blocks.ORES_EMERALD, 30));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherDiamond", 50)); NaturesAuraAPI.NETHER_ORES.add(new WeightedOre(Tags.Blocks.ORES_QUARTZ, 3000));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreLapis", 250));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherLapis", 250));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreRedstone", 200));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherRedstone", 200));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreEmerald", 30));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreQuartz", 3000));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreCopper", 2000)); // TODO figure out how to deal with foreign ore tags
/*NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreCopper", 2000));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherCopper", 2000)); NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherCopper", 2000));
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreTin", 1800)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("oreTin", 1800));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherTin", 1800)); NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreNetherTin", 1800));
@ -325,7 +321,7 @@ public final class ModRecipes {
NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("orePoorSilver", 1000)); NaturesAuraAPI.OVERWORLD_ORES.add(new WeightedOre("orePoorSilver", 1000));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreCobalt", 50)); NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreCobalt", 50));
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreArdite", 50)); NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreArdite", 50));*/
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("egg"), 2500); NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("egg"), 2500);
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("snowball"), 3500); NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("snowball"), 3500);

View file

@ -165,7 +165,7 @@
"advancement.naturesaura.range_visualizer": "I Spy With my Little Eye", "advancement.naturesaura.range_visualizer": "I Spy With my Little Eye",
"advancement.naturesaura.range_visualizer.desc": "Create a Mystical Magnifier to see the range of your devices", "advancement.naturesaura.range_visualizer.desc": "Create a Mystical Magnifier to see the range of your devices",
"command.naturesaura.aura.usage": "/naaura store|drain <amount> [range] OR /naaura reset <range>", "command.naturesaura.aura.usage": "/naaura store|drain <amount> [range] OR /naaura reset <range>",
"potion.naturesaura.breathless": "Breathless", "effect.naturesaura.breathless": "Breathless",
"entity.naturesaura.effect_inhibitor": "Effect Powder", "entity.naturesaura.effect_inhibitor": "Effect Powder",
"entity.naturesaura.mover_cart": "Aura Attraction Cart" "entity.naturesaura.mover_cart": "Aura Attraction Cart"
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B