diff --git a/src/main/java/de/ellpeck/naturesaura/Helper.java b/src/main/java/de/ellpeck/naturesaura/Helper.java index 48c95294..bdd0b0d4 100644 --- a/src/main/java/de/ellpeck/naturesaura/Helper.java +++ b/src/main/java/de/ellpeck/naturesaura/Helper.java @@ -23,6 +23,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; @@ -51,7 +52,7 @@ import java.util.function.Predicate; public final class Helper { - public static boolean getBlockEntitiesInArea(Level level, BlockPos pos, int radius, Function consumer) { + public static boolean getBlockEntitiesInArea(LevelAccessor level, BlockPos pos, int radius, Function consumer) { for (var x = pos.getX() - radius >> 4; x <= pos.getX() + radius >> 4; x++) { for (var z = pos.getZ() - radius >> 4; z <= pos.getZ() + radius >> 4; z++) { var chunk = getLoadedChunk(level, x, z); @@ -89,7 +90,7 @@ public final class Helper { return frames; } - public static LevelChunk getLoadedChunk(Level level, int x, int z) { + public static LevelChunk getLoadedChunk(LevelAccessor level, int x, int z) { // DO NOT EDIT PLEASE FOR THE LOVE OF GOD // This is very finicky and easily causes the game to hang for some reason var provider = level.getChunkSource(); diff --git a/src/main/java/de/ellpeck/naturesaura/NaturesAura.java b/src/main/java/de/ellpeck/naturesaura/NaturesAura.java index 3dd1a665..d4bd679b 100644 --- a/src/main/java/de/ellpeck/naturesaura/NaturesAura.java +++ b/src/main/java/de/ellpeck/naturesaura/NaturesAura.java @@ -2,10 +2,6 @@ package de.ellpeck.naturesaura; import com.google.common.base.Strings; import de.ellpeck.naturesaura.api.NaturesAuraAPI; -import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; -import de.ellpeck.naturesaura.api.aura.container.IAuraContainer; -import de.ellpeck.naturesaura.api.aura.item.IAuraRecharge; -import de.ellpeck.naturesaura.api.misc.ILevelData; import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.chunk.effect.DrainSpotEffects; import de.ellpeck.naturesaura.compat.Compat; @@ -61,11 +57,6 @@ public final class NaturesAura { } private void preInit(FMLCommonSetupEvent event) { - Helper.registerCap(IAuraContainer.class); - Helper.registerCap(IAuraRecharge.class); - Helper.registerCap(IAuraChunk.class); - Helper.registerCap(ILevelData.class); - Compat.setup(event); PacketHandler.init(); new Multiblocks(); diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalGenerator.java index b0b29d99..6203b08d 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalGenerator.java @@ -51,7 +51,7 @@ public class BlockAnimalGenerator extends BlockContainerImpl implements IVisuali LivingEntity entity = event.getEntityLiving(); if (entity.level.isClientSide || !(entity instanceof Animal) || entity instanceof Mob || entity instanceof Npc) return; - BlockPos pos = entity.getOnPos(); + BlockPos pos = entity.blockPosition(); Helper.getBlockEntitiesInArea(entity.level, pos, 5, tile -> { if (!(tile instanceof BlockEntityAnimalGenerator gen)) return false; diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraBloom.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraBloom.java index 4e05d3f0..47c97445 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraBloom.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraBloom.java @@ -84,6 +84,6 @@ public class BlockAuraBloom extends BushBlock implements IModItem, ICustomBlockS @org.jetbrains.annotations.Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new BlockEntityAuraBloom(); + return new BlockEntityAuraBloom(pos, state); } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraTimer.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraTimer.java index 8c2f5119..0823ecf8 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraTimer.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraTimer.java @@ -9,11 +9,10 @@ import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomRenderType; import de.ellpeck.naturesaura.reg.ITESRProvider; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.Tuple; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -21,7 +20,6 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -51,11 +49,6 @@ public class BlockAuraTimer extends BlockContainerImpl implements ICustomBlockSt return SHAPE; } - @Override - public Tuple, Supplier>> getTESR() { - return new Tuple<>(ModTileEntities.AURA_TIMER, () -> RenderAuraTimer::new); - } - @Override public Supplier getRenderType() { return RenderType::cutout; @@ -88,4 +81,8 @@ public class BlockAuraTimer extends BlockContainerImpl implements ICustomBlockSt levelIn.setBlockAndUpdate(pos, state.setValue(BlockStateProperties.POWERED, false)); } + @Override + public void registerTESR() { + BlockEntityRenderers.register(ModTileEntities.AURA_TIMER, RenderAuraTimer::new); + } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockEnderCrate.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockEnderCrate.java index 0b744479..f425e0c2 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockEnderCrate.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockEnderCrate.java @@ -10,15 +10,13 @@ import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ITESRProvider; import net.minecraft.ChatFormatting; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.resources.language.I18n; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.util.Tuple; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -29,7 +27,6 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.BlockHitResult; @@ -43,8 +40,6 @@ import net.minecraftforge.network.NetworkHooks; import javax.annotation.Nullable; import java.util.List; import java.util.Random; -import java.util.function.Function; -import java.util.function.Supplier; public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider, ICustomBlockState { @@ -127,11 +122,6 @@ public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider } } - @Override - public Tuple, Supplier>>> getTESR() { - return new Tuple<>(ModTileEntities.ENDER_CRATE, () -> RenderEnderCrate::new); - } - @Override public void generateCustomBlockState(BlockStateGenerator generator) { generator.simpleBlock(this, generator.models().cubeBottomTop(this.getBaseName(), @@ -139,4 +129,9 @@ public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider generator.modLoc("block/" + this.getBaseName() + "_bottom"), generator.modLoc("block/" + this.getBaseName() + "_top"))); } + + @Override + public void registerTESR() { + BlockEntityRenderers.register(ModTileEntities.ENDER_CRATE, RenderEnderCrate::new); + } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGeneratorLimitRemover.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGeneratorLimitRemover.java index 1c5650a1..11a7c4d9 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGeneratorLimitRemover.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGeneratorLimitRemover.java @@ -6,25 +6,16 @@ import de.ellpeck.naturesaura.blocks.tiles.render.RenderGeneratorLimitRemover; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ITESRProvider; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.util.Tuple; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.world.level.block.SoundType; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.material.Material; -import java.util.function.Supplier; - public class BlockGeneratorLimitRemover extends BlockContainerImpl implements ITESRProvider, ICustomBlockState { public BlockGeneratorLimitRemover() { super("generator_limit_remover", BlockEntityGeneratorLimitRemover::new, Properties.of(Material.STONE).strength(2F).sound(SoundType.STONE)); } - @Override - public Tuple, Supplier>> getTESR() { - return new Tuple<>(ModTileEntities.GENERATOR_LIMIT_REMOVER, () -> RenderGeneratorLimitRemover::new); - } - @Override public void generateCustomBlockState(BlockStateGenerator generator) { generator.simpleBlock(this, generator.models().cubeBottomTop(this.getBaseName(), @@ -32,4 +23,9 @@ public class BlockGeneratorLimitRemover extends BlockContainerImpl implements IT generator.modLoc("block/" + this.getBaseName() + "_top"), generator.modLoc("block/" + this.getBaseName() + "_top"))); } + + @Override + public void registerTESR() { + BlockEntityRenderers.register(ModTileEntities.GENERATOR_LIMIT_REMOVER, RenderGeneratorLimitRemover::new); + } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java index 3e488cfe..076ce3d3 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java @@ -3,25 +3,25 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityItemDistributor; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.entity.player.Player; -import net.minecraft.tileentity.BlockEntity; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; public class BlockItemDistributor extends BlockContainerImpl implements ICustomBlockState { public BlockItemDistributor() { - super("item_distributor", BlockEntityItemDistributor::new, Properties.from(Blocks.STONE_BRICKS)); + super("item_distributor", BlockEntityItemDistributor::new, Properties.copy(Blocks.STONE_BRICKS)); } @Override - public InteractionResult onBlockActivated(BlockState state, Level levelIn, BlockPos pos, Player player, Hand handIn, BlockRayTraceResult hit) { - if (!player.isSneaking()) + public InteractionResult use(BlockState state, Level levelIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) { + if (!player.isCrouching()) return InteractionResult.FAIL; BlockEntity tile = levelIn.getBlockEntity(pos); if (!(tile instanceof BlockEntityItemDistributor)) diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockLight.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockLight.java index ccb9632f..848c4d42 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockLight.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockLight.java @@ -5,15 +5,15 @@ import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomRenderType; import de.ellpeck.naturesaura.reg.INoItemBlock; -import net.minecraft.block.BlockState; -import net.minecraft.block.material.Material; import net.minecraft.client.renderer.RenderType; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.level.BlockGetter; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -22,10 +22,10 @@ import java.util.function.Supplier; public class BlockLight extends BlockImpl implements ICustomBlockState, INoItemBlock, ICustomRenderType { - private static final VoxelShape SHAPE = makeCuboidShape(4, 4, 4, 12, 12, 12); + private static final VoxelShape SHAPE = box(4, 4, 4, 12, 12, 12); public BlockLight() { - super("light", Properties.create(Material.WOOL).doesNotBlockMovement().setLightLevel(s -> 15)); + super("light", Properties.of(Material.WOOL).noCollission().lightLevel(s -> 15)); } @Override @@ -39,12 +39,12 @@ public class BlockLight extends BlockImpl implements ICustomBlockState, INoItemB } @Override - public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, ISelectionContext context) { + public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, CollisionContext context) { return SHAPE; } @Override - public boolean isReplaceable(BlockState state, BlockItemUseContext useContext) { + public boolean canBeReplaced(BlockState state, BlockPlaceContext useContext) { return true; } @@ -56,6 +56,6 @@ public class BlockLight extends BlockImpl implements ICustomBlockState, INoItemB @Override public Supplier getRenderType() { - return RenderType::getCutoutMipped; + return RenderType::cutoutMipped; } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockMossGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockMossGenerator.java index b75084f0..ace84b9e 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockMossGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockMossGenerator.java @@ -2,23 +2,24 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.api.render.IVisualizable; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityMossGenerator; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; public class BlockMossGenerator extends BlockContainerImpl implements IVisualizable { + public BlockMossGenerator() { - super("moss_generator", BlockEntityMossGenerator::new, Properties.create(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); + super("moss_generator", BlockEntityMossGenerator::new, Properties.of(Material.STONE).strength(2.5F).sound(SoundType.STONE)); } @Override @OnlyIn(Dist.CLIENT) public AABB getVisualizationBounds(Level level, BlockPos pos) { - return new AABB(pos).grow(2); + return new AABB(pos).inflate(2); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java index 23a488cb..093132ab 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java @@ -9,32 +9,25 @@ import de.ellpeck.naturesaura.blocks.tiles.render.RenderNatureAltar; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ITESRProvider; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; -import net.minecraft.client.renderer.tileentity.BlockEntityRenderer; -import net.minecraft.client.renderer.tileentity.BlockEntityRendererDispatcher; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.core.BlockPos; -import net.minecraft.entity.player.Player; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.StateContainer; -import net.minecraft.tileentity.BlockEntityType; -import net.minecraft.util.Hand; -import net.minecraft.util.Tuple; -import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.common.ToolType; import javax.annotation.Nullable; -import java.util.function.Function; -import java.util.function.Supplier; public class BlockNatureAltar extends BlockContainerImpl implements ITESRProvider, ICustomBlockState { @@ -42,8 +35,8 @@ public class BlockNatureAltar extends BlockContainerImpl implements ITESRProvide public static final BooleanProperty NETHER = BooleanProperty.create("nether"); public BlockNatureAltar() { - super("nature_altar", BlockEntityNatureAltar::new, Block.Properties.create(Material.ROCK).hardnessAndResistance(4F).harvestLevel(1).harvestTool(ToolType.PICKAXE)); - this.setDefaultState(this.getDefaultState().with(NETHER, false)); + super("nature_altar", BlockEntityNatureAltar::new, Block.Properties.of(Material.STONE).strength(4F)); + this.registerDefaultState(this.defaultBlockState().setValue(NETHER, false)); } @Override @@ -58,30 +51,30 @@ public class BlockNatureAltar extends BlockContainerImpl implements ITESRProvide @Override - public InteractionResult onBlockActivated(BlockState state, Level levelIn, BlockPos pos, Player player, Hand handIn, BlockRayTraceResult hit) { + public InteractionResult use(BlockState state, Level levelIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) { return Helper.putStackOnTile(player, handIn, pos, 0, true); } - @Override - public Tuple, Supplier>>> getTESR() { - return new Tuple<>(ModTileEntities.NATURE_ALTAR, () -> RenderNatureAltar::new); - } - @Override public void generateCustomBlockState(BlockStateGenerator generator) { // noop } @Override - protected void fillStateContainer(StateContainer.Builder builder) { - super.fillStateContainer(builder); + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); builder.add(NETHER); } @Nullable @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { + public BlockState getStateForPlacement(BlockPlaceContext context) { boolean nether = IAuraType.forLevel(context.getLevel()).isSimilar(NaturesAuraAPI.TYPE_NETHER); - return super.getStateForPlacement(context).with(NETHER, nether); + return super.getStateForPlacement(context).setValue(NETHER, nether); + } + + @Override + public void registerTESR() { + BlockEntityRenderers.register(ModTileEntities.NATURE_ALTAR, RenderNatureAltar::new); } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNetherGrass.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNetherGrass.java index 9253f7a5..4356471f 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNetherGrass.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNetherGrass.java @@ -2,29 +2,29 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.IGrowable; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.BlockGetter; -import net.minecraft.level.Level; -import net.minecraft.level.server.ServerLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockState; import java.util.Random; -public class BlockNetherGrass extends BlockImpl implements ICustomBlockState, IGrowable { +public class BlockNetherGrass extends BlockImpl implements ICustomBlockState, BonemealableBlock { public BlockNetherGrass() { - super("nether_grass", Properties.from(Blocks.NETHERRACK).tickRandomly()); + super("nether_grass", Properties.copy(Blocks.NETHERRACK).randomTicks()); } @Override public void randomTick(BlockState state, ServerLevel levelIn, BlockPos pos, Random random) { - BlockPos up = pos.up(); + BlockPos up = pos.above(); BlockState upState = levelIn.getBlockState(up); - if (upState.isSolidSide(levelIn, up, Direction.DOWN)) - levelIn.setBlockState(pos, Blocks.NETHERRACK.getDefaultState()); + if (upState.isFaceSturdy(levelIn, up, Direction.DOWN)) + levelIn.setBlockAndUpdate(pos, Blocks.NETHERRACK.defaultBlockState()); } @Override @@ -36,19 +36,19 @@ public class BlockNetherGrass extends BlockImpl implements ICustomBlockState, IG } @Override - public boolean canGrow(BlockGetter levelIn, BlockPos pos, BlockState state, boolean isClient) { - return levelIn.getBlockState(pos.up()).isAir(levelIn, pos.up()); + public boolean isValidBonemealTarget(BlockGetter levelIn, BlockPos pos, BlockState state, boolean isClient) { + return levelIn.getBlockState(pos.above()).isAir(); } @Override - public boolean canUseBonemeal(Level levelIn, Random rand, BlockPos pos, BlockState state) { + public boolean isBonemealSuccess(Level levelIn, Random rand, BlockPos pos, BlockState state) { return true; } @Override - public void grow(ServerLevel level, Random rand, BlockPos pos, BlockState state) { - BlockPos blockpos = pos.up(); - BlockState blockstate = Blocks.GRASS.getDefaultState(); + public void performBonemeal(ServerLevel level, Random rand, BlockPos pos, BlockState state) { + BlockPos blockpos = pos.above(); + BlockState blockstate = Blocks.GRASS.defaultBlockState(); for (int i = 0; i < 128; ++i) { BlockPos blockpos1 = blockpos; @@ -58,21 +58,21 @@ public class BlockNetherGrass extends BlockImpl implements ICustomBlockState, IG if (j >= i / 16) { BlockState blockstate2 = level.getBlockState(blockpos1); if (blockstate2.getBlock() == blockstate.getBlock() && rand.nextInt(10) == 0) { - ((IGrowable) blockstate.getBlock()).grow(level, rand, blockpos1, blockstate2); + ((BonemealableBlock) blockstate.getBlock()).performBonemeal(level, rand, blockpos1, blockstate2); } if (!blockstate2.isAir()) { break; } - if (blockstate.isValidPosition(level, blockpos1)) { - level.setBlockState(blockpos1, blockstate, 3); + if (blockstate.canSurvive(level, blockpos1)) { + level.setBlock(blockpos1, blockstate, 3); } break; } - blockpos1 = blockpos1.add(rand.nextInt(3) - 1, (rand.nextInt(3) - 1) * rand.nextInt(3) / 2, rand.nextInt(3) - 1); - if (level.getBlockState(blockpos1.down()).getBlock() != this || level.getBlockState(blockpos1).hasOpaqueCollisionShape(level, blockpos1)) { + blockpos1 = blockpos1.offset(rand.nextInt(3) - 1, (rand.nextInt(3) - 1) * rand.nextInt(3) / 2, rand.nextInt(3) - 1); + if (level.getBlockState(blockpos1.below()).getBlock() != this || level.getBlockState(blockpos1).isCollisionShapeFullBlock(level, blockpos1)) { break; } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java index 13787333..960ce26b 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java @@ -7,17 +7,16 @@ import de.ellpeck.naturesaura.api.render.IVisualizable; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityOakGenerator; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.SaplingBlock; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.ILevel; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SaplingBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.level.SaplingGrowTreeEvent; +import net.minecraftforge.event.world.SaplingGrowTreeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import java.util.Random; @@ -25,16 +24,16 @@ import java.util.Random; public class BlockOakGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockOakGenerator() { - super("oak_generator", BlockEntityOakGenerator::new, Properties.create(Material.WOOD).hardnessAndResistance(2F).sound(SoundType.WOOD)); + super("oak_generator", BlockEntityOakGenerator::new, Properties.of(Material.WOOD).strength(2F).sound(SoundType.WOOD)); MinecraftForge.EVENT_BUS.register(this); } @SubscribeEvent public void onTreeGrow(SaplingGrowTreeEvent event) { - ILevel level = event.getLevel(); + var level = event.getWorld(); BlockPos pos = event.getPos(); - if (level instanceof Level && !level.isClientSide() && IAuraType.forLevel(level).isSimilar(NaturesAuraAPI.TYPE_OVERWORLD) + if (level instanceof Level && !level.isClientSide() && IAuraType.forLevel((Level) level).isSimilar(NaturesAuraAPI.TYPE_OVERWORLD) && level.getBlockState(pos).getBlock() instanceof SaplingBlock) { Helper.getBlockEntitiesInArea(level, pos, 10, tile -> { if (!(tile instanceof BlockEntityOakGenerator)) @@ -60,7 +59,7 @@ public class BlockOakGenerator extends BlockContainerImpl implements IVisualizab @Override @OnlyIn(Dist.CLIENT) public AABB getVisualizationBounds(Level level, BlockPos pos) { - return new AABB(pos).grow(10); + return new AABB(pos).inflate(10); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOfferingTable.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOfferingTable.java index 7fbeffc8..0e4110c9 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOfferingTable.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOfferingTable.java @@ -1,39 +1,33 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.Helper; -import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityOfferingTable; +import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities; import de.ellpeck.naturesaura.blocks.tiles.render.RenderOfferingTable; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ITESRProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.tileentity.BlockEntityRenderer; -import net.minecraft.client.renderer.tileentity.BlockEntityRendererDispatcher; -import net.minecraft.entity.player.Player; -import net.minecraft.tileentity.BlockEntityType; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.Tuple; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.Shapes; -import net.minecraft.level.BlockGetter; -import net.minecraft.level.Level; - -import java.util.function.Function; -import java.util.function.Supplier; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; public class BlockOfferingTable extends BlockContainerImpl implements ITESRProvider, ICustomBlockState { private static final VoxelShape SHAPE = Shapes.create(2 / 16F, 0F, 2 / 16F, 14 / 16F, 1F, 14 / 16F); public BlockOfferingTable() { - super("offering_table", BlockEntityOfferingTable::new, Properties.create(Material.WOOD).hardnessAndResistance(2F).sound(SoundType.WOOD)); + super("offering_table", BlockEntityOfferingTable::new, Properties.of(Material.WOOD).strength(2F).sound(SoundType.WOOD)); } @Override @@ -42,22 +36,22 @@ public class BlockOfferingTable extends BlockContainerImpl implements ITESRProvi } @Override - public InteractionResult onBlockActivated(BlockState state, Level levelIn, BlockPos pos, Player player, Hand handIn, BlockRayTraceResult hit) { + public InteractionResult use(BlockState state, Level levelIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) { return Helper.putStackOnTile(player, handIn, pos, 0, true); } @Override - public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, ISelectionContext context) { + public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, CollisionContext context) { return SHAPE; } - @Override - public Tuple, Supplier>>> getTESR() { - return new Tuple<>(ModTileEntities.OFFERING_TABLE, () -> RenderOfferingTable::new); - } - @Override public void generateCustomBlockState(BlockStateGenerator generator) { generator.simpleBlock(this, generator.models().getExistingFile(generator.modLoc(this.getBaseName()))); } + + @Override + public void registerTESR() { + BlockEntityRenderers.register(ModTileEntities.OFFERING_TABLE, RenderOfferingTable::new); + } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java index 20673fdd..6ec915c0 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java @@ -7,14 +7,14 @@ import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.entity.player.Player; -import net.minecraft.tileentity.BlockEntity; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.MinecraftForge; @@ -22,8 +22,9 @@ import net.minecraftforge.event.entity.player.EntityItemPickupEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; public class BlockPickupStopper extends BlockContainerImpl implements IVisualizable, ICustomBlockState { + public BlockPickupStopper() { - super("pickup_stopper", BlockEntityPickupStopper::new, Properties.create(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); + super("pickup_stopper", BlockEntityPickupStopper::new, Properties.of(Material.STONE).strength(2F).sound(SoundType.STONE)); MinecraftForge.EVENT_BUS.register(this); } @@ -31,25 +32,24 @@ public class BlockPickupStopper extends BlockContainerImpl implements IVisualiza @SubscribeEvent public void onPickup(EntityItemPickupEvent event) { Player player = event.getPlayer(); - if (player != null && !player.isSneaking()) { + if (player != null && !player.isCrouching()) { ItemEntity item = event.getItem(); - BlockPos pos = item.getPosition(); + BlockPos pos = item.blockPosition(); Helper.getBlockEntitiesInArea(item.level, pos, 8, tile -> { - if (!(tile instanceof BlockEntityPickupStopper)) + if (!(tile instanceof BlockEntityPickupStopper stopper)) return false; - BlockEntityPickupStopper stopper = (BlockEntityPickupStopper) tile; float radius = stopper.getRadius(); if (radius <= 0F) return false; - BlockPos stopperPos = stopper.getPos(); - if (!new AABB(stopperPos).grow(radius).intersects(item.getBoundingBox())) + BlockPos stopperPos = stopper.getBlockPos(); + if (!new AABB(stopperPos).inflate(radius).intersects(item.getBoundingBox())) return false; event.setCanceled(true); if (item.level.getGameTime() % 3 == 0) PacketHandler.sendToAllAround(item.level, pos, 32, - new PacketParticles((float) item.getPosX(), (float) item.getPosY(), (float) item.getPosZ(), PacketParticles.Type.PICKUP_STOPPER)); + new PacketParticles((float) item.getX(), (float) item.getY(), (float) item.getZ(), PacketParticles.Type.PICKUP_STOPPER)); return true; }); } @@ -62,7 +62,7 @@ public class BlockPickupStopper extends BlockContainerImpl implements IVisualiza if (tile instanceof BlockEntityPickupStopper) { double radius = ((BlockEntityPickupStopper) tile).getRadius(); if (radius > 0) - return new AABB(pos).grow(radius); + return new AABB(pos).inflate(radius); } return null; } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPlacer.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPlacer.java index 0493eaa3..ba94d077 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPlacer.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPlacer.java @@ -4,24 +4,24 @@ import de.ellpeck.naturesaura.api.render.IVisualizable; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityPlacer; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; public class BlockPlacer extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockPlacer() { - super("placer", BlockEntityPlacer::new, Properties.create(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); + super("placer", BlockEntityPlacer::new, Properties.of(Material.STONE).strength(2.5F).sound(SoundType.STONE)); } @Override @OnlyIn(Dist.CLIENT) public AABB getVisualizationBounds(Level level, BlockPos pos) { - return new AABB(pos).grow(5); + return new AABB(pos).inflate(5); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPotionGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPotionGenerator.java index 4cd77412..379d9c41 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPotionGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPotionGenerator.java @@ -3,12 +3,12 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityPotionGenerator; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.material.Material; -import net.minecraftforge.common.ToolType; +import net.minecraft.world.level.material.Material; public class BlockPotionGenerator extends BlockContainerImpl implements ICustomBlockState { + public BlockPotionGenerator() { - super("potion_generator", BlockEntityPotionGenerator::new, Properties.create(Material.ROCK).hardnessAndResistance(5F).harvestTool(ToolType.PICKAXE).harvestLevel(1)); + super("potion_generator", BlockEntityPotionGenerator::new, Properties.of(Material.STONE).strength(5F)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPowderPlacer.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPowderPlacer.java index 7d9f8ecf..f483a9e7 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPowderPlacer.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPowderPlacer.java @@ -3,21 +3,21 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityPowderPlacer; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.BlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.Shapes; -import net.minecraft.level.BlockGetter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; public class BlockPowderPlacer extends BlockContainerImpl implements ICustomBlockState { private static final VoxelShape SHAPE = Shapes.create(0F, 0F, 0F, 1F, 4 / 16F, 1F); public BlockPowderPlacer() { - super("powder_placer", BlockEntityPowderPlacer::new, Properties.create(Material.ROCK).hardnessAndResistance(2, 5F).sound(SoundType.STONE)); + super("powder_placer", BlockEntityPowderPlacer::new, Properties.of(Material.STONE).strength(2, 5F).sound(SoundType.STONE)); } @Override @@ -26,7 +26,7 @@ public class BlockPowderPlacer extends BlockContainerImpl implements ICustomBloc } @Override - public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, ISelectionContext context) { + public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, CollisionContext context) { return SHAPE; } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java index 98ffc4dd..8211f2b7 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java @@ -1,69 +1,62 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.api.NaturesAuraAPI; -import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; -import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityProjectileGenerator; +import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities; import de.ellpeck.naturesaura.blocks.tiles.render.RenderProjectileGenerator; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ITESRProvider; -import net.minecraft.block.DispenserBlock; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.tileentity.BlockEntityRenderer; -import net.minecraft.client.renderer.tileentity.BlockEntityRendererDispatcher; -import net.minecraft.dispenser.IPosition; -import net.minecraft.dispenser.ProjectileDispenseBehavior; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.item.EnderPearlEntity; -import net.minecraft.entity.projectile.AbstractArrowEntity; -import net.minecraft.entity.projectile.ProjectileEntity; -import net.minecraft.entity.projectile.TridentEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.tileentity.BlockEntity; -import net.minecraft.tileentity.BlockEntityType; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvents; -import net.minecraft.util.Tuple; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.level.Level; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Position; +import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.entity.projectile.ThrownEnderpearl; +import net.minecraft.world.entity.projectile.ThrownTrident; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.DispenserBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.ProjectileImpactEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; - -import java.util.function.Function; -import java.util.function.Supplier; +import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public class BlockProjectileGenerator extends BlockContainerImpl implements ITESRProvider, ICustomBlockState { public BlockProjectileGenerator() { - super("projectile_generator", BlockEntityProjectileGenerator::new, Properties.create(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); + super("projectile_generator", BlockEntityProjectileGenerator::new, Properties.of(Material.STONE).strength(2.5F).sound(SoundType.STONE)); MinecraftForge.EVENT_BUS.register(this); - DispenserBlock.registerDispenseBehavior(Items.ENDER_PEARL, new ProjectileDispenseBehavior() { + DispenserBlock.registerBehavior(Items.ENDER_PEARL, new AbstractProjectileDispenseBehavior() { + @Override - protected ProjectileEntity getProjectileEntity(Level levelIn, IPosition position, ItemStack stackIn) { - EnderPearlEntity ret = new EnderPearlEntity(EntityType.ENDER_PEARL, levelIn); - ret.setPosition(position.getX(), position.getY(), position.getZ()); + protected Projectile getProjectile(Level levelIn, Position position, ItemStack stackIn) { + ThrownEnderpearl ret = new ThrownEnderpearl(EntityType.ENDER_PEARL, levelIn); + ret.setPos(position.x(), position.y(), position.z()); return ret; } }); - DispenserBlock.registerDispenseBehavior(Items.TRIDENT, new ProjectileDispenseBehavior() { + DispenserBlock.registerBehavior(Items.TRIDENT, new AbstractProjectileDispenseBehavior() { @Override - protected ProjectileEntity getProjectileEntity(Level levelIn, IPosition position, ItemStack stackIn) { - TridentEntity ret = new TridentEntity(EntityType.TRIDENT, levelIn); - ret.setPosition(position.getX(), position.getY(), position.getZ()); - // set thrownStack - ObfuscationReflectionHelper.setPrivateValue(TridentEntity.class, ret, stackIn.copy(), "field_203054_h"); - ret.pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; + protected Projectile getProjectile(Level levelIn, Position position, ItemStack stackIn) { + ThrownTrident ret = new ThrownTrident(EntityType.TRIDENT, levelIn); + ret.setPos(position.x(), position.y(), position.z()); + ObfuscationReflectionHelper.setPrivateValue(ThrownTrident.class, ret, stackIn.copy(), "tridentItem"); + ret.pickup = AbstractArrow.Pickup.ALLOWED; return ret; } }); @@ -74,18 +67,16 @@ public class BlockProjectileGenerator extends BlockContainerImpl implements ITES Entity entity = event.getEntity(); if (entity.level.isClientSide) return; - RayTraceResult ray = event.getRayTraceResult(); - if (!(ray instanceof BlockRayTraceResult)) + HitResult ray = event.getRayTraceResult(); + if (!(ray instanceof BlockHitResult blockRay)) return; - BlockRayTraceResult blockRay = (BlockRayTraceResult) ray; - BlockPos pos = blockRay.getPos(); + BlockPos pos = blockRay.getBlockPos(); if (pos == null) return; BlockEntity tile = entity.level.getBlockEntity(pos); - if (!(tile instanceof BlockEntityProjectileGenerator)) + if (!(tile instanceof BlockEntityProjectileGenerator generator)) return; - BlockEntityProjectileGenerator generator = (BlockEntityProjectileGenerator) tile; - if (generator.nextSide != blockRay.getFace()) + if (generator.nextSide != blockRay.getDirection()) return; Integer amount = NaturesAuraAPI.PROJECTILE_GENERATIONS.get(entity.getType()); if (amount == null || amount <= 0) @@ -95,21 +86,16 @@ public class BlockProjectileGenerator extends BlockContainerImpl implements ITES generator.generateAura(amount); PacketHandler.sendToAllAround(entity.level, pos, 32, - new PacketParticles((float) entity.getPosX(), (float) entity.getPosY(), (float) entity.getPosZ(), PacketParticles.Type.PROJECTILE_GEN, pos.getX(), pos.getY(), pos.getZ())); - entity.level.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.ENTITY_ENDER_EYE_LAUNCH, SoundCategory.BLOCKS, 0.8F, 1F); + new PacketParticles((float) entity.getX(), (float) entity.getY(), (float) entity.getZ(), PacketParticles.Type.PROJECTILE_GEN, pos.getX(), pos.getY(), pos.getZ())); + entity.level.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.ENDER_EYE_LAUNCH, SoundSource.BLOCKS, 0.8F, 1F); - generator.nextSide = generator.nextSide.rotateY(); + generator.nextSide = generator.nextSide.getClockWise(); generator.sendToClients(); - entity.remove(); + entity.kill(); event.setCanceled(true); } - @Override - public Tuple, Supplier>>> getTESR() { - return new Tuple<>(ModTileEntities.PROJECTILE_GENERATOR, () -> RenderProjectileGenerator::new); - } - @Override public void generateCustomBlockState(BlockStateGenerator generator) { generator.simpleBlock(this, generator.models().cubeBottomTop(this.getBaseName(), @@ -117,4 +103,9 @@ public class BlockProjectileGenerator extends BlockContainerImpl implements ITES generator.modLoc("block/" + this.getBaseName() + "_top"), generator.modLoc("block/" + this.getBaseName() + "_top"))); } + + @Override + public void registerTESR() { + BlockEntityRenderers.register(ModTileEntities.PROJECTILE_GENERATOR, RenderProjectileGenerator::new); + } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockRFConverter.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockRFConverter.java index 9526efc5..06c0ed7a 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockRFConverter.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockRFConverter.java @@ -3,17 +3,17 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.ModConfig; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityRFConverter; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; public class BlockRFConverter extends BlockContainerImpl { public BlockRFConverter() { - super("rf_converter", BlockEntityRFConverter::new, Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3)); + super("rf_converter", BlockEntityRFConverter::new, Properties.of(Material.STONE).sound(SoundType.STONE).strength(3)); } @Override - public String getTranslationKey() { - return ModConfig.instance.rfConverter.get() ? super.getTranslationKey() : "block." + NaturesAura.MOD_ID + "." + this.getBaseName() + ".disabled"; + public String getDescriptionId() { + return ModConfig.instance.rfConverter.get() ? super.getDescriptionId() : "block." + NaturesAura.MOD_ID + "." + this.getBaseName() + ".disabled"; } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSlimeSplitGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSlimeSplitGenerator.java index cbe625e2..de69778f 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSlimeSplitGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSlimeSplitGenerator.java @@ -5,12 +5,12 @@ import de.ellpeck.naturesaura.api.render.IVisualizable; import de.ellpeck.naturesaura.blocks.tiles.BlockEntitySlimeSplitGenerator; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.Blocks; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.monster.SlimeEntity; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.monster.Slime; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.MinecraftForge; @@ -18,8 +18,9 @@ import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; public class BlockSlimeSplitGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { + public BlockSlimeSplitGenerator() { - super("slime_split_generator", BlockEntitySlimeSplitGenerator::new, Properties.from(Blocks.SLIME_BLOCK).hardnessAndResistance(2)); + super("slime_split_generator", BlockEntitySlimeSplitGenerator::new, Properties.copy(Blocks.SLIME_BLOCK).strength(2)); MinecraftForge.EVENT_BUS.register(new Events()); } @@ -34,7 +35,7 @@ public class BlockSlimeSplitGenerator extends BlockContainerImpl implements IVis @Override @OnlyIn(Dist.CLIENT) public AABB getVisualizationBounds(Level level, BlockPos pos) { - return new AABB(pos).grow(8); + return new AABB(pos).inflate(8); } @Override @@ -48,16 +49,14 @@ public class BlockSlimeSplitGenerator extends BlockContainerImpl implements IVis @SubscribeEvent public void onLivingDeath(LivingDeathEvent event) { LivingEntity entity = event.getEntityLiving(); - if (!(entity instanceof SlimeEntity) || entity.level.isClientSide) + if (!(entity instanceof Slime slime) || entity.level.isClientSide) return; - SlimeEntity slime = (SlimeEntity) entity; - int size = slime.getSlimeSize(); + int size = slime.getSize(); if (size <= 1) return; - Helper.getBlockEntitiesInArea(entity.level, entity.getPosition(), 8, tile -> { - if (!(tile instanceof BlockEntitySlimeSplitGenerator)) + Helper.getBlockEntitiesInArea(entity.level, entity.blockPosition(), 8, tile -> { + if (!(tile instanceof BlockEntitySlimeSplitGenerator gen)) return false; - BlockEntitySlimeSplitGenerator gen = (BlockEntitySlimeSplitGenerator) tile; if (gen.isBusy()) return false; gen.startGenerating(slime); diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSnowCreator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSnowCreator.java index 300b0a66..3aa3630a 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSnowCreator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSnowCreator.java @@ -4,17 +4,18 @@ import de.ellpeck.naturesaura.api.render.IVisualizable; import de.ellpeck.naturesaura.blocks.tiles.BlockEntitySnowCreator; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.Blocks; -import net.minecraft.tileentity.BlockEntity; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; public class BlockSnowCreator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { + public BlockSnowCreator() { - super("snow_creator", BlockEntitySnowCreator::new, Properties.from(Blocks.STONE_BRICKS)); + super("snow_creator", BlockEntitySnowCreator::new, Properties.copy(Blocks.STONE_BRICKS)); } @Override @@ -24,7 +25,7 @@ public class BlockSnowCreator extends BlockContainerImpl implements IVisualizabl if (tile instanceof BlockEntitySnowCreator) { int radius = ((BlockEntitySnowCreator) tile).getRange(); if (radius > 0) - return new AABB(pos).grow(radius); + return new AABB(pos).inflate(radius); } return null; } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpawnLamp.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpawnLamp.java index eb6a7d0c..4d276a00 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpawnLamp.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpawnLamp.java @@ -10,22 +10,22 @@ import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomRenderType; -import net.minecraft.block.BlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; import net.minecraft.client.renderer.RenderType; -import net.minecraft.entity.MobEntity; -import net.minecraft.tileentity.BlockEntity; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.Shapes; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.level.BlockGetter; -import net.minecraft.level.ILevel; -import net.minecraft.level.Level; -import net.minecraft.level.server.ServerLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.MinecraftForge; @@ -40,7 +40,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable, private static final VoxelShape SHAPE = Shapes.create(4 / 16F, 0F, 4 / 16F, 12 / 16F, 13 / 16F, 12 / 16F); public BlockSpawnLamp() { - super("spawn_lamp", BlockEntitySpawnLamp::new, Properties.create(Material.IRON).hardnessAndResistance(3F).setLightLevel(s -> 15).sound(SoundType.METAL)); + super("spawn_lamp", BlockEntitySpawnLamp::new, Properties.of(Material.METAL).strength(3F).lightLevel(s -> 15).sound(SoundType.METAL)); MinecraftForge.EVENT_BUS.register(this); } @@ -53,7 +53,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable, public void onSpawn(LivingSpawnEvent.CheckSpawn event) { if (event.getSpawner() != null) return; - ILevel level = event.getLevel(); + LevelAccessor level = event.getWorld(); BlockPos pos = new BlockPos(event.getX(), event.getY(), event.getZ()); if (!(level instanceof Level)) return; @@ -66,14 +66,14 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable, if (range <= 0) continue; - BlockPos lampPos = lamp.getPos(); - if (!new AABB(lampPos).grow(range).contains(new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5))) + BlockPos lampPos = lamp.getBlockPos(); + if (!new AABB(lampPos).inflate(range).contains(new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5))) continue; - MobEntity entity = (MobEntity) event.getEntityLiving(); - if (entity.canSpawn(level, event.getSpawnReason()) && entity.isNotColliding(level)) { - BlockPos spot = IAuraChunk.getHighestSpot(level, lampPos, 32, lampPos); - IAuraChunk.getAuraChunk(level, spot).drainAura(spot, 200); + Mob entity = (Mob) event.getEntityLiving(); + if (entity.checkSpawnRules(level, event.getSpawnReason()) && entity.checkSpawnObstruction(level)) { + BlockPos spot = IAuraChunk.getHighestSpot((Level) level, lampPos, 32, lampPos); + IAuraChunk.getAuraChunk((Level) level, spot).drainAura(spot, 200); PacketHandler.sendToAllAround((ServerLevel) level, lampPos, 32, new PacketParticles(lampPos.getX(), lampPos.getY(), lampPos.getZ(), PacketParticles.Type.SPAWN_LAMP)); @@ -85,7 +85,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable, } @Override - public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, ISelectionContext context) { + public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, CollisionContext context) { return SHAPE; } @@ -96,7 +96,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable, if (tile instanceof BlockEntitySpawnLamp) { int radius = ((BlockEntitySpawnLamp) tile).getRadius(); if (radius > 0) - return new AABB(pos).grow(radius); + return new AABB(pos).inflate(radius); } return null; } @@ -114,6 +114,6 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable, @Override public Supplier getRenderType() { - return RenderType::getCutoutMipped; + return RenderType::cutoutMipped; } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpring.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpring.java index b4d904e1..7b79c657 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpring.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpring.java @@ -6,46 +6,49 @@ import de.ellpeck.naturesaura.reg.IColorProvidingBlock; import de.ellpeck.naturesaura.reg.IColorProvidingItem; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomRenderType; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.IBucketPickupHandler; import net.minecraft.client.Minecraft; +import net.minecraft.client.color.block.BlockColor; +import net.minecraft.client.color.item.ItemColor; +import net.minecraft.client.renderer.BiomeColors; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.color.IBlockColor; -import net.minecraft.client.renderer.color.IItemColor; -import net.minecraft.entity.player.Player; -import net.minecraft.fluid.Fluid; -import net.minecraft.fluid.Fluids; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.BlockEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.ILevel; -import net.minecraft.level.biome.BiomeColors; +import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BucketPickup; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluids; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import java.util.Optional; import java.util.function.Supplier; -public class BlockSpring extends BlockContainerImpl implements ICustomBlockState, IColorProvidingBlock, IColorProvidingItem, IBucketPickupHandler, ICustomRenderType { +public class BlockSpring extends BlockContainerImpl implements ICustomBlockState, IColorProvidingBlock, IColorProvidingItem, BucketPickup, ICustomRenderType { + public BlockSpring() { - super("spring", BlockEntitySpring::new, Properties.from(Blocks.STONE_BRICKS)); + super("spring", BlockEntitySpring::new, Properties.copy(Blocks.STONE_BRICKS)); } @Override @OnlyIn(Dist.CLIENT) - public IBlockColor getBlockColor() { - return (state, level, pos, i) -> BiomeColors.getWaterColor(level, pos); + public BlockColor getBlockColor() { + return (state, level, pos, i) -> BiomeColors.getAverageWaterColor(level, pos); } @Override @OnlyIn(Dist.CLIENT) @SuppressWarnings("Convert2Lambda") - public IItemColor getItemColor() { - return new IItemColor() { + public ItemColor getItemColor() { + return new ItemColor() { @Override public int getColor(ItemStack stack, int i) { Player player = Minecraft.getInstance().player; - return BiomeColors.getWaterColor(player.level, player.getPosition()); + return BiomeColors.getAverageWaterColor(player.level, player.blockPosition()); } }; } @@ -55,16 +58,21 @@ public class BlockSpring extends BlockContainerImpl implements ICustomBlockState generator.simpleBlock(this, generator.models().getExistingFile(generator.modLoc(this.getBaseName()))); } - @Override - public Fluid pickupFluid(ILevel levelIn, BlockPos pos, BlockState state) { - BlockEntity tile = levelIn.getBlockEntity(pos); - if (tile instanceof BlockEntitySpring) - ((BlockEntitySpring) tile).consumeAura(2500); - return Fluids.WATER; - } @Override public Supplier getRenderType() { - return RenderType::getTranslucent; + return RenderType::translucent; + } + + @Override + public ItemStack pickupBlock(LevelAccessor levelIn, BlockPos pos, BlockState state) { + BlockEntity tile = levelIn.getBlockEntity(pos); + if (tile instanceof BlockEntitySpring) + ((BlockEntitySpring) tile).consumeAura(2500); + return new ItemStack(Items.WATER_BUCKET); } + + @Override + public Optional getPickupSound() { + return Fluids.WATER.getPickupSound(); } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockTimeChanger.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockTimeChanger.java index 1c558fda..d9bb4b03 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockTimeChanger.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockTimeChanger.java @@ -3,12 +3,13 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityTimeChanger; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; public class BlockTimeChanger extends BlockContainerImpl implements ICustomBlockState { + public BlockTimeChanger() { - super("time_changer", BlockEntityTimeChanger::new, Properties.create(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); + super("time_changer", BlockEntityTimeChanger::new, Properties.of(Material.STONE).strength(2.5F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockWeatherChanger.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockWeatherChanger.java index 38aa86ad..59e559b9 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockWeatherChanger.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockWeatherChanger.java @@ -3,11 +3,12 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityWeatherChanger; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.Blocks; +import net.minecraft.world.level.block.Blocks; public class BlockWeatherChanger extends BlockContainerImpl implements ICustomBlockState { + public BlockWeatherChanger() { - super("weather_changer", BlockEntityWeatherChanger::new, Properties.from(Blocks.STONE_BRICKS)); + super("weather_changer", BlockEntityWeatherChanger::new, Properties.copy(Blocks.STONE_BRICKS)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java index 491a5d46..1c75f50a 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java @@ -10,9 +10,8 @@ import de.ellpeck.naturesaura.recipes.ModRecipes; import de.ellpeck.naturesaura.recipes.TreeRitualRecipe; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ITESRProvider; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.core.BlockPos; -import net.minecraft.util.Tuple; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -23,7 +22,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.BlockHitResult; @@ -38,7 +36,6 @@ import org.apache.commons.lang3.mutable.MutableObject; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.function.Supplier; public class BlockWoodStand extends BlockContainerImpl implements ITESRProvider, ICustomBlockState { @@ -111,14 +108,13 @@ public class BlockWoodStand extends BlockContainerImpl implements ITESRProvider< return Helper.putStackOnTile(player, handIn, pos, 0, true); } - @Override - public Tuple, Supplier>> getTESR() { - return new Tuple<>(ModTileEntities.WOOD_STAND, () -> RenderWoodStand::new); - } - @Override public void generateCustomBlockState(BlockStateGenerator generator) { generator.simpleBlock(this, generator.models().getExistingFile(generator.modLoc(this.getBaseName()))); } + @Override + public void registerTESR() { + BlockEntityRenderers.register(ModTileEntities.WOOD_STAND, RenderWoodStand::new); + } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/multi/Multiblock.java b/src/main/java/de/ellpeck/naturesaura/blocks/multi/Multiblock.java index 5e877cf1..dea05b6b 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/multi/Multiblock.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/multi/Multiblock.java @@ -96,7 +96,7 @@ public class Multiblock implements IMultiblock { Matcher matcher = matchers.get(this.rawPattern[x][y][z]); if (matcher == null) throw new IllegalStateException(); - if (matcher.getCheck() != null) + if (matcher.check() != null) this.matchers.put(new BlockPos(x, y, z), matcher); } @@ -109,7 +109,7 @@ public class Multiblock implements IMultiblock { BlockPos start = this.getStart(center); return this.forEach(center, (char) 0, (pos, matcher) -> { BlockPos offset = pos.subtract(start); - return matcher.getCheck().matches(level, start, offset, pos, level.getBlockState(pos), this.getChar(offset)); + return matcher.check().matches(level, start, offset, pos, level.getBlockState(pos), this.getChar(offset)); }); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/BlockEntityNatureAltar.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/BlockEntityNatureAltar.java index 20f726fe..9eb8fb05 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/BlockEntityNatureAltar.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/BlockEntityNatureAltar.java @@ -25,8 +25,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemStackHandler; -import java.util.Random; - public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickableBlockEntity { private final BasicAuraContainer container = new BasicAuraContainer(null, 500000) { @@ -49,7 +47,7 @@ public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickable @Override protected boolean canExtract(ItemStack stack, int slot, int amount) { - IAuraContainer cap = stack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null); + var cap = stack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null); if (cap != null) return cap.storeAura(1, true) <= 0; else @@ -72,14 +70,14 @@ public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickable @Override public void tick() { - Random rand = this.level.random; + var rand = this.level.random; if (this.level.getGameTime() % 40 == 0) { - int index = 0; - for (int x = -2; x <= 2; x += 4) { - for (int z = -2; z <= 2; z += 4) { - BlockPos offset = this.worldPosition.offset(x, 1, z); - BlockState state = this.level.getBlockState(offset); + var index = 0; + for (var x = -2; x <= 2; x += 4) { + for (var z = -2; z <= 2; z += 4) { + var offset = this.worldPosition.offset(x, 1, z); + var state = this.level.getBlockState(offset); this.catalysts[index] = state.getBlock().getCloneItemStack(this.level, offset, state); index++; } @@ -88,7 +86,7 @@ public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickable if (!this.level.isClientSide) { if (this.level.getGameTime() % 40 == 0 || this.firstTick) { - StructureState newState = this.getNewState(); + var newState = this.getNewState(); if (newState != this.structureState) { this.structureState = newState; this.sendToClients(); @@ -97,13 +95,13 @@ public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickable } if (this.structureState != StructureState.INVALID) { - int space = this.container.storeAura(300, true); + var space = this.container.storeAura(300, true); IAuraType expectedType = this.structureState == StructureState.NETHER ? NaturesAuraAPI.TYPE_NETHER : NaturesAuraAPI.TYPE_OVERWORLD; if (space > 0 && IAuraType.forLevel(this.level).isSimilar(expectedType)) { - int toStore = Math.min(IAuraChunk.getAuraInArea(this.level, this.worldPosition, 20), space); + var toStore = Math.min(IAuraChunk.getAuraInArea(this.level, this.worldPosition, 20), space); if (toStore > 0) { - BlockPos spot = IAuraChunk.getHighestSpot(this.level, this.worldPosition, 20, this.worldPosition); - IAuraChunk chunk = IAuraChunk.getAuraChunk(this.level, spot); + var spot = IAuraChunk.getHighestSpot(this.level, this.worldPosition, 20, this.worldPosition); + var chunk = IAuraChunk.getAuraChunk(this.level, spot); chunk.drainAura(spot, toStore); this.container.storeAura(toStore, false); @@ -114,17 +112,17 @@ public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickable this.worldPosition.getY() + rand.nextFloat() * 10F, this.worldPosition.getZ() + (float) rand.nextGaussian() * 10F, this.worldPosition.getX() + 0.5F, this.worldPosition.getY() + 0.5F, this.worldPosition.getZ() + 0.5F, - rand.nextFloat() * 0.1F + 0.1F, this.container.getAuraColor(), rand.nextFloat() * 1F + 1F + rand.nextFloat() * 0.1F + 0.1F, this.container.getAuraColor(), rand.nextFloat() + 1F )); } } - ItemStack stack = this.items.getStackInSlot(0); - IAuraContainer container = stack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null); + var stack = this.items.getStackInSlot(0); + var container = stack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null); if (!stack.isEmpty() && container != null) { - int theoreticalDrain = this.container.drainAura(1000, true); + var theoreticalDrain = this.container.drainAura(1000, true); if (theoreticalDrain > 0) { - int stored = container.storeAura(theoreticalDrain, false); + var stored = container.storeAura(theoreticalDrain, false); if (stored > 0) { this.container.drainAura(stored, false); @@ -142,7 +140,7 @@ public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickable this.currentRecipe = null; this.timer = 0; } else { - int req = Mth.ceil(this.currentRecipe.aura / (double) this.currentRecipe.time); + var req = Mth.ceil(this.currentRecipe.aura / (double) this.currentRecipe.time); if (this.container.getStoredAura() >= req) { this.container.drainAura(req, false); @@ -170,7 +168,7 @@ public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickable } else { if (this.structureState != StructureState.INVALID) { if (rand.nextFloat() >= 0.7F) { - int fourths = this.container.getMaxAura() / 4; + var fourths = this.container.getMaxAura() / 4; if (this.container.getStoredAura() > 0) { NaturesAuraAPI.instance().spawnMagicParticle( this.worldPosition.getX() - 4F + rand.nextFloat(), this.worldPosition.getY() + 3F, this.worldPosition.getZ() + rand.nextFloat(), @@ -200,12 +198,12 @@ public class BlockEntityNatureAltar extends BlockEntityImpl implements ITickable } private AltarRecipe getRecipeForInput(ItemStack input) { - IAuraType type = IAuraType.forLevel(this.level); - for (AltarRecipe recipe : this.level.getRecipeManager().getRecipesFor(ModRecipes.ALTAR_TYPE, null, null)) { + var type = IAuraType.forLevel(this.level); + for (var recipe : this.level.getRecipeManager().getRecipesFor(ModRecipes.ALTAR_TYPE, null, null)) { if (recipe.input.test(input) && (recipe.requiredType == null || type.isSimilar(recipe.requiredType))) { if (recipe.catalyst == Ingredient.EMPTY) return recipe; - for (ItemStack stack : this.catalysts) + for (var stack : this.catalysts) if (recipe.catalyst.test(stack)) return recipe; } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderEnderCrate.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderEnderCrate.java index dce96447..727b3d52 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderEnderCrate.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderEnderCrate.java @@ -7,12 +7,17 @@ import de.ellpeck.naturesaura.blocks.tiles.BlockEntityEnderCrate; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class RenderEnderCrate implements BlockEntityRenderer { + public RenderEnderCrate(BlockEntityRendererProvider.Context context) { + + } + @Override public void render(BlockEntityEnderCrate tileEntityIn, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { Matrix4f matrix4f = matrixStackIn.last().pose(); diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderNatureAltar.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderNatureAltar.java index bde35d84..a073747d 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderNatureAltar.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderNatureAltar.java @@ -7,10 +7,15 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.world.item.ItemStack; public class RenderNatureAltar implements BlockEntityRenderer { + public RenderNatureAltar(BlockEntityRendererProvider.Context context) { + + } + @Override public void render(BlockEntityNatureAltar tileEntityIn, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { ItemStack stack = tileEntityIn.items.getStackInSlot(0); diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderOfferingTable.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderOfferingTable.java index b3f6e120..eabca295 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderOfferingTable.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderOfferingTable.java @@ -7,6 +7,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.util.Mth; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -18,6 +19,10 @@ public class RenderOfferingTable implements BlockEntityRenderer { - private final Chunk chunk; + private final LevelChunk chunk; private final LazyOptional lazyChunk = LazyOptional.of(this::getAuraChunk); private IAuraChunk auraChunk; - public AuraChunkProvider(Chunk chunk) { + public AuraChunkProvider(LevelChunk chunk) { this.chunk = chunk; } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/AngerEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/AngerEffect.java index 70a29416..b107e52d 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/AngerEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/AngerEffect.java @@ -5,16 +5,16 @@ import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; -import net.minecraft.entity.IAngerable; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.NeutralMob; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.phys.AABB; import java.util.List; @@ -33,43 +33,44 @@ public class AngerEffect implements IDrainSpotEffect { int dist = Math.min(Math.abs(aura) / 50000, 75); if (dist < 10) return false; - this.bb = new AABB(pos).grow(dist); + this.bb = new AABB(pos).inflate(dist); return true; } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (!this.bb.contains(player.getPositionVec())) + if (!this.bb.contains(player.getEyePosition())) return ActiveType.INACTIVE; return ActiveType.ACTIVE; } @Override + public ItemStack getDisplayIcon() { return new ItemStack(Items.FIRE_CHARGE); } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (level.getGameTime() % 100 != 0) return; if (!this.calcValues(level, pos, spot)) return; - List entities = level.getEntitiesWithinAABB(LivingEntity.class, this.bb); + List entities = level.getEntitiesOfClass(LivingEntity.class, this.bb); for (LivingEntity entity : entities) { - if (!(entity instanceof IAngerable)) + if (!(entity instanceof NeutralMob)) continue; - Player player = level.getClosestPlayer(entity, 25); + Player player = level.getNearestPlayer(entity, 25); if (player == null) continue; - ((IAngerable) entity).setAttackTarget(player); + ((NeutralMob) entity).setTarget(player); } } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.angerEffect.get(); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/AnimalEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/AnimalEffect.java index 1e088017..fb52e9d1 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/AnimalEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/AnimalEffect.java @@ -6,22 +6,21 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.entity.passive.ChickenEntity; -import net.minecraft.entity.player.Player; -import net.minecraft.item.EggItem; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.particles.ParticleTypes; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.animal.Chicken; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.EggItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.phys.AABB; import org.apache.commons.lang3.tuple.Pair; import java.util.Comparator; @@ -46,17 +45,17 @@ public class AnimalEffect implements IDrainSpotEffect { if (this.chance <= 0) return false; int dist = Mth.clamp(Math.abs(aura) / 150000, 5, 35); - this.bb = new AABB(pos).grow(dist); + this.bb = new AABB(pos).inflate(dist); return true; } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (!this.bb.contains(player.getPositionVec())) + if (!this.bb.contains(player.getEyePosition())) return ActiveType.INACTIVE; - if (!NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.getPosition(), NAME)) + if (!NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), NAME)) return ActiveType.INHIBITED; return ActiveType.ACTIVE; } @@ -67,87 +66,85 @@ public class AnimalEffect implements IDrainSpotEffect { } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (level.getGameTime() % 200 != 0) return; if (!this.calcValues(level, pos, spot)) return; - List animals = level.getEntitiesWithinAABB(AnimalEntity.class, this.bb); + List animals = level.getEntitiesOfClass(Animal.class, this.bb); if (animals.size() >= ModConfig.instance.maxAnimalsAroundPowder.get()) return; - List items = level.getEntitiesWithinAABB(ItemEntity.class, this.bb); + List items = level.getEntitiesOfClass(ItemEntity.class, this.bb); for (ItemEntity item : items) { if (!item.isAlive()) continue; - if (!NaturesAuraAPI.instance().isEffectPowderActive(level, item.getPosition(), NAME)) + if (!NaturesAuraAPI.instance().isEffectPowderActive(level, item.blockPosition(), NAME)) continue; ItemStack stack = item.getItem(); if (!(stack.getItem() instanceof EggItem)) continue; - // The getAge() method is client-side only for absolutely no reason but I want it so I don't care - int age = ObfuscationReflectionHelper.getPrivateValue(ItemEntity.class, item, "field_70292_b"); - if (age < item.lifespan / 2) + if (item.getAge() < item.lifespan / 2) continue; if (stack.getCount() <= 1) - item.remove(); + item.kill(); else { stack.shrink(1); item.setItem(stack); } - ChickenEntity chicken = new ChickenEntity(EntityType.CHICKEN, level); - chicken.setGrowingAge(-24000); - chicken.setPosition(item.getPosX(), item.getPosY(), item.getPosZ()); - level.addEntity(chicken); + Chicken chicken = new Chicken(EntityType.CHICKEN, level); + chicken.setAge(-24000); + chicken.setPos(item.getX(), item.getY(), item.getZ()); + level.addFreshEntity(chicken); - BlockPos closestSpot = IAuraChunk.getHighestSpot(level, item.getPosition(), 35, pos); + BlockPos closestSpot = IAuraChunk.getHighestSpot(level, item.blockPosition(), 35, pos); IAuraChunk.getAuraChunk(level, closestSpot).drainAura(closestSpot, 2000); } - if (level.rand.nextInt(20) <= this.chance) { + if (level.random.nextInt(20) <= this.chance) { if (animals.size() < 2) return; - AnimalEntity first = animals.get(level.rand.nextInt(animals.size())); - if (first.isChild() || first.isInLove()) + Animal first = animals.get(level.random.nextInt(animals.size())); + if (first.isBaby() || first.isInLove()) return; - if (!NaturesAuraAPI.instance().isEffectPowderActive(level, first.getPosition(), NAME)) + if (!NaturesAuraAPI.instance().isEffectPowderActive(level, first.blockPosition(), NAME)) return; - Optional secondOptional = animals.stream() - .filter(e -> e != first && !e.isInLove() && !e.isChild()) - .min(Comparator.comparingDouble(e -> e.getDistanceSq(first))); - if (!secondOptional.isPresent()) + Optional secondOptional = animals.stream() + .filter(e -> e != first && !e.isInLove() && !e.isBaby()) + .min(Comparator.comparingDouble(e -> e.distanceToSqr(first))); + if (secondOptional.isEmpty()) return; - AnimalEntity second = secondOptional.get(); - if (second.getDistanceSq(first) > 5 * 5) + Animal second = secondOptional.get(); + if (second.distanceToSqr(first) > 5 * 5) return; this.setInLove(first); this.setInLove(second); - BlockPos closestSpot = IAuraChunk.getHighestSpot(level, first.getPosition(), 35, pos); + BlockPos closestSpot = IAuraChunk.getHighestSpot(level, first.blockPosition(), 35, pos); IAuraChunk.getAuraChunk(level, closestSpot).drainAura(closestSpot, 3500); } } - private void setInLove(AnimalEntity animal) { + private void setInLove(Animal animal) { animal.setInLove(null); for (int j = 0; j < 7; j++) animal.level.addParticle(ParticleTypes.HEART, - animal.getPosX() + (double) (animal.level.rand.nextFloat() * animal.getWidth() * 2.0F) - animal.getWidth(), - animal.getPosY() + 0.5D + (double) (animal.level.rand.nextFloat() * animal.getHeight()), - animal.getPosZ() + (double) (animal.level.rand.nextFloat() * animal.getWidth() * 2.0F) - animal.getWidth(), - animal.level.rand.nextGaussian() * 0.02D, - animal.level.rand.nextGaussian() * 0.02D, - animal.level.rand.nextGaussian() * 0.02D); + animal.getX() + (double) (animal.level.random.nextFloat() * animal.getBbWidth() * 2.0F) - animal.getBbWidth(), + animal.getY() + 0.5D + (double) (animal.level.random.nextFloat() * animal.getBbHeight()), + animal.getZ() + (double) (animal.level.random.nextFloat() * animal.getBbWidth() * 2.0F) - animal.getBbWidth(), + animal.level.random.nextGaussian() * 0.02D, + animal.level.random.nextGaussian() * 0.02D, + animal.level.random.nextGaussian() * 0.02D); } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.animalEffect.get(); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/BalanceEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/BalanceEffect.java index 0ea68bd5..4d59d99e 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/BalanceEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/BalanceEffect.java @@ -4,10 +4,10 @@ import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; import org.apache.commons.lang3.mutable.MutableInt; public class BalanceEffect implements IDrainSpotEffect { @@ -15,7 +15,7 @@ public class BalanceEffect implements IDrainSpotEffect { public static final ResourceLocation NAME = new ResourceLocation(NaturesAura.MOD_ID, "balance"); @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (spot < 100000) return; if (level.getGameTime() % 200 != 0) @@ -35,7 +35,7 @@ public class BalanceEffect implements IDrainSpotEffect { } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return true; } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/BreathlessEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/BreathlessEffect.java index 3f7a2d37..b10e57a6 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/BreathlessEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/BreathlessEffect.java @@ -6,17 +6,17 @@ import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.potion.ModPotions; -import net.minecraft.block.Blocks; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.EffectInstance; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.phys.AABB; import java.util.List; @@ -37,15 +37,15 @@ public class BreathlessEffect implements IDrainSpotEffect { if (dist < 10) return false; this.amp = Math.min(Mth.floor(Math.abs(aura) / 2500000F), 3); - this.bb = new AABB(pos).grow(dist); + this.bb = new AABB(pos).inflate(dist); return true; } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (!this.bb.contains(player.getPositionVec())) + if (!this.bb.contains(player.getEyePosition())) return ActiveType.INACTIVE; return ActiveType.ACTIVE; } @@ -56,18 +56,18 @@ public class BreathlessEffect implements IDrainSpotEffect { } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (level.getGameTime() % 100 != 0) return; if (!this.calcValues(level, pos, spot)) return; - List entities = level.getEntitiesWithinAABB(LivingEntity.class, this.bb); + List entities = level.getEntitiesOfClass(LivingEntity.class, this.bb); for (LivingEntity entity : entities) - entity.addPotionEffect(new EffectInstance(ModPotions.BREATHLESS, 300, this.amp)); + entity.addEffect(new MobEffectInstance(ModPotions.BREATHLESS, 300, this.amp)); } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.breathlessEffect.get(); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/CacheRechargeEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/CacheRechargeEffect.java index c2e3d3db..180fbce9 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/CacheRechargeEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/CacheRechargeEffect.java @@ -7,14 +7,14 @@ import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.items.ModItems; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.phys.AABB; import org.apache.commons.lang3.tuple.Pair; import java.util.List; @@ -34,18 +34,18 @@ public class CacheRechargeEffect implements IDrainSpotEffect { if (aura < 1500000) return false; int dist = Mth.clamp(aura / 3500, 3, 15); - this.bb = new AABB(pos).grow(dist); + this.bb = new AABB(pos).inflate(dist); this.amount = Mth.ceil(aura / 250F / auraAndSpots.getRight()); return true; } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (!this.bb.contains(player.getPositionVec())) + if (!this.bb.contains(player.getEyePosition())) return ActiveType.INACTIVE; - if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.getPosition(), NAME)) + if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), NAME)) return ActiveType.INHIBITED; return ActiveType.ACTIVE; } @@ -56,12 +56,12 @@ public class CacheRechargeEffect implements IDrainSpotEffect { } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(level, pos, spot)) return; - List players = level.getEntitiesWithinAABB(Player.class, this.bb); + List players = level.getEntitiesOfClass(Player.class, this.bb); for (Player player : players) { - if (NaturesAuraAPI.instance().isEffectPowderActive(level, player.getPosition(), NAME)) + if (NaturesAuraAPI.instance().isEffectPowderActive(level, player.blockPosition(), NAME)) continue; if (NaturesAuraAPI.instance().insertAuraIntoPlayer(player, this.amount, true)) { NaturesAuraAPI.instance().insertAuraIntoPlayer(player, this.amount, false); @@ -71,7 +71,7 @@ public class CacheRechargeEffect implements IDrainSpotEffect { } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.cacheRechargeEffect.get(); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/ExplosionEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/ExplosionEffect.java index 652de316..060f99d4 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/ExplosionEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/ExplosionEffect.java @@ -5,16 +5,16 @@ import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; -import net.minecraft.block.Blocks; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Explosion; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; -import net.minecraft.level.gen.Heightmap; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Explosion; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.levelgen.Heightmap; public class ExplosionEffect implements IDrainSpotEffect { @@ -30,7 +30,7 @@ public class ExplosionEffect implements IDrainSpotEffect { if (aura > -5000000) return false; int chance = 140 - Math.abs(aura) / 200000; - if (chance > 1 && level.rand.nextInt(chance) != 0) + if (chance > 1 && level.random.nextInt(chance) != 0) return false; this.strength = Math.min(Math.abs(aura) / 5000000F, 5F); if (this.strength <= 0) @@ -40,10 +40,10 @@ public class ExplosionEffect implements IDrainSpotEffect { } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (player.getDistanceSq(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) + if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) return ActiveType.INACTIVE; return ActiveType.ACTIVE; } @@ -54,24 +54,24 @@ public class ExplosionEffect implements IDrainSpotEffect { } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (level.getGameTime() % 40 != 0) return; if (!this.calcValues(level, pos, spot)) return; - int x = Mth.floor(pos.getX() + level.rand.nextGaussian() * this.dist); - int z = Mth.floor(pos.getZ() + level.rand.nextGaussian() * this.dist); - BlockPos chosenPos = new BlockPos(x, level.getHeight(Heightmap.Type.WORLD_SURFACE, x, z), z); - if (chosenPos.distanceSq(pos) <= this.dist * this.dist && level.isBlockLoaded(chosenPos)) { - level.createExplosion(null, + int x = Mth.floor(pos.getX() + level.random.nextGaussian() * this.dist); + int z = Mth.floor(pos.getZ() + level.random.nextGaussian() * this.dist); + BlockPos chosenPos = new BlockPos(x, level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z), z); + if (chosenPos.distSqr(pos) <= this.dist * this.dist && level.isLoaded(chosenPos)) { + level.explode(null, chosenPos.getX() + 0.5, chosenPos.getY() + 0.5, chosenPos.getZ() + 0.5, - this.strength, false, Explosion.Mode.DESTROY); + this.strength, false, Explosion.BlockInteraction.DESTROY); } } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.explosionEffect.get(); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/GrassDieEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/GrassDieEffect.java index bdb8fd5e..f0eba779 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/GrassDieEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/GrassDieEffect.java @@ -7,14 +7,15 @@ import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.blocks.ModBlocks; -import net.minecraft.block.*; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; import org.apache.commons.lang3.tuple.Pair; public class GrassDieEffect implements IDrainSpotEffect { @@ -40,10 +41,10 @@ public class GrassDieEffect implements IDrainSpotEffect { } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (player.getDistanceSq(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) + if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) return ActiveType.INACTIVE; return ActiveType.ACTIVE; } @@ -54,37 +55,37 @@ public class GrassDieEffect implements IDrainSpotEffect { } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(level, pos, spot)) return; - for (int i = this.amount / 2 + level.rand.nextInt(this.amount / 2); i >= 0; i--) { + for (int i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) { BlockPos grassPos = new BlockPos( - pos.getX() + level.rand.nextGaussian() * this.dist, - pos.getY() + level.rand.nextGaussian() * this.dist, - pos.getZ() + level.rand.nextGaussian() * this.dist + pos.getX() + level.random.nextGaussian() * this.dist, + pos.getY() + level.random.nextGaussian() * this.dist, + pos.getZ() + level.random.nextGaussian() * this.dist ); - if (grassPos.distanceSq(pos) <= this.dist * this.dist && level.isBlockLoaded(grassPos)) { + if (grassPos.distSqr(pos) <= this.dist * this.dist && level.isLoaded(grassPos)) { BlockState state = level.getBlockState(grassPos); Block block = state.getBlock(); BlockState newState = null; if (block instanceof LeavesBlock) { - newState = ModBlocks.DECAYED_LEAVES.getDefaultState(); + newState = ModBlocks.DECAYED_LEAVES.defaultBlockState(); } else if (block instanceof GrassBlock) { - newState = Blocks.COARSE_DIRT.getDefaultState(); + newState = Blocks.COARSE_DIRT.defaultBlockState(); } else if (block instanceof BushBlock) { - newState = Blocks.AIR.getDefaultState(); + newState = Blocks.AIR.defaultBlockState(); } else if (block == ModBlocks.NETHER_GRASS) { - newState = Blocks.NETHERRACK.getDefaultState(); + newState = Blocks.NETHERRACK.defaultBlockState(); } if (newState != null) - level.setBlockState(grassPos, newState); + level.setBlockAndUpdate(grassPos, newState); } } } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.grassDieEffect.get() && (type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD) || type.isSimilar(NaturesAuraAPI.TYPE_NETHER)); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/NetherDecayEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/NetherDecayEffect.java index d2571b77..168f98bd 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/NetherDecayEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/NetherDecayEffect.java @@ -6,20 +6,20 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; -import net.minecraft.block.AbstractFireBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; -import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; import org.apache.commons.lang3.tuple.Pair; public class NetherDecayEffect implements IDrainSpotEffect { @@ -44,10 +44,10 @@ public class NetherDecayEffect implements IDrainSpotEffect { } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (player.getDistanceSq(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) + if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) return ActiveType.INACTIVE; return ActiveType.ACTIVE; } @@ -58,15 +58,15 @@ public class NetherDecayEffect implements IDrainSpotEffect { } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(level, pos, spot)) return; - for (int i = this.amount / 2 + level.rand.nextInt(this.amount / 2); i >= 0; i--) { + for (int i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) { BlockPos offset = new BlockPos( - pos.getX() + level.rand.nextGaussian() * this.dist, - pos.getY() + level.rand.nextGaussian() * this.dist, - pos.getZ() + level.rand.nextGaussian() * this.dist); - if (offset.distanceSq(pos) > this.dist * this.dist || !level.isBlockLoaded(offset)) + pos.getX() + level.random.nextGaussian() * this.dist, + pos.getY() + level.random.nextGaussian() * this.dist, + pos.getZ() + level.random.nextGaussian() * this.dist); + if (offset.distSqr(pos) > this.dist * this.dist || !level.isLoaded(offset)) continue; // degrade blocks @@ -74,27 +74,27 @@ public class NetherDecayEffect implements IDrainSpotEffect { BlockState state = level.getBlockState(offset); if (state.getBlock() == Blocks.GLOWSTONE) { degraded = Blocks.NETHERRACK; - } else if (state.getBlock().isIn(BlockTags.NYLIUM) || state.getBlock() == Blocks.NETHERRACK) { + } else if (state.is(BlockTags.NYLIUM) || state.getBlock() == Blocks.NETHERRACK) { degraded = Blocks.SOUL_SOIL; } else if (state.getBlock() == Blocks.SOUL_SOIL) { degraded = Blocks.SOUL_SAND; } if (degraded != null) { - level.playEvent(2001, offset, Block.getStateId(state)); - level.setBlockState(offset, degraded.getDefaultState()); + level.levelEvent(2001, offset, Block.getId(state)); + level.setBlockAndUpdate(offset, degraded.defaultBlockState()); } // ignite blocks - if (AbstractFireBlock.canLightBlock(level, offset, Direction.NORTH)) { - BlockState fire = AbstractFireBlock.getFireForPlacement(level, offset); - level.setBlockState(offset, fire); - level.playEvent(1009, offset, 0); + if (BaseFireBlock.canBePlacedAt(level, offset, Direction.NORTH)) { + BlockState fire = BaseFireBlock.getState(level, offset); + level.setBlockAndUpdate(offset, fire); + level.levelEvent(1009, offset, 0); } } } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.netherDecayEffect.get() && type.isSimilar(NaturesAuraAPI.TYPE_NETHER); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/NetherGrassEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/NetherGrassEffect.java index 03d5f88c..f3a881ac 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/NetherGrassEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/NetherGrassEffect.java @@ -9,16 +9,16 @@ import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.blocks.ModBlocks; import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticles; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; import net.minecraftforge.common.Tags; import org.apache.commons.lang3.tuple.Pair; @@ -44,12 +44,12 @@ public class NetherGrassEffect implements IDrainSpotEffect { } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (player.getDistanceSq(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) + if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) return ActiveType.INACTIVE; - if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.getPosition(), NAME)) + if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), NAME)) return ActiveType.INHIBITED; return ActiveType.ACTIVE; } @@ -60,29 +60,29 @@ public class NetherGrassEffect implements IDrainSpotEffect { } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (level.getGameTime() % 40 != 0) return; if (!this.calcValues(level, pos, spot)) return; - for (int i = this.amount / 2 + level.rand.nextInt(this.amount / 2); i >= 0; i--) { - int x = Mth.floor(pos.getX() + level.rand.nextGaussian() * this.dist); - int y = Mth.floor(pos.getY() + level.rand.nextGaussian() * this.dist); - int z = Mth.floor(pos.getZ() + level.rand.nextGaussian() * this.dist); + for (int i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) { + int x = Mth.floor(pos.getX() + level.random.nextGaussian() * this.dist); + int y = Mth.floor(pos.getY() + level.random.nextGaussian() * this.dist); + int z = Mth.floor(pos.getZ() + level.random.nextGaussian() * this.dist); for (int yOff = -5; yOff <= 5; yOff++) { BlockPos goalPos = new BlockPos(x, y + yOff, z); - if (goalPos.distanceSq(pos) <= this.dist * this.dist && level.isBlockLoaded(goalPos)) { + if (goalPos.distSqr(pos) <= this.dist * this.dist && level.isLoaded(goalPos)) { if (NaturesAuraAPI.instance().isEffectPowderActive(level, goalPos, NAME)) continue; - BlockPos up = goalPos.up(); - if (level.getBlockState(up).isSolidSide(level, up, Direction.DOWN)) + BlockPos up = goalPos.above(); + if (level.getBlockState(up).isFaceSturdy(level, up, Direction.DOWN)) continue; BlockState state = level.getBlockState(goalPos); Block block = state.getBlock(); if (Tags.Blocks.NETHERRACK.contains(block)) { - level.setBlockState(goalPos, ModBlocks.NETHER_GRASS.getDefaultState()); + level.setBlockAndUpdate(goalPos, ModBlocks.NETHER_GRASS.defaultBlockState()); BlockPos closestSpot = IAuraChunk.getHighestSpot(level, goalPos, 25, pos); IAuraChunk.getAuraChunk(level, closestSpot).drainAura(closestSpot, 500); @@ -97,7 +97,7 @@ public class NetherGrassEffect implements IDrainSpotEffect { } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.netherGrassEffect.get() && type.isSimilar(NaturesAuraAPI.TYPE_NETHER); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/OreSpawnEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/OreSpawnEffect.java index 974c83ec..c483eccb 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/OreSpawnEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/OreSpawnEffect.java @@ -65,7 +65,7 @@ public class OreSpawnEffect implements IDrainSpotEffect { return ActiveType.INACTIVE; if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) return ActiveType.INACTIVE; - if (!NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.getOnPos(), NAME)) + if (!NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), NAME)) return ActiveType.INHIBITED; return ActiveType.ACTIVE; } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/PlantBoostEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/PlantBoostEffect.java index 3b83c2c9..e1165999 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/PlantBoostEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/PlantBoostEffect.java @@ -8,17 +8,18 @@ import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticles; -import net.minecraft.block.*; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; -import net.minecraft.level.gen.Heightmap; -import net.minecraft.level.server.ServerLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.levelgen.Heightmap; import org.apache.commons.lang3.tuple.Pair; public class PlantBoostEffect implements IDrainSpotEffect { @@ -43,12 +44,12 @@ public class PlantBoostEffect implements IDrainSpotEffect { } @Override - public ActiveType isActiveHere(Player player, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(player.level, pos, spot)) return ActiveType.INACTIVE; - if (player.getDistanceSq(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) + if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) return ActiveType.INACTIVE; - if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.getPosition(), NAME)) + if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), NAME)) return ActiveType.INHIBITED; return ActiveType.ACTIVE; } @@ -59,24 +60,23 @@ public class PlantBoostEffect implements IDrainSpotEffect { } @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (!this.calcValues(level, pos, spot)) return; - for (int i = this.amount / 2 + level.rand.nextInt(this.amount / 2); i >= 0; i--) { - int x = Mth.floor(pos.getX() + (2 * level.rand.nextFloat() - 1) * this.dist); - int z = Mth.floor(pos.getZ() + (2 * level.rand.nextFloat() - 1) * this.dist); - BlockPos plantPos = new BlockPos(x, level.getHeight(Heightmap.Type.WORLD_SURFACE, x, z), z).down(); - if (plantPos.distanceSq(pos) <= this.dist * this.dist && level.isBlockLoaded(plantPos)) { + for (int i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) { + int x = Mth.floor(pos.getX() + (2 * level.random.nextFloat() - 1) * this.dist); + int z = Mth.floor(pos.getZ() + (2 * level.random.nextFloat() - 1) * this.dist); + BlockPos plantPos = new BlockPos(x, level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z), z).below(); + if (plantPos.distSqr(pos) <= this.dist * this.dist && level.isLoaded(plantPos)) { if (NaturesAuraAPI.instance().isEffectPowderActive(level, plantPos, NAME)) continue; BlockState state = level.getBlockState(plantPos); Block block = state.getBlock(); - if (block instanceof IGrowable && !(block instanceof DoublePlantBlock) && !(block instanceof TallGrassBlock) && block != Blocks.GRASS_BLOCK) { - IGrowable growable = (IGrowable) block; - if (growable.canGrow(level, plantPos, state, false)) { + if (block instanceof BonemealableBlock growable && !(block instanceof DoublePlantBlock) && !(block instanceof TallGrassBlock) && block != Blocks.GRASS_BLOCK) { + if (growable.isValidBonemealTarget(level, plantPos, state, false)) { try { - growable.grow((ServerLevel) level, level.rand, plantPos, state); + growable.performBonemeal((ServerLevel) level, level.random, plantPos, state); } catch (Exception e) { // a lot of stuff throws here (double plants where generation only caused half of it to exist, bamboo at level height...) // so just catch all, bleh @@ -93,7 +93,7 @@ public class PlantBoostEffect implements IDrainSpotEffect { } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return ModConfig.instance.plantBoostEffect.get() && type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD); } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/ReplenishingEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/ReplenishingEffect.java index 8ea3d7e8..931e67a7 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/ReplenishingEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/ReplenishingEffect.java @@ -8,10 +8,10 @@ import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.chunk.ISpotDrainable; import de.ellpeck.naturesaura.api.aura.container.IAuraContainer; import de.ellpeck.naturesaura.api.aura.type.IAuraType; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; import java.util.ArrayList; import java.util.List; @@ -21,7 +21,7 @@ public class ReplenishingEffect implements IDrainSpotEffect { public static final ResourceLocation NAME = new ResourceLocation(NaturesAura.MOD_ID, "replenishing"); @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (spot < 0) { List tiles = new ArrayList<>(); Helper.getBlockEntitiesInArea(level, pos, 25, tile -> { @@ -32,8 +32,8 @@ public class ReplenishingEffect implements IDrainSpotEffect { }); if (!tiles.isEmpty()) { IAuraType type = IAuraType.forLevel(level); - for (int i = level.rand.nextInt(6); i >= 0; i--) { - ISpotDrainable tile = tiles.get(level.rand.nextInt(tiles.size())); + for (int i = level.random.nextInt(6); i >= 0; i--) { + ISpotDrainable tile = tiles.get(level.random.nextInt(tiles.size())); if (!tile.isAcceptableType(type)) continue; int drained = tile.drainAuraPassively(-spot, false); @@ -50,7 +50,7 @@ public class ReplenishingEffect implements IDrainSpotEffect { } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return true; } diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/SpreadEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/SpreadEffect.java index 071a17fa..171e487e 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/SpreadEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/SpreadEffect.java @@ -4,19 +4,19 @@ import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.type.IAuraType; -import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Mth; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; public class SpreadEffect implements IDrainSpotEffect { public static final ResourceLocation NAME = new ResourceLocation(NaturesAura.MOD_ID, "spread"); @Override - public void update(Level level, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { + public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { if (Math.abs(spot) < 500000 || Math.abs(IAuraChunk.getAuraInArea(level, pos, 25)) < 2000000) return; boolean drain = spot > 0; @@ -26,8 +26,8 @@ public class SpreadEffect implements IDrainSpotEffect { BlockPos bestOffset = null; int bestAmount = drain ? Integer.MAX_VALUE : Integer.MIN_VALUE; for (Direction facing : Direction.values()) { - BlockPos offset = pos.offset(facing, 15); - if (level.isBlockLoaded(offset) && offset.getY() >= 0 && offset.getY() <= level.getHeight()) { + BlockPos offset = pos.relative(facing, 15); + if (level.isLoaded(offset) && offset.getY() >= 0 && offset.getY() <= level.getHeight()) { int amount = IAuraChunk.getAuraInArea(level, offset, 14); if (drain ? amount < bestAmount : amount > bestAmount) { bestAmount = amount; @@ -55,7 +55,7 @@ public class SpreadEffect implements IDrainSpotEffect { } @Override - public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { + public boolean appliesHere(LevelChunk chunk, IAuraChunk auraChunk, IAuraType type) { return true; } diff --git a/src/main/java/de/ellpeck/naturesaura/commands/CommandAura.java b/src/main/java/de/ellpeck/naturesaura/commands/CommandAura.java index e0bda956..c846d1a0 100644 --- a/src/main/java/de/ellpeck/naturesaura/commands/CommandAura.java +++ b/src/main/java/de/ellpeck/naturesaura/commands/CommandAura.java @@ -3,40 +3,40 @@ package de.ellpeck.naturesaura.commands; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.IntegerArgumentType; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; -import net.minecraft.command.CommandSource; -import net.minecraft.command.Commands; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.TextComponent; public final class CommandAura { - public static void register(CommandDispatcher dispatcher) { - dispatcher.register(Commands.literal("naaura").requires(s -> s.hasPermissionLevel(2)) + public static void register(CommandDispatcher dispatcher) { + dispatcher.register(Commands.literal("naaura").requires(s -> s.hasPermission(2)) .then(Commands.literal("add").then(Commands.argument("amount", IntegerArgumentType.integer(1)).executes(context -> { int amount = IntegerArgumentType.getInteger(context, "amount"); - CommandSource source = context.getSource(); - BlockPos pos = new BlockPos(source.getPos()); + CommandSourceStack source = context.getSource(); + BlockPos pos = new BlockPos(source.getPosition()); while (amount > 0) { BlockPos spot = IAuraChunk.getLowestSpot(source.getLevel(), pos, 35, pos); amount -= IAuraChunk.getAuraChunk(source.getLevel(), spot).storeAura(spot, amount); } - source.sendFeedback(new StringTextComponent("Added aura to area"), true); + source.sendSuccess(new TextComponent("Added aura to area"), true); return 0; }))) .then(Commands.literal("remove").then(Commands.argument("amount", IntegerArgumentType.integer(1)).executes(context -> { int amount = IntegerArgumentType.getInteger(context, "amount"); - CommandSource source = context.getSource(); - BlockPos pos = new BlockPos(source.getPos()); + CommandSourceStack source = context.getSource(); + BlockPos pos = new BlockPos(source.getPosition()); while (amount > 0) { BlockPos spot = IAuraChunk.getHighestSpot(source.getLevel(), pos, 35, pos); amount -= IAuraChunk.getAuraChunk(source.getLevel(), spot).drainAura(spot, amount); } - source.sendFeedback(new StringTextComponent("Removed aura from area"), true); + source.sendSuccess(new TextComponent("Removed aura from area"), true); return 0; }))) .then(Commands.literal("reset").executes(context -> { - CommandSource source = context.getSource(); - BlockPos pos = new BlockPos(source.getPos()); + CommandSourceStack source = context.getSource(); + BlockPos pos = new BlockPos(source.getPosition()); IAuraChunk.getSpotsInArea(source.getLevel(), pos, 35, (spot, amount) -> { IAuraChunk chunk = IAuraChunk.getAuraChunk(source.getLevel(), spot); if (amount > 0) @@ -44,7 +44,7 @@ public final class CommandAura { else chunk.storeAura(spot, -amount); }); - source.sendFeedback(new StringTextComponent("Reset aura in area"), true); + source.sendSuccess(new TextComponent("Reset aura in area"), true); return 0; }))); } diff --git a/src/main/java/de/ellpeck/naturesaura/compat/Compat.java b/src/main/java/de/ellpeck/naturesaura/compat/Compat.java index a4bbc534..f819c734 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/Compat.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/Compat.java @@ -2,7 +2,6 @@ package de.ellpeck.naturesaura.compat; import com.google.common.collect.ImmutableMap; import de.ellpeck.naturesaura.NaturesAura; -import de.ellpeck.naturesaura.compat.enchantibility.EnchantibilityCompat; import de.ellpeck.naturesaura.compat.patchouli.PatchouliCompat; import de.ellpeck.naturesaura.data.ItemTagProvider; import net.minecraftforge.fml.ModList; @@ -17,8 +16,8 @@ public final class Compat { private static final Map> MODULE_TYPES = ImmutableMap.>builder() .put("patchouli", PatchouliCompat::new) - .put("curios", CuriosCompat::new) - .put("enchantability", EnchantibilityCompat::new) + /* .put("curios", CuriosCompat::new) + .put("enchantability", EnchantibilityCompat::new)*/ .build(); private static final Map MODULES = new HashMap<>(); diff --git a/src/main/java/de/ellpeck/naturesaura/compat/CuriosCompat.java b/src/main/java/de/ellpeck/naturesaura/compat/CuriosCompat.java index 7c082d94..d66a89e5 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/CuriosCompat.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/CuriosCompat.java @@ -1,3 +1,5 @@ +// TODO Curios +/* package de.ellpeck.naturesaura.compat; import com.google.common.collect.ImmutableMap; @@ -96,3 +98,4 @@ public class CuriosCompat implements ICompat { } } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/enchantibility/EnchantibilityAuraMending.java b/src/main/java/de/ellpeck/naturesaura/compat/enchantibility/EnchantibilityAuraMending.java index fc3b8d9c..22358c21 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/enchantibility/EnchantibilityAuraMending.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/enchantibility/EnchantibilityAuraMending.java @@ -1,3 +1,5 @@ +// TODO Enchantability +/* package de.ellpeck.naturesaura.compat.enchantibility; import de.ellpeck.naturesaura.NaturesAura; @@ -34,3 +36,4 @@ public class EnchantibilityAuraMending extends AbstractEnchantEffect { return RES; } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/enchantibility/EnchantibilityCompat.java b/src/main/java/de/ellpeck/naturesaura/compat/enchantibility/EnchantibilityCompat.java index 1565b076..15801248 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/enchantibility/EnchantibilityCompat.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/enchantibility/EnchantibilityCompat.java @@ -1,3 +1,5 @@ +// TODO Enchantability +/* package de.ellpeck.naturesaura.compat.enchantibility; import de.ellpeck.naturesaura.compat.ICompat; @@ -30,3 +32,4 @@ public class EnchantibilityCompat implements ICompat { } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/jei/AltarCategory.java b/src/main/java/de/ellpeck/naturesaura/compat/jei/AltarCategory.java index fe3b77db..7266777a 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/jei/AltarCategory.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/jei/AltarCategory.java @@ -1,3 +1,4 @@ +/* package de.ellpeck.naturesaura.compat.jei; import com.google.common.collect.ImmutableList; @@ -80,3 +81,4 @@ public class AltarCategory implements IRecipeCategory { group.set(3, recipe.getDimensionBottle()); } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/jei/AnimalSpawnerCategory.java b/src/main/java/de/ellpeck/naturesaura/compat/jei/AnimalSpawnerCategory.java index 7f6e92ca..145d5949 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/jei/AnimalSpawnerCategory.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/jei/AnimalSpawnerCategory.java @@ -1,3 +1,4 @@ +/* package de.ellpeck.naturesaura.compat.jei; import com.google.common.collect.ImmutableList; @@ -140,3 +141,4 @@ public class AnimalSpawnerCategory implements IRecipeCategory { group.set(2, Arrays.asList(recipe.startItem.getMatchingStacks())); } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/jei/TreeRitualCategory.java b/src/main/java/de/ellpeck/naturesaura/compat/jei/TreeRitualCategory.java index a3dd494f..b0634d11 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/jei/TreeRitualCategory.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/jei/TreeRitualCategory.java @@ -1,3 +1,4 @@ +/* package de.ellpeck.naturesaura.compat.jei; import com.google.common.collect.ImmutableList; @@ -77,3 +78,4 @@ public class TreeRitualCategory implements IRecipeCategory { } } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAltar.java b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAltar.java index ab9900fb..055a58da 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAltar.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAltar.java @@ -1,3 +1,4 @@ +/* package de.ellpeck.naturesaura.compat.patchouli; import de.ellpeck.naturesaura.recipes.AltarRecipe; @@ -46,3 +47,4 @@ public class ProcessorAltar implements IComponentProcessor { return group.isEmpty() || group.equals(this.recipe.catalyst == Ingredient.EMPTY ? "altar" : "catalyst"); } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAnimalSpawner.java b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAnimalSpawner.java index 9838ebbb..f5b1f789 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAnimalSpawner.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAnimalSpawner.java @@ -1,3 +1,4 @@ +/* package de.ellpeck.naturesaura.compat.patchouli; import de.ellpeck.naturesaura.recipes.AnimalSpawnerRecipe; @@ -46,3 +47,4 @@ public class ProcessorAnimalSpawner implements IComponentProcessor { return !"seekrit".equals(group); } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorOffering.java b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorOffering.java index 82cbdc20..667bdc05 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorOffering.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorOffering.java @@ -1,3 +1,4 @@ +/* package de.ellpeck.naturesaura.compat.patchouli; import de.ellpeck.naturesaura.recipes.OfferingRecipe; @@ -32,3 +33,4 @@ public class ProcessorOffering implements IComponentProcessor { } } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorTreeRitual.java b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorTreeRitual.java index 7067a674..a919b52d 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorTreeRitual.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorTreeRitual.java @@ -1,3 +1,4 @@ +/* package de.ellpeck.naturesaura.compat.patchouli; import de.ellpeck.naturesaura.recipes.TreeRitualRecipe; @@ -38,3 +39,4 @@ public class ProcessorTreeRitual implements IComponentProcessor { } } } +*/ diff --git a/src/main/java/de/ellpeck/naturesaura/data/BlockLootProvider.java b/src/main/java/de/ellpeck/naturesaura/data/BlockLootProvider.java index 4a51e60a..96875fc5 100644 --- a/src/main/java/de/ellpeck/naturesaura/data/BlockLootProvider.java +++ b/src/main/java/de/ellpeck/naturesaura/data/BlockLootProvider.java @@ -9,20 +9,28 @@ import de.ellpeck.naturesaura.blocks.Slab; import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.reg.IModItem; import de.ellpeck.naturesaura.reg.ModRegistry; -import net.minecraft.advancements.criterion.StatePropertiesPredicate; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.block.FlowerPotBlock; +import net.minecraft.advancements.critereon.StatePropertiesPredicate; import net.minecraft.data.DataGenerator; -import net.minecraft.data.DirectoryCache; -import net.minecraft.data.IDataProvider; -import net.minecraft.data.loot.BlockLootTables; -import net.minecraft.item.Items; -import net.minecraft.loot.*; -import net.minecraft.loot.conditions.BlockStateProperty; -import net.minecraft.loot.conditions.RandomChance; -import net.minecraft.loot.functions.SetCount; -import net.minecraft.util.ResourceLocation; +import net.minecraft.data.DataProvider; +import net.minecraft.data.HashCache; +import net.minecraft.data.loot.BlockLoot; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FlowerPotBlock; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.LootTables; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; +import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.predicates.ConditionUserBuilder; +import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition; +import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; import javax.annotation.Nonnull; import java.io.IOException; @@ -31,7 +39,8 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Function; -public class BlockLootProvider implements IDataProvider { +public class BlockLootProvider implements DataProvider { + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); private final DataGenerator generator; private final Map> lootFunctions = new HashMap<>(); @@ -40,9 +49,8 @@ public class BlockLootProvider implements IDataProvider { this.generator = generator; for (IModItem item : ModRegistry.ALL_ITEMS) { - if (!(item instanceof Block)) + if (!(item instanceof Block block)) continue; - Block block = (Block) item; if (block instanceof Slab) { this.lootFunctions.put(block, LootTableHooks::genSlab); } else if (block instanceof BlockFlowerPot) { @@ -54,9 +62,9 @@ public class BlockLootProvider implements IDataProvider { this.lootFunctions.put(ModBlocks.ANCIENT_LEAVES, LootTableHooks::genSilkOnly); this.lootFunctions.put(ModBlocks.DECAYED_LEAVES, LootTableHooks::genSilkOnly); - this.lootFunctions.put(ModBlocks.GOLDEN_LEAVES, b -> LootTable.builder().addLootPool(LootPool.builder().rolls(ConstantRange.of(1)).addEntry(LootTableHooks.survivesExplosion(b, ItemLootEntry.builder(ModItems.GOLD_LEAF)).acceptCondition(BlockStateProperty.builder(b).fromProperties(StatePropertiesPredicate.Builder.newBuilder().withIntProp(BlockGoldenLeaves.STAGE, BlockGoldenLeaves.HIGHEST_STAGE)))).acceptCondition(RandomChance.builder(0.75F)))); - this.lootFunctions.put(ModBlocks.NETHER_WART_MUSHROOM, b -> LootTableHooks.genSilkOr(b, ItemLootEntry.builder(Items.NETHER_WART).acceptFunction(SetCount.builder(RandomValueRange.of(1, 2))))); - this.lootFunctions.put(ModBlocks.NETHER_GRASS, b -> LootTableHooks.genSilkOr(b, ItemLootEntry.builder(Blocks.NETHERRACK))); + this.lootFunctions.put(ModBlocks.GOLDEN_LEAVES, b -> LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootTableHooks.survivesExplosion(b, LootItem.lootTableItem(ModItems.GOLD_LEAF)).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(b).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(BlockGoldenLeaves.STAGE, BlockGoldenLeaves.HIGHEST_STAGE)))).when(LootItemRandomChanceCondition.randomChance(0.75F)))); + this.lootFunctions.put(ModBlocks.NETHER_WART_MUSHROOM, b -> LootTableHooks.genSilkOr(b, LootItem.lootTableItem(Items.NETHER_WART).apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 2))))); + this.lootFunctions.put(ModBlocks.NETHER_GRASS, b -> LootTableHooks.genSilkOr(b, LootItem.lootTableItem(Blocks.NETHERRACK))); } private static Path getPath(Path root, ResourceLocation res) { @@ -64,13 +72,13 @@ public class BlockLootProvider implements IDataProvider { } @Override - public void act(DirectoryCache cache) throws IOException { + public void run(HashCache cache) throws IOException { for (Map.Entry> function : this.lootFunctions.entrySet()) { Block block = function.getKey(); Function func = function.getValue(); - LootTable table = func.apply(block).setParameterSet(LootParameterSets.BLOCK).build(); + LootTable table = func.apply(block).setParamSet(LootContextParamSets.BLOCK).build(); Path path = getPath(this.generator.getOutputFolder(), block.getRegistryName()); - IDataProvider.save(GSON, cache, LootTableManager.toJson(table), path); + DataProvider.save(GSON, cache, LootTables.serialize(table), path); } } @@ -81,33 +89,34 @@ public class BlockLootProvider implements IDataProvider { } // What a mess - private static class LootTableHooks extends BlockLootTables { + private static class LootTableHooks extends BlockLoot { + public static LootTable.Builder genLeaves(Block block, Block drop) { - return droppingWithChancesAndSticks(block, drop, 0.05F, 0.0625F, 0.083333336F, 0.1F); + return createLeavesDrops(block, drop, 0.05F, 0.0625F, 0.083333336F, 0.1F); } public static LootTable.Builder genSlab(Block block) { - return droppingSlab(block); + return createSlabItemTable(block); } public static LootTable.Builder genRegular(Block block) { - return dropping(block); + return createSingleItemTable(block); } public static LootTable.Builder genSilkOnly(Block block) { - return onlyWithSilkTouch(block); + return createSilkTouchOnlyTable(block); } - public static LootTable.Builder genSilkOr(Block block, LootEntry.Builder builder) { - return droppingWithSilkTouch(block, builder); + public static LootTable.Builder genSilkOr(Block block, LootPoolEntryContainer.Builder builder) { + return createSilkTouchOrShearsDispatchTable(block, builder); } public static LootTable.Builder genFlowerPot(Block block) { - return droppingAndFlowerPot(((FlowerPotBlock) block).getFlower()); + return createPotFlowerItemTable(((FlowerPotBlock) block).getContent()); } - public static T survivesExplosion(Block block, ILootConditionConsumer then) { - return withSurvivesExplosion(block, then); + public static T survivesExplosion(Block block, ConditionUserBuilder then) { + return applyExplosionCondition(block, then); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/naturesaura/data/BlockTagProvider.java b/src/main/java/de/ellpeck/naturesaura/data/BlockTagProvider.java index 4f0531bc..76c70e6a 100644 --- a/src/main/java/de/ellpeck/naturesaura/data/BlockTagProvider.java +++ b/src/main/java/de/ellpeck/naturesaura/data/BlockTagProvider.java @@ -2,12 +2,12 @@ package de.ellpeck.naturesaura.data; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.blocks.ModBlocks; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.data.BlockTagsProvider; import net.minecraft.data.DataGenerator; +import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; -import net.minecraft.util.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraftforge.common.Tags; public class BlockTagProvider extends BlockTagsProvider { @@ -19,15 +19,15 @@ public class BlockTagProvider extends BlockTagsProvider { } @Override - protected void registerTags() { - this.getOrCreateBuilder(BlockTags.LOGS).add(ModBlocks.ANCIENT_LOG, ModBlocks.ANCIENT_BARK); - this.getOrCreateBuilder(BlockTags.PLANKS).add(ModBlocks.ANCIENT_PLANKS); - this.getOrCreateBuilder(BlockTags.STAIRS).add(ModBlocks.ANCIENT_STAIRS, ModBlocks.INFUSED_BRICK_STAIRS, ModBlocks.INFUSED_STAIRS); - this.getOrCreateBuilder(BlockTags.LEAVES).add(ModBlocks.GOLDEN_LEAVES, ModBlocks.ANCIENT_LEAVES, ModBlocks.DECAYED_LEAVES); - this.getOrCreateBuilder(BlockTags.RAILS).add(ModBlocks.DIMENSION_RAIL_END, ModBlocks.DIMENSION_RAIL_NETHER, ModBlocks.DIMENSION_RAIL_OVERWORLD); - this.getOrCreateBuilder(BlockTags.SLABS).add(ModBlocks.ANCIENT_SLAB, ModBlocks.INFUSED_SLAB, ModBlocks.INFUSED_BRICK_SLAB); - this.getOrCreateBuilder(Tags.Blocks.DIRT).add(ModBlocks.NETHER_GRASS); - this.getOrCreateBuilder(BlockTags.SMALL_FLOWERS).add(ModBlocks.END_FLOWER, ModBlocks.AURA_BLOOM); - this.getOrCreateBuilder(NETHER_ALTAR_WOOD).add(Blocks.CRIMSON_PLANKS, Blocks.WARPED_PLANKS); + protected void addTags() { + this.tag(BlockTags.LOGS).add(ModBlocks.ANCIENT_LOG, ModBlocks.ANCIENT_BARK); + this.tag(BlockTags.PLANKS).add(ModBlocks.ANCIENT_PLANKS); + this.tag(BlockTags.STAIRS).add(ModBlocks.ANCIENT_STAIRS, ModBlocks.INFUSED_BRICK_STAIRS, ModBlocks.INFUSED_STAIRS); + this.tag(BlockTags.LEAVES).add(ModBlocks.GOLDEN_LEAVES, ModBlocks.ANCIENT_LEAVES, ModBlocks.DECAYED_LEAVES); + this.tag(BlockTags.RAILS).add(ModBlocks.DIMENSION_RAIL_END, ModBlocks.DIMENSION_RAIL_NETHER, ModBlocks.DIMENSION_RAIL_OVERWORLD); + this.tag(BlockTags.SLABS).add(ModBlocks.ANCIENT_SLAB, ModBlocks.INFUSED_SLAB, ModBlocks.INFUSED_BRICK_SLAB); + this.tag(Tags.Blocks.DIRT).add(ModBlocks.NETHER_GRASS); + this.tag(BlockTags.SMALL_FLOWERS).add(ModBlocks.END_FLOWER, ModBlocks.AURA_BLOOM); + this.tag(NETHER_ALTAR_WOOD).add(Blocks.CRIMSON_PLANKS, Blocks.WARPED_PLANKS); } } diff --git a/src/main/java/de/ellpeck/naturesaura/data/ItemTagProvider.java b/src/main/java/de/ellpeck/naturesaura/data/ItemTagProvider.java index ebda28bc..ec957be5 100644 --- a/src/main/java/de/ellpeck/naturesaura/data/ItemTagProvider.java +++ b/src/main/java/de/ellpeck/naturesaura/data/ItemTagProvider.java @@ -4,21 +4,21 @@ import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.compat.Compat; import de.ellpeck.naturesaura.items.ModItems; import net.minecraft.data.DataGenerator; -import net.minecraft.data.ItemTagsProvider; -import net.minecraft.item.Item; +import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.tags.BlockTags; -import net.minecraft.tags.ITag; import net.minecraft.tags.ItemTags; import net.minecraftforge.common.Tags; import net.minecraftforge.common.data.ExistingFileHelper; public class ItemTagProvider extends ItemTagsProvider { - public ItemTagProvider(DataGenerator generatorIn, BlockTagProvider blockTagProvider, ExistingFileHelper helper) { + + public ItemTagProvider(DataGenerator generatorIn, BlockTagsProvider blockTagProvider, ExistingFileHelper helper) { super(generatorIn, blockTagProvider, NaturesAura.MOD_ID, helper); } @Override - protected void registerTags() { + protected void addTags() { this.copy(BlockTags.LOGS, ItemTags.LOGS); this.copy(BlockTags.PLANKS, ItemTags.PLANKS); this.copy(BlockTags.STAIRS, ItemTags.STAIRS); @@ -26,13 +26,9 @@ public class ItemTagProvider extends ItemTagsProvider { this.copy(BlockTags.RAILS, ItemTags.RAILS); this.copy(BlockTags.SLABS, ItemTags.SLABS); - this.getOrCreateBuilder(Tags.Items.RODS_WOODEN).add(ModItems.ANCIENT_STICK); + this.tag(Tags.Items.RODS_WOODEN).add(ModItems.ANCIENT_STICK); Compat.addItemTags(this); } - @Override - public Builder getOrCreateBuilder(ITag.INamedTag tag) { - return super.getOrCreateBuilder(tag); - } } diff --git a/src/main/java/de/ellpeck/naturesaura/data/ModData.java b/src/main/java/de/ellpeck/naturesaura/data/ModData.java index 83b2cac8..abcf7f0f 100644 --- a/src/main/java/de/ellpeck/naturesaura/data/ModData.java +++ b/src/main/java/de/ellpeck/naturesaura/data/ModData.java @@ -4,7 +4,7 @@ import net.minecraft.data.DataGenerator; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; +import net.minecraftforge.forge.event.lifecycle.GatherDataEvent; @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public final class ModData { diff --git a/src/main/java/de/ellpeck/naturesaura/enchant/ModEnchantments.java b/src/main/java/de/ellpeck/naturesaura/enchant/ModEnchantments.java index 4eb383c5..616b5716 100644 --- a/src/main/java/de/ellpeck/naturesaura/enchant/ModEnchantments.java +++ b/src/main/java/de/ellpeck/naturesaura/enchant/ModEnchantments.java @@ -1,6 +1,6 @@ package de.ellpeck.naturesaura.enchant; -import net.minecraft.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.Enchantment; @SuppressWarnings("FieldNamingConvention") public final class ModEnchantments { diff --git a/src/main/java/de/ellpeck/naturesaura/entities/EntityMoverMinecart.java b/src/main/java/de/ellpeck/naturesaura/entities/EntityMoverMinecart.java index 89eaf7ad..15fcc392 100644 --- a/src/main/java/de/ellpeck/naturesaura/entities/EntityMoverMinecart.java +++ b/src/main/java/de/ellpeck/naturesaura/entities/EntityMoverMinecart.java @@ -49,7 +49,7 @@ public class EntityMoverMinecart extends AbstractMinecart { super.moveMinecartOnRail(railPos); if (!this.isActive) return; - BlockPos pos = this.getOnPos(); + BlockPos pos = this.blockPosition(); if (!this.spotOffsets.isEmpty() && this.level.getGameTime() % 10 == 0) PacketHandler.sendToAllAround(this.level, pos, 32, new PacketParticles( @@ -85,7 +85,7 @@ public class EntityMoverMinecart extends AbstractMinecart { if (this.isActive != receivingPower) { this.isActive = receivingPower; - BlockPos pos = this.getOnPos(); + BlockPos pos = this.blockPosition(); if (!this.isActive) { this.moveAura(this.level, this.lastPosition, this.level, pos); this.spotOffsets.clear(); @@ -138,7 +138,7 @@ public class EntityMoverMinecart extends AbstractMinecart { public Entity changeDimension(ServerLevel destination, ITeleporter teleporter) { Entity entity = super.changeDimension(destination, teleporter); if (entity instanceof EntityMoverMinecart) { - BlockPos pos = entity.getOnPos(); + BlockPos pos = entity.blockPosition(); this.moveAura(this.level, this.lastPosition, entity.level, pos); ((EntityMoverMinecart) entity).lastPosition = pos; } diff --git a/src/main/java/de/ellpeck/naturesaura/entities/EntityStructureFinder.java b/src/main/java/de/ellpeck/naturesaura/entities/EntityStructureFinder.java index 35344e7b..98da1dd2 100644 --- a/src/main/java/de/ellpeck/naturesaura/entities/EntityStructureFinder.java +++ b/src/main/java/de/ellpeck/naturesaura/entities/EntityStructureFinder.java @@ -125,7 +125,7 @@ public class EntityStructureFinder extends EyeOfEnder { if (this.shatterOrDrop) { this.level.addFreshEntity(new ItemEntity(this.level, this.getX(), this.getY(), this.getZ(), this.getItem())); } else { - PacketHandler.sendToAllAround(this.level, this.getOnPos(), 32, new PacketParticles((float) this.getX(), (float) this.getY(), (float) this.getZ(), PacketParticles.Type.STRUCTURE_FINDER, this.getId())); + PacketHandler.sendToAllAround(this.level, this.blockPosition(), 32, new PacketParticles((float) this.getX(), (float) this.getY(), (float) this.getZ(), PacketParticles.Type.STRUCTURE_FINDER, this.getId())); } } } else { diff --git a/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java b/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java index a345f3e5..a15b2cae 100644 --- a/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java +++ b/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java @@ -1,55 +1,35 @@ package de.ellpeck.naturesaura.events; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.ModConfig; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; -import de.ellpeck.naturesaura.api.aura.container.IAuraContainer; import de.ellpeck.naturesaura.api.aura.type.IAuraType; -import de.ellpeck.naturesaura.api.render.IVisualizable; -import de.ellpeck.naturesaura.blocks.tiles.*; import de.ellpeck.naturesaura.items.ItemAuraCache; import de.ellpeck.naturesaura.items.ItemRangeVisualizer; import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.packet.PacketAuraChunk; -import net.minecraft.block.*; -import net.minecraft.client.MainWindow; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.AbstractGui; -import net.minecraft.client.gui.screen.ChatScreen; -import net.minecraft.client.renderer.ActiveRenderInfo; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.tileentity.BlockEntity; -import net.minecraft.util.RegistryKey; -import net.minecraft.util.ResourceLocation; +import net.minecraft.client.renderer.BiomeColors; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.util.Tuple; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.Mth; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.level.Level; -import net.minecraft.level.biome.BiomeColors; -import net.minecraft.level.gen.Heightmap; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.client.event.RenderLevelLastEvent; import net.minecraftforge.common.IPlantable; -import net.minecraftforge.energy.EnergyStorage; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import org.apache.commons.lang3.mutable.MutableInt; -import org.lwjgl.opengl.GL11; import java.text.NumberFormat; import java.util.ArrayList; @@ -73,19 +53,19 @@ public class ClientEvents { @SubscribeEvent public void onDebugRender(RenderGameOverlayEvent.Text event) { Minecraft mc = Minecraft.getInstance(); - if (mc.gameSettings.showDebugInfo && ModConfig.instance.debugText.get()) { - String prefix = TextFormatting.GREEN + "[" + NaturesAura.MOD_NAME + "]" + TextFormatting.RESET + " "; + if (mc.options.renderDebug && ModConfig.instance.debugText.get()) { + String prefix = ChatFormatting.GREEN + "[" + NaturesAura.MOD_NAME + "]" + ChatFormatting.RESET + " "; List left = event.getLeft(); if (mc.player.isCreative()) { left.add(""); MutableInt amount = new MutableInt(IAuraChunk.DEFAULT_AURA); MutableInt spots = new MutableInt(); MutableInt chunks = new MutableInt(); - IAuraChunk.getSpotsInArea(mc.level, mc.player.getPosition(), 35, (blockPos, drainSpot) -> { + IAuraChunk.getSpotsInArea(mc.level, mc.player.blockPosition(), 35, (blockPos, drainSpot) -> { spots.increment(); amount.add(drainSpot); }); - Helper.getAuraChunksWithSpotsInArea(mc.level, mc.player.getPosition(), 35, c -> chunks.increment()); + Helper.getAuraChunksWithSpotsInArea(mc.level, mc.player.blockPosition(), 35, c -> chunks.increment()); NumberFormat format = NumberFormat.getInstance(); left.add(prefix + "A: " + format.format(amount.intValue()) + " (S: " + spots.intValue() + ", C: " + chunks.intValue() + ")"); left.add(prefix + "AT: " + IAuraType.forLevel(mc.level).getName()); @@ -107,30 +87,30 @@ public class ClientEvents { } else { PENDING_AURA_CHUNKS.removeIf(next -> next.tryHandle(mc.level)); - if (!mc.isGamePaused()) { + if (!mc.isPaused()) { if (mc.level.getGameTime() % 20 == 0) { int amount = Mth.floor(190 * ModConfig.instance.excessParticleAmount.get()); for (int i = 0; i < amount; i++) { - int x = Mth.floor(mc.player.getPosX()) + mc.level.rand.nextInt(64) - 32; - int z = Mth.floor(mc.player.getPosZ()) + mc.level.rand.nextInt(64) - 32; - BlockPos pos = new BlockPos(x, mc.level.getHeight(Heightmap.Type.WORLD_SURFACE, x, z) - 1, z); + int x = Mth.floor(mc.player.getX()) + mc.level.random.nextInt(64) - 32; + int z = Mth.floor(mc.player.getZ()) + mc.level.random.nextInt(64) - 32; + BlockPos pos = new BlockPos(x, mc.level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z) - 1, z); BlockState state = mc.level.getBlockState(pos); Block block = state.getBlock(); - if (block instanceof IGrowable || block instanceof IPlantable || block instanceof LeavesBlock || block instanceof MyceliumBlock) { + if (block instanceof BonemealableBlock || block instanceof IPlantable || block instanceof LeavesBlock || block instanceof MyceliumBlock) { int excess = IAuraChunk.triangulateAuraInArea(mc.level, pos, 45) - IAuraChunk.DEFAULT_AURA; if (excess > 0) { int chance = Math.max(10, 50 - excess / 25000); - if (mc.level.rand.nextInt(chance) <= 0) + if (mc.level.random.nextInt(chance) <= 0) NaturesAuraAPI.instance().spawnMagicParticle( - pos.getX() + mc.level.rand.nextFloat(), + pos.getX() + mc.level.random.nextFloat(), pos.getY() + 0.5F, - pos.getZ() + mc.level.rand.nextFloat(), - mc.level.rand.nextGaussian() * 0.01F, - mc.level.rand.nextFloat() * 0.025F, - mc.level.rand.nextGaussian() * 0.01F, - block instanceof MyceliumBlock ? 0x875ca1 : BiomeColors.getGrassColor(mc.level, pos), - Math.min(2F, 1F + mc.level.rand.nextFloat() * (excess / 30000F)), - Math.min(300, 100 + mc.level.rand.nextInt(excess / 3000 + 1)), + pos.getZ() + mc.level.random.nextFloat(), + mc.level.random.nextGaussian() * 0.01F, + mc.level.random.nextFloat() * 0.025F, + mc.level.random.nextGaussian() * 0.01F, + block instanceof MyceliumBlock ? 0x875ca1 : BiomeColors.getAverageGrassColor(mc.level, pos), + Math.min(2F, 1F + mc.level.random.nextFloat() * (excess / 30000F)), + Math.min(300, 100 + mc.level.random.nextInt(excess / 3000 + 1)), 0F, false, true); } } @@ -141,12 +121,12 @@ public class ClientEvents { NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance(); inst.setParticleSpawnRange(512); inst.setParticleDepth(false); - for (BlockPos pos : ItemRangeVisualizer.VISUALIZED_RAILS.get(mc.level.func_234923_W_().func_240901_a_())) { + for (BlockPos pos : ItemRangeVisualizer.VISUALIZED_RAILS.get(mc.level.dimension().location())) { NaturesAuraAPI.instance().spawnMagicParticle( - pos.getX() + mc.level.rand.nextFloat(), - pos.getY() + mc.level.rand.nextFloat(), - pos.getZ() + mc.level.rand.nextFloat(), - 0F, 0F, 0F, 0xe0faff, mc.level.rand.nextFloat() * 5 + 1, 100, 0F, false, true); + pos.getX() + mc.level.random.nextFloat(), + pos.getY() + mc.level.random.nextFloat(), + pos.getZ() + mc.level.random.nextFloat(), + 0F, 0F, 0F, 0xe0faff, mc.level.random.nextFloat() * 5 + 1, 100, 0F, false, true); } inst.setParticleDepth(true); inst.setParticleSpawnRange(32); @@ -158,7 +138,7 @@ public class ClientEvents { if (!heldOcular.isEmpty() && mc.level.getGameTime() % 20 == 0) { SHOWING_EFFECTS.clear(); - Helper.getAuraChunksWithSpotsInArea(mc.level, mc.player.getPosition(), 100, + Helper.getAuraChunksWithSpotsInArea(mc.level, mc.player.blockPosition(), 100, chunk -> chunk.getActiveEffectIcons(mc.player, SHOWING_EFFECTS)); } } @@ -168,7 +148,8 @@ public class ClientEvents { @SubscribeEvent public void onLevelRender(RenderLevelLastEvent event) { - Minecraft mc = Minecraft.getInstance(); + // TODO GL-based in-world rendering +/* Minecraft mc = Minecraft.getInstance(); RenderSystem.pushMatrix(); RenderSystem.multMatrix(event.getMatrixStack().getLast().getMatrix()); @@ -239,10 +220,10 @@ public class ClientEvents { GL11.glPopMatrix(); } - GL11.glPopMatrix(); + GL11.glPopMatrix();*/ } - private void renderVisualize(IVisualizable visualize, Level +/* private void renderVisualize(IVisualizable visualize, Level level, BlockPos pos) { AABB box = visualize.getVisualizationBounds(level, pos); if (box == null) @@ -251,22 +232,23 @@ public class ClientEvents { int color = visualize.getVisualizationColor(level, pos); RenderSystem.color4f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 0.5F); Helper.renderWeirdBox(box.minX, box.minY, box.minZ, box.maxX - box.minX, box.maxY - box.minY, box.maxZ - box.minZ); - } + }*/ @SubscribeEvent public void onOverlayRender(RenderGameOverlayEvent.Post event) { - Minecraft mc = Minecraft.getInstance(); - MatrixStack stack = event.getMatrixStack(); + // TODO raw rendering bleh, should be easy enough to convert to PoseStack stuff + /*Minecraft mc = Minecraft.getInstance(); + PoseStack stack = event.getMatrixStack(); if (event.getType() == ElementType.ALL) { - MainWindow res = event.getWindow(); + var res = event.getWindow(); if (mc.player != null) { if (!heldCache.isEmpty()) { IAuraContainer container = heldCache.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null); int width = Mth.ceil(container.getStoredAura() / (float) container.getMaxAura() * 80); int conf = ModConfig.instance.cacheBarLocation.get(); - int x = res.getScaledWidth() / 2 + (conf == 0 ? -173 - (mc.player.getHeldItemOffhand().isEmpty() ? 0 : 29) : 93); - int y = res.getScaledHeight() - 8; + int x = res.getGuiScaledWidth() / 2 + (conf == 0 ? -173 - (mc.player.getOffhandItem().isEmpty() ? 0 : 29) : 93); + int y = res.getScreenHeight() - 8; RenderSystem.pushMatrix(); @@ -431,7 +413,7 @@ public class ClientEvents { RenderSystem.popMatrix(); } } - } + }*/ } private String createTimeString(int totalTicks) { @@ -442,7 +424,7 @@ public class ClientEvents { return String.format("%02d:%02d:%02d.%02d", hours, minutes, seconds, ticks); } - private void drawContainerInfo(MatrixStack stack, int stored, int max, int color, Minecraft mc, MainWindow res, int yOffset, String name, String textBelow) { +/* private void drawContainerInfo(PoseStack stack, int stored, int max, int color, Minecraft mc, MainWindow res, int yOffset, String name, String textBelow) { RenderSystem.color3f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F); int x = res.getScaledWidth() / 2 - 40; @@ -459,5 +441,5 @@ public class ClientEvents { if (textBelow != null) mc.fontRenderer.drawStringWithShadow(stack, textBelow, x + 40 - mc.fontRenderer.getStringWidth(textBelow) / 2F, y + 7, color); - } + }*/ } diff --git a/src/main/java/de/ellpeck/naturesaura/events/CommonEvents.java b/src/main/java/de/ellpeck/naturesaura/events/CommonEvents.java index e7bff95e..57d4be3c 100644 --- a/src/main/java/de/ellpeck/naturesaura/events/CommonEvents.java +++ b/src/main/java/de/ellpeck/naturesaura/events/CommonEvents.java @@ -14,60 +14,58 @@ import de.ellpeck.naturesaura.commands.CommandAura; import de.ellpeck.naturesaura.gen.ModFeatures; import de.ellpeck.naturesaura.misc.LevelData; import de.ellpeck.naturesaura.packet.PacketHandler; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.level.Level; -import net.minecraft.level.chunk.Chunk; -import net.minecraft.level.chunk.IChunk; -import net.minecraft.level.gen.GenerationStage.Decoration; -import net.minecraft.level.server.ChunkHolder; -import net.minecraft.level.server.ChunkManager; -import net.minecraft.level.server.ServerChunkProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ChunkHolder; +import net.minecraft.server.level.ChunkMap; +import net.minecraft.server.level.ServerChunkCache; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.LevelChunk; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.level.BiomeLoadingEvent; -import net.minecraftforge.event.level.ChunkEvent; -import net.minecraftforge.event.level.ChunkWatchEvent; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.event.world.BiomeLoadingEvent; +import net.minecraftforge.event.world.ChunkEvent; +import net.minecraftforge.event.world.ChunkWatchEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; -import net.minecraftforge.fml.event.server.FMLServerStartingEvent; +import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; import java.util.UUID; +import static net.minecraft.world.level.levelgen.GenerationStep.Decoration; + public class CommonEvents { - private static final Method GET_LOADED_CHUNKS_METHOD = ObfuscationReflectionHelper.findMethod(ChunkManager.class, "func_223491_f"); + private static final Method GET_LOADED_CHUNKS_METHOD = ObfuscationReflectionHelper.findMethod(ChunkMap.class, "getChunks"); private static final ListMultimap PENDING_AURA_CHUNKS = ArrayListMultimap.create(); @SubscribeEvent public void onBiomeLoad(BiomeLoadingEvent event) { if (ModConfig.instance.auraBlooms.get()) { - event.getGeneration().func_242513_a(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.AURA_BLOOM); + // TODO features might have to be registered *AGAIN* now because .placed() is another thing again oh my God + event.getGeneration().addFeature(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.AURA_BLOOM.placed()); switch (event.getCategory()) { - case DESERT: - event.getGeneration().func_242513_a(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.AURA_CACTUS); - break; - case NETHER: - event.getGeneration().func_242513_a(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.CRIMSON_AURA_MUSHROOM); - event.getGeneration().func_242513_a(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.WARPED_AURA_MUSHROOM); - break; - case MUSHROOM: - event.getGeneration().func_242513_a(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.AURA_MUSHROOM); - break; + case DESERT -> event.getGeneration().addFeature(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.AURA_CACTUS.placed()); + case NETHER -> { + event.getGeneration().addFeature(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.CRIMSON_AURA_MUSHROOM.placed()); + event.getGeneration().addFeature(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.WARPED_AURA_MUSHROOM.placed()); + } + case MUSHROOM -> event.getGeneration().addFeature(Decoration.VEGETAL_DECORATION, ModFeatures.Configured.AURA_MUSHROOM.placed()); } } } @SubscribeEvent - public void onChunkCapsAttach(AttachCapabilitiesEvent event) { - Chunk chunk = event.getObject(); + public void onChunkCapsAttach(AttachCapabilitiesEvent event) { + LevelChunk chunk = event.getObject(); event.addCapability(new ResourceLocation(NaturesAura.MOD_ID, "aura"), new AuraChunkProvider(chunk)); } @@ -78,13 +76,12 @@ public class CommonEvents { @SubscribeEvent public void onChunkUnload(ChunkEvent.Unload event) { - IChunk iChunk = event.getChunk(); - if (iChunk instanceof Chunk) { - Chunk chunk = (Chunk) iChunk; + ChunkAccess iChunk = event.getChunk(); + if (iChunk instanceof LevelChunk chunk) { IAuraChunk auraChunk = chunk.getCapability(NaturesAuraAPI.capAuraChunk).orElse(null); if (auraChunk instanceof AuraChunk) { LevelData data = (LevelData) ILevelData.getLevelData(chunk.getLevel()); - data.auraChunksWithSpots.remove(chunk.getPos().asLong()); + data.auraChunksWithSpots.remove(chunk.getPos().toLong()); } } } @@ -105,15 +102,16 @@ public class CommonEvents { } @SubscribeEvent - public void onLevelTick(TickEvent.LevelTickEvent event) { - if (!event.level.isClientSide && event.phase == TickEvent.Phase.END) { - if (event.level.getGameTime() % 20 == 0) { - event.level.getProfiler().startSection(NaturesAura.MOD_ID + ":onLevelTick"); + @SuppressWarnings("unchecked") + public void onLevelTick(TickEvent.WorldTickEvent event) { + if (!event.world.isClientSide && event.phase == TickEvent.Phase.END) { + if (event.world.getGameTime() % 20 == 0) { + event.world.getProfiler().push(NaturesAura.MOD_ID + ":onLevelTick"); try { - ChunkManager manager = ((ServerChunkProvider) event.level.getChunkProvider()).chunkManager; + ChunkMap manager = ((ServerChunkCache) event.world.getChunkSource()).chunkMap; Iterable chunks = (Iterable) GET_LOADED_CHUNKS_METHOD.invoke(manager); for (ChunkHolder holder : chunks) { - Chunk chunk = holder.getChunkIfComplete(); + LevelChunk chunk = holder.getTickingChunk(); if (chunk == null) continue; AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null); @@ -123,7 +121,7 @@ public class CommonEvents { } catch (IllegalAccessException | InvocationTargetException e) { NaturesAura.LOGGER.fatal(e); } - event.level.getProfiler().endSection(); + event.world.getProfiler().pop(); } } } @@ -132,14 +130,14 @@ public class CommonEvents { public void onPlayerTick(TickEvent.PlayerTickEvent event) { if (!event.player.level.isClientSide && event.phase == TickEvent.Phase.END) { if (event.player.level.getGameTime() % 10 == 0) { - List pending = PENDING_AURA_CHUNKS.get(event.player.getUniqueID()); + List pending = PENDING_AURA_CHUNKS.get(event.player.getUUID()); pending.removeIf(p -> this.handleChunkWatchDeferred(event.player, p)); } if (event.player.level.getGameTime() % 200 != 0) return; - int aura = IAuraChunk.triangulateAuraInArea(event.player.level, event.player.getPosition(), 25); + int aura = IAuraChunk.triangulateAuraInArea(event.player.level, event.player.blockPosition(), 25); if (aura <= 0) Helper.addAdvancement(event.player, new ResourceLocation(NaturesAura.MOD_ID, "negative_imbalance"), "triggered_in_code"); else if (aura >= 1500000) @@ -149,11 +147,11 @@ public class CommonEvents { @SubscribeEvent public void onChunkWatch(ChunkWatchEvent.Watch event) { - PENDING_AURA_CHUNKS.put(event.getPlayer().getUniqueID(), event.getPos()); + PENDING_AURA_CHUNKS.put(event.getPlayer().getUUID(), event.getPos()); } private boolean handleChunkWatchDeferred(Player player, ChunkPos pos) { - Chunk chunk = Helper.getLoadedChunk(player.level, pos.x, pos.z); + LevelChunk chunk = Helper.getLoadedChunk(player.level, pos.x, pos.z); if (chunk == null) return false; AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null); @@ -164,7 +162,7 @@ public class CommonEvents { } @SubscribeEvent - public void onServerStarting(FMLServerStartingEvent event) { - CommandAura.register(event.getServer().getCommandManager().getDispatcher()); + public void onServerStarting(ServerStartingEvent event) { + CommandAura.register(event.getServer().getCommands().getDispatcher()); } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java b/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java index e0ad81ba..9e4ca1df 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java @@ -1,6 +1,7 @@ package de.ellpeck.naturesaura.items; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.aura.container.IAuraContainer; @@ -9,20 +10,19 @@ import de.ellpeck.naturesaura.api.aura.item.IAuraRecharge; import de.ellpeck.naturesaura.api.render.ITrinketItem; import de.ellpeck.naturesaura.enchant.ModEnchantments; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.Player; -import net.minecraft.inventory.EquipmentSlotType; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; +import net.minecraft.core.Direction; +import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.Direction; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.vector.Vector3f; -import net.minecraft.level.Level; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.Level; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; @@ -37,29 +37,28 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem { private final int capacity; public ItemAuraCache(String name, int capacity) { - super(name, new Properties().maxStackSize(1)); + super(name, new Properties().stacksTo(1)); this.capacity = capacity; } @Override public void inventoryTick(ItemStack stackIn, Level levelIn, Entity entityIn, int itemSlot, boolean isSelected) { - if (!levelIn.isClientSide && entityIn instanceof Player) { - Player player = (Player) entityIn; - if (player.isSneaking() && stackIn.getCapability(NaturesAuraAPI.capAuraContainer).isPresent()) { + if (!levelIn.isClientSide && entityIn instanceof Player player) { + if (player.isCrouching() && stackIn.getCapability(NaturesAuraAPI.capAuraContainer).isPresent()) { IAuraContainer container = stackIn.getCapability(NaturesAuraAPI.capAuraContainer).orElse(null); if (container.getStoredAura() <= 0) { return; } - for (int i = 0; i < player.inventory.getSizeInventory(); i++) { - ItemStack stack = player.inventory.getStackInSlot(i); + for (int i = 0; i < player.getInventory().getContainerSize(); i++) { + ItemStack stack = player.getInventory().getItem(i); IAuraRecharge recharge = stack.getCapability(NaturesAuraAPI.capAuraRecharge).orElse(null); if (recharge != null) { - if (recharge.rechargeFromContainer(container, itemSlot, i, player.inventory.currentItem == i)) + if (recharge.rechargeFromContainer(container, itemSlot, i, player.getInventory().selected == i)) break; - } else if (EnchantmentHelper.getEnchantmentLevel(ModEnchantments.AURA_MENDING, stack) > 0) { - int mainSize = player.inventory.mainInventory.size(); - boolean isArmor = i >= mainSize && i < mainSize + player.inventory.armorInventory.size(); - if ((isArmor || player.inventory.currentItem == i) && Helper.rechargeAuraItem(stack, container, 1000)) + } else if (EnchantmentHelper.getItemEnchantmentLevel(ModEnchantments.AURA_MENDING, stack) > 0) { + int mainSize = player.getInventory().items.size(); + boolean isArmor = i >= mainSize && i < mainSize + player.getInventory().armor.size(); + if ((isArmor || player.getInventory().selected == i) && Helper.rechargeAuraItem(stack, container, 1000)) break; } } @@ -68,8 +67,8 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem { } @Override - public void fillItemGroup(ItemGroup tab, NonNullList items) { - if (this.isInGroup(tab)) { + public void fillItemCategory(CreativeModeTab tab, NonNullList items) { + if (this.allowdedIn(tab)) { items.add(new ItemStack(this)); ItemStack stack = new ItemStack(this); @@ -81,15 +80,15 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem { } @Override - public boolean showDurabilityBar(ItemStack stack) { + public boolean isBarVisible(ItemStack stack) { return true; } @Override - public double getDurabilityForDisplay(ItemStack stack) { + public int getBarColor(ItemStack stack) { if (stack.getCapability(NaturesAuraAPI.capAuraContainer).isPresent()) { IAuraContainer container = stack.getCapability(NaturesAuraAPI.capAuraContainer).orElse(null); - return 1 - container.getStoredAura() / (double) container.getMaxAura(); + return (int) (1 - container.getStoredAura() / (double) container.getMaxAura()); } return 0; } @@ -114,14 +113,14 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem { @Override @OnlyIn(Dist.CLIENT) - public void render(ItemStack stack, Player player, RenderType type, MatrixStack matrices, IRenderTypeBuffer buffer, int packedLight, boolean isHolding) { + public void render(ItemStack stack, Player player, RenderType type, PoseStack matrices, MultiBufferSource buffer, int packedLight, boolean isHolding) { if (type == RenderType.BODY && !isHolding) { - boolean chest = !player.inventory.armorInventory.get(EquipmentSlotType.CHEST.getIndex()).isEmpty(); - boolean legs = !player.inventory.armorInventory.get(EquipmentSlotType.LEGS.getIndex()).isEmpty(); + boolean chest = !player.getInventory().armor.get(EquipmentSlot.CHEST.getIndex()).isEmpty(); + boolean legs = !player.getInventory().armor.get(EquipmentSlot.LEGS.getIndex()).isEmpty(); matrices.translate(-0.15F, 0.65F, chest ? -0.195F : legs ? -0.165F : -0.1475F); matrices.scale(0.5F, 0.5F, 0.5F); - matrices.rotate(Vector3f.XP.rotationDegrees(180F)); - Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer); + matrices.mulPose(Vector3f.XP.rotationDegrees(180F)); + Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer, 0); } } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemBirthSpirit.java b/src/main/java/de/ellpeck/naturesaura/items/ItemBirthSpirit.java index 2fc678ac..e2befe75 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemBirthSpirit.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemBirthSpirit.java @@ -1,34 +1,35 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.BabyEntitySpawnEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; public class ItemBirthSpirit extends ItemGlowing { + public ItemBirthSpirit() { super("birth_spirit"); MinecraftForge.EVENT_BUS.register(new EventHandler()); } private static class EventHandler { + @SubscribeEvent public void onBabyBorn(BabyEntitySpawnEvent event) { LivingEntity parent = event.getParentA(); if (!parent.level.isClientSide && event.getCausedByPlayer() != null) { - BlockPos pos = parent.getPosition(); + BlockPos pos = parent.blockPosition(); int aura = IAuraChunk.getAuraInArea(parent.level, pos, 30); if (aura < 1200000) return; - int amount = parent.level.rand.nextInt(3) + 1; - ItemEntity item = new ItemEntity(parent.level, parent.getPosX(), parent.getPosY(), parent.getPosZ(), - new ItemStack(ModItems.BIRTH_SPIRIT, amount)); - parent.level.addEntity(item); + int amount = parent.level.random.nextInt(3) + 1; + ItemEntity item = new ItemEntity(parent.level, parent.getX(), parent.getY(), parent.getZ(), new ItemStack(ModItems.BIRTH_SPIRIT, amount)); + parent.level.addFreshEntity(item); BlockPos spot = IAuraChunk.getHighestSpot(parent.level, pos, 30, pos); IAuraChunk.getAuraChunk(parent.level, spot).drainAura(spot, 800 * amount); diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemBreakPrevention.java b/src/main/java/de/ellpeck/naturesaura/items/ItemBreakPrevention.java index 5b3aadee..03efd4f9 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemBreakPrevention.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemBreakPrevention.java @@ -1,10 +1,14 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.NaturesAura; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ElytraItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.text.*; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ElytraItem; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.MinecraftForge; @@ -16,16 +20,18 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import java.util.List; public class ItemBreakPrevention extends ItemImpl { + public ItemBreakPrevention() { super("break_prevention"); MinecraftForge.EVENT_BUS.register(new Events()); } public static class Events { + @SubscribeEvent public void onAnvilUpdate(AnvilUpdateEvent event) { ItemStack stack = event.getLeft(); - if (stack.getToolTypes().isEmpty() || !stack.isDamageable()) + if (!stack.isDamageableItem()) return; ItemStack second = event.getRight(); if (second.getItem() != ModItems.BREAK_PREVENTION) @@ -42,10 +48,10 @@ public class ItemBreakPrevention extends ItemImpl { Player player = event.getPlayer(); if (player == null) return; - ItemStack stack = player.getHeldItemMainhand(); + ItemStack stack = player.getMainHandItem(); if (!stack.hasTag() || !stack.getTag().getBoolean(NaturesAura.MOD_ID + ":break_prevention")) return; - if (ElytraItem.isUsable(stack)) + if (ElytraItem.isFlyEnabled(stack)) return; event.setNewSpeed(0); } @@ -56,15 +62,15 @@ public class ItemBreakPrevention extends ItemImpl { ItemStack stack = event.getItemStack(); if (!stack.hasTag() || !stack.getTag().getBoolean(NaturesAura.MOD_ID + ":break_prevention")) return; - List tooltip = event.getToolTip(); - tooltip.add(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".break_prevention").setStyle(Style.EMPTY.setFormatting(TextFormatting.GRAY))); - if (ElytraItem.isUsable(stack)) + List tooltip = event.getToolTip(); + tooltip.add(new TranslatableComponent("info." + NaturesAura.MOD_ID + ".break_prevention").setStyle(Style.EMPTY.applyFormat(ChatFormatting.GRAY))); + if (ElytraItem.isFlyEnabled(stack)) return; if (tooltip.size() < 1) return; - ITextComponent head = tooltip.get(0); - if (head instanceof TextComponent) - ((TextComponent) head).append(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".broken").setStyle(Style.EMPTY.setFormatting(TextFormatting.GRAY))); + Component head = tooltip.get(0); + if (head instanceof MutableComponent) + ((MutableComponent) head).append(new TranslatableComponent("info." + NaturesAura.MOD_ID + ".broken").setStyle(Style.EMPTY.applyFormat(ChatFormatting.GRAY))); } } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemCaveFinder.java b/src/main/java/de/ellpeck/naturesaura/items/ItemCaveFinder.java index 7b2bace7..9dfbda1e 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemCaveFinder.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemCaveFinder.java @@ -1,53 +1,54 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.api.NaturesAuraAPI; -import net.minecraft.block.BlockState; -import net.minecraft.entity.EntitySpawnPlacementRegistry; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.LightType; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.block.state.BlockState; public class ItemCaveFinder extends ItemImpl { + public ItemCaveFinder() { - super("cave_finder", new Properties().maxStackSize(1)); + super("cave_finder", new Properties().stacksTo(1)); } @Override - public ActionResult onItemRightClick(Level levelIn, Player playerIn, Hand handIn) { - ItemStack stack = playerIn.getHeldItem(handIn); + public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { + ItemStack stack = playerIn.getItemInHand(handIn); NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance(); if (!inst.extractAuraFromPlayer(playerIn, 20000, levelIn.isClientSide)) - return new ActionResult<>(InteractionResult.FAIL, stack); + return new InteractionResultHolder<>(InteractionResult.FAIL, stack); if (levelIn.isClientSide) { inst.setParticleDepth(false); inst.setParticleSpawnRange(64); inst.setParticleCulling(false); - BlockPos pos = playerIn.getPosition(); + BlockPos pos = playerIn.blockPosition(); int range = 30; for (int x = -range; x <= range; x++) for (int y = -range; y <= range; y++) for (int z = -range; z <= range; z++) { - BlockPos offset = pos.add(x, y, z); + BlockPos offset = pos.offset(x, y, z); BlockState state = levelIn.getBlockState(offset); try { - if (!state.getBlock().canCreatureSpawn(state, levelIn, offset, EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, null)) + if (!state.getBlock().isValidSpawn(state, levelIn, offset, SpawnPlacements.Type.ON_GROUND, null)) continue; } catch (Exception e) { continue; } - BlockPos offUp = offset.up(); + BlockPos offUp = offset.above(); BlockState stateUp = levelIn.getBlockState(offUp); - if (stateUp.isNormalCube(levelIn, offUp) || stateUp.getMaterial().isLiquid()) + if (stateUp.isCollisionShapeFullBlock(levelIn, offUp) || stateUp.getMaterial().isLiquid()) continue; - int sky = levelIn.getLightFor(LightType.SKY, offUp); - int block = levelIn.getLightFor(LightType.BLOCK, offUp); + int sky = levelIn.getBrightness(LightLayer.SKY, offUp); + int block = levelIn.getBrightness(LightLayer.BLOCK, offUp); if (sky > 7 || block > 7) continue; @@ -59,9 +60,9 @@ public class ItemCaveFinder extends ItemImpl { inst.setParticleSpawnRange(32); inst.setParticleCulling(true); - playerIn.swingArm(handIn); + playerIn.swing(handIn); } - playerIn.getCooldownTracker().setCooldown(this, 20 * 30); - return new ActionResult<>(InteractionResult.SUCCESS, stack); + playerIn.getCooldowns().addCooldown(this, 20 * 30); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java b/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java index 3680d6c8..2f2fe31c 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java @@ -5,14 +5,20 @@ import de.ellpeck.naturesaura.data.ItemModelGenerator; import de.ellpeck.naturesaura.misc.ColoredBlockHelper; import de.ellpeck.naturesaura.reg.IColorProvidingItem; import de.ellpeck.naturesaura.reg.ICustomItemModel; -import net.minecraft.block.Block; -import net.minecraft.client.renderer.color.IItemColor; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemUseContext; -import net.minecraft.level.Level; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.color.item.ItemColor; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -21,7 +27,7 @@ import java.util.List; public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, ICustomItemModel { public ItemColorChanger() { - super("color_changer", new Properties().maxStackSize(1)); + super("color_changer", new Properties().stacksTo(1)); } private static boolean changeOrCopyColor(Player player, ItemStack stack, Level level, BlockPos pos, DyeColor firstColor) { @@ -32,10 +38,10 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I DyeColor color = DyeColor.byId(blocks.indexOf(block)); if (firstColor == null || color == firstColor) { DyeColor stored = getStoredColor(stack); - if (player.isSneaking()) { + if (player.isCrouching()) { if (stored != color) { level.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, - SoundEvents.ITEM_BUCKET_FILL, SoundCategory.PLAYERS, 0.65F, 1F); + SoundEvents.BUCKET_FILL, SoundSource.PLAYERS, 0.65F, 1F); if (!level.isClientSide) storeColor(stack, color); return true; @@ -45,14 +51,14 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I if (NaturesAuraAPI.instance().extractAuraFromPlayer(player, 1000, level.isClientSide)) { if (firstColor == null) { level.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, - SoundEvents.ITEM_BUCKET_EMPTY, SoundCategory.PLAYERS, 0.65F, 1F); + SoundEvents.BUCKET_EMPTY, SoundSource.PLAYERS, 0.65F, 1F); } if (!level.isClientSide) { - level.setBlockState(pos, blocks.get(stored.getId()).getDefaultState()); + level.setBlockAndUpdate(pos, blocks.get(stored.getId()).defaultBlockState()); if (isFillMode(stack)) { for (Direction off : Direction.values()) { - changeOrCopyColor(player, stack, level, pos.offset(off), color); + changeOrCopyColor(player, stack, level, pos.relative(off), color); } } } @@ -90,9 +96,9 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I } @Override - public InteractionResult onItemUse(ItemUseContext context) { - ItemStack stack = context.getPlayer().getHeldItem(context.getHand()); - if (changeOrCopyColor(context.getPlayer(), stack, context.getLevel(), context.getPos(), null)) { + public InteractionResult useOn(UseOnContext context) { + ItemStack stack = context.getPlayer().getItemInHand(context.getHand()); + if (changeOrCopyColor(context.getPlayer(), stack, context.getLevel(), context.getClickedPos(), null)) { return InteractionResult.SUCCESS; } else { return InteractionResult.PASS; @@ -100,27 +106,27 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I } @Override - public ActionResult onItemRightClick(Level levelIn, Player playerIn, Hand handIn) { - ItemStack stack = playerIn.getHeldItem(handIn); - if (playerIn.isSneaking() && getStoredColor(stack) != null) { - levelIn.playSound(playerIn, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ITEM_BUCKET_FILL_LAVA, SoundCategory.PLAYERS, 0.65F, 1F); + public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { + ItemStack stack = playerIn.getItemInHand(handIn); + if (playerIn.isCrouching() && getStoredColor(stack) != null) { + levelIn.playSound(playerIn, playerIn.getX(), playerIn.getY(), playerIn.getZ(), SoundEvents.BUCKET_FILL_LAVA, SoundSource.PLAYERS, 0.65F, 1F); if (!levelIn.isClientSide) { setFillMode(stack, !isFillMode(stack)); } - return new ActionResult<>(InteractionResult.SUCCESS, stack); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } else { - return new ActionResult<>(InteractionResult.PASS, stack); + return new InteractionResultHolder<>(InteractionResult.PASS, stack); } } @Override @OnlyIn(Dist.CLIENT) - public IItemColor getItemColor() { + public ItemColor getItemColor() { return (stack, tintIndex) -> { if (tintIndex > 0) { DyeColor color = getStoredColor(stack); if (color != null) { - return color.getColorValue(); + return color.getFireworkColor(); } } return 0xFFFFFF; diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemDeathRing.java b/src/main/java/de/ellpeck/naturesaura/items/ItemDeathRing.java index 975de1fe..e06b8f09 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemDeathRing.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemDeathRing.java @@ -3,19 +3,20 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.packet.PacketClient; import de.ellpeck.naturesaura.packet.PacketHandler; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.Effects; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; public class ItemDeathRing extends ItemImpl { + public ItemDeathRing() { - super("death_ring", new Properties().maxStackSize(1)); + super("death_ring", new Properties().stacksTo(1)); MinecraftForge.EVENT_BUS.register(new Events()); } @@ -28,12 +29,12 @@ public class ItemDeathRing extends ItemImpl { ItemStack equipped = Helper.getEquippedItem(s -> s.getItem() == ModItems.DEATH_RING, (Player) entity); if (!equipped.isEmpty()) { entity.setHealth(entity.getMaxHealth() / 2); - entity.clearActivePotions(); - entity.addPotionEffect(new EffectInstance(Effects.REGENERATION, 500, 1)); + entity.removeAllEffects(); + entity.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 500, 1)); CompoundTag data = new CompoundTag(); - data.putInt("id", entity.getEntityId()); - PacketHandler.sendToAllAround(entity.level, entity.getPosition(), 32, new PacketClient(1, data)); + data.putInt("id", entity.getId()); + PacketHandler.sendToAllAround(entity.level, entity.blockPosition(), 32, new PacketClient(1, data)); equipped.shrink(1); event.setCanceled(true); diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemEnderAccess.java b/src/main/java/de/ellpeck/naturesaura/items/ItemEnderAccess.java index 2af598d6..ae7b697d 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemEnderAccess.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemEnderAccess.java @@ -7,63 +7,64 @@ import de.ellpeck.naturesaura.api.misc.ILevelData; import de.ellpeck.naturesaura.blocks.BlockEnderCrate; import de.ellpeck.naturesaura.gui.ContainerEnderCrate; import de.ellpeck.naturesaura.gui.ModContainers; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.Player; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.entity.player.ServerPlayer; -import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.INamedContainerProvider; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.level.Level; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.network.NetworkHooks; import javax.annotation.Nullable; import java.util.List; public class ItemEnderAccess extends ItemImpl { + public ItemEnderAccess() { super("ender_access"); } @Override - public ActionResult onItemRightClick(Level levelIn, Player playerIn, Hand handIn) { - if (handIn != Hand.MAIN_HAND) - return new ActionResult<>(InteractionResult.PASS, playerIn.getHeldItem(handIn)); - ItemStack stack = playerIn.getHeldItemMainhand(); + public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { + if (handIn != InteractionHand.MAIN_HAND) + return new InteractionResultHolder<>(InteractionResult.PASS, playerIn.getItemInHand(handIn)); + ItemStack stack = playerIn.getMainHandItem(); String name = BlockEnderCrate.getEnderName(stack); if (!Strings.isNullOrEmpty(name)) { if (!levelIn.isClientSide && NaturesAuraAPI.instance().extractAuraFromPlayer(playerIn, 10000, false)) { - NetworkHooks.openGui((ServerPlayer) playerIn, new INamedContainerProvider() { + NetworkHooks.openGui((ServerPlayer) playerIn, new MenuProvider() { @Override - public ITextComponent getDisplayName() { - return new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".ender_access", TextFormatting.ITALIC + name + TextFormatting.RESET); + public Component getDisplayName() { + return new TranslatableComponent("info." + NaturesAura.MOD_ID + ".ender_access", ChatFormatting.ITALIC + name + ChatFormatting.RESET); } @Nullable @Override - public Container createMenu(int windowId, PlayerInventory inv, Player player) { + public AbstractContainerMenu createMenu(int windowId, Inventory inv, Player player) { IItemHandler handler = ILevelData.getOverworldData(inv.player.level).getEnderStorage(name); return new ContainerEnderCrate(ModContainers.ENDER_ACCESS, windowId, player, handler); } - }, buffer -> buffer.writeString(name)); + }, buffer -> buffer.writeUtf(name)); } - return new ActionResult<>(InteractionResult.SUCCESS, stack); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } - return new ActionResult<>(InteractionResult.FAIL, stack); + return new InteractionResultHolder<>(InteractionResult.FAIL, stack); } @Override @OnlyIn(Dist.CLIENT) - public void addInformation(ItemStack stack, @Nullable Level levelIn, List tooltip, ITooltipFlag flagIn) { + public void appendHoverText(ItemStack stack, @Nullable Level levelIn, List tooltip, TooltipFlag flagIn) { BlockEnderCrate.addEnderNameInfo(stack, tooltip); } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemEye.java b/src/main/java/de/ellpeck/naturesaura/items/ItemEye.java index 570dafa2..5d0ea23c 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemEye.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemEye.java @@ -1,33 +1,33 @@ package de.ellpeck.naturesaura.items; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; import de.ellpeck.naturesaura.api.render.ITrinketItem; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.entity.player.Player; -import net.minecraft.inventory.EquipmentSlotType; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; public class ItemEye extends ItemImpl implements ITrinketItem { public ItemEye(String name) { - super(name, new Properties().maxStackSize(1)); + super(name, new Properties().stacksTo(1)); } @Override @OnlyIn(Dist.CLIENT) - public void render(ItemStack stack, Player player, RenderType type, MatrixStack matrices, IRenderTypeBuffer buffer, int packedLight, boolean isHolding) { + public void render(ItemStack stack, Player player, RenderType type, PoseStack matrices, MultiBufferSource buffer, int packedLight, boolean isHolding) { if (type == RenderType.BODY && !isHolding) { - boolean armor = !player.inventory.armorInventory.get(EquipmentSlotType.CHEST.getIndex()).isEmpty(); + boolean armor = !player.getInventory().armor.get(EquipmentSlot.CHEST.getIndex()).isEmpty(); matrices.translate(0.1F, 0.225F, armor ? -0.195F : -0.1475F); matrices.scale(0.3F, 0.3F, 0.3F); - matrices.rotate(Vector3f.XP.rotationDegrees(180)); - Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer); + matrices.mulPose(Vector3f.XP.rotationDegrees(180)); + Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer, 0); } } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemGlowing.java b/src/main/java/de/ellpeck/naturesaura/items/ItemGlowing.java index e35d94f3..036ef45d 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemGlowing.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemGlowing.java @@ -1,17 +1,15 @@ package de.ellpeck.naturesaura.items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.world.item.ItemStack; public class ItemGlowing extends ItemImpl { + public ItemGlowing(String baseName) { super(baseName); } @Override - @OnlyIn(Dist.CLIENT) - public boolean hasEffect(ItemStack stack) { + public boolean isFoil(ItemStack stack) { return true; } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemGoldFiber.java b/src/main/java/de/ellpeck/naturesaura/items/ItemGoldFiber.java index 24ef162b..369a3c67 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemGoldFiber.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemGoldFiber.java @@ -2,10 +2,10 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.blocks.BlockGoldenLeaves; import de.ellpeck.naturesaura.reg.IColorProvidingItem; -import net.minecraft.client.renderer.color.IItemColor; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUseContext; -import net.minecraft.util.InteractionResult; +import net.minecraft.client.color.item.ItemColor; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; public class ItemGoldFiber extends ItemImpl implements IColorProvidingItem { @@ -14,14 +14,14 @@ public class ItemGoldFiber extends ItemImpl implements IColorProvidingItem { } @Override - public IItemColor getItemColor() { + public ItemColor getItemColor() { return (stack, tintIndex) -> 0xF2FF00; } @Override - public InteractionResult onItemUse(ItemUseContext context) { - ItemStack stack = context.getPlayer().getHeldItem(context.getHand()); - if (BlockGoldenLeaves.convert(context.getLevel(), context.getPos())) { + public InteractionResult useOn(UseOnContext context) { + ItemStack stack = context.getPlayer().getItemInHand(context.getHand()); + if (BlockGoldenLeaves.convert(context.getLevel(), context.getClickedPos())) { if (!context.getLevel().isClientSide) { stack.shrink(1); } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemLightStaff.java b/src/main/java/de/ellpeck/naturesaura/items/ItemLightStaff.java index ddb733ba..e2f68ba9 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemLightStaff.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemLightStaff.java @@ -3,26 +3,27 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.entities.EntityLightProjectile; import de.ellpeck.naturesaura.entities.ModEntities; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.level.Level; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; public class ItemLightStaff extends ItemImpl { + public ItemLightStaff() { super("light_staff"); } @Override - public ActionResult onItemRightClick(Level levelIn, Player playerIn, Hand handIn) { - ItemStack stack = playerIn.getHeldItem(handIn); + public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { + ItemStack stack = playerIn.getItemInHand(handIn); if (!levelIn.isClientSide && NaturesAuraAPI.instance().extractAuraFromPlayer(playerIn, 1000, false)) { EntityLightProjectile projectile = new EntityLightProjectile(ModEntities.LIGHT_PROJECTILE, playerIn, levelIn); - projectile.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0, 1.5F, 0); - levelIn.addEntity(projectile); + projectile.shootFromRotation(playerIn, playerIn.getXRot(), playerIn.getYRot(), 0, 1.5F, 0); + levelIn.addFreshEntity(projectile); } - return new ActionResult<>(InteractionResult.SUCCESS, stack); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemLootFinder.java b/src/main/java/de/ellpeck/naturesaura/items/ItemLootFinder.java index 852b0daa..93f296d0 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemLootFinder.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemLootFinder.java @@ -2,48 +2,49 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.api.NaturesAuraAPI; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.MobSpawnerBlockEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.SpawnerBlockEntity; +import net.minecraft.world.phys.AABB; import net.minecraftforge.items.CapabilityItemHandler; public class ItemLootFinder extends ItemImpl { + public ItemLootFinder() { super("loot_finder"); } @Override - public ActionResult onItemRightClick(Level levelIn, Player playerIn, Hand handIn) { - ItemStack stack = playerIn.getHeldItem(handIn); + public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { + ItemStack stack = playerIn.getItemInHand(handIn); NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance(); if (!inst.extractAuraFromPlayer(playerIn, 100000, false)) - return new ActionResult<>(InteractionResult.FAIL, stack); + return new InteractionResultHolder<>(InteractionResult.FAIL, stack); if (levelIn.isClientSide) { inst.setParticleDepth(false); inst.setParticleSpawnRange(64); inst.setParticleCulling(false); - BlockPos pos = playerIn.getPosition(); + BlockPos pos = playerIn.blockPosition(); Helper.getBlockEntitiesInArea(levelIn, pos, 64, tile -> { - if (tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).isPresent() || tile instanceof MobSpawnerBlockEntity) { + if (tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).isPresent() || tile instanceof SpawnerBlockEntity) { inst.spawnMagicParticle( - tile.getPos().getX() + 0.5F, tile.getPos().getY() + 0.5F, tile.getPos().getZ() + 0.5F, + tile.getBlockPos().getX() + 0.5F, tile.getBlockPos().getY() + 0.5F, tile.getBlockPos().getZ() + 0.5F, 0F, 0F, 0F, 0xf5f10a, 6F, 20 * 60, 0F, false, true); } return false; }); - for (Entity entity : levelIn.getEntitiesWithinAABB(Entity.class, new AABB(pos).grow(64))) { + for (Entity entity : levelIn.getEntitiesOfClass(Entity.class, new AABB(pos).inflate(64))) { if (!(entity instanceof LivingEntity) && entity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).isPresent()) { inst.spawnMagicParticle( - entity.getPosX(), entity.getPosYEye(), entity.getPosZ(), + entity.getX(), entity.getEyeY(), entity.getZ(), 0F, 0F, 0F, 0xf5f10a, 6F, 20 * 60, 0F, false, true); } } @@ -52,9 +53,9 @@ public class ItemLootFinder extends ItemImpl { inst.setParticleSpawnRange(32); inst.setParticleCulling(true); - playerIn.swingArm(handIn); + playerIn.swing(handIn); } - playerIn.getCooldownTracker().setCooldown(this, 20 * 60); - return new ActionResult<>(InteractionResult.SUCCESS, stack); + playerIn.getCooldowns().addCooldown(this, 20 * 60); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemMoverMinecart.java b/src/main/java/de/ellpeck/naturesaura/items/ItemMoverMinecart.java index 39f7db2e..310c62c4 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemMoverMinecart.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemMoverMinecart.java @@ -2,32 +2,32 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.entities.EntityMoverMinecart; import de.ellpeck.naturesaura.entities.ModEntities; -import net.minecraft.block.AbstractRailBlock; -import net.minecraft.entity.item.minecart.AbstractMinecartEntity; -import net.minecraft.item.ItemUseContext; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseRailBlock; import javax.annotation.Nonnull; public class ItemMoverMinecart extends ItemImpl { public ItemMoverMinecart() { - super("mover_cart", new Properties().maxStackSize(1)); + super("mover_cart", new Properties().stacksTo(1)); } @Nonnull @Override - public InteractionResult onItemUse(ItemUseContext context) { + public InteractionResult useOn(UseOnContext context) { Level level = context.getLevel(); - BlockPos pos = context.getPos(); - if (AbstractRailBlock.isRail(level.getBlockState(pos))) { + BlockPos pos = context.getClickedPos(); + if (BaseRailBlock.isRail(level.getBlockState(pos))) { if (!level.isClientSide) { - AbstractMinecartEntity cart = new EntityMoverMinecart(ModEntities.MOVER_CART, level, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); - level.addEntity(cart); + AbstractMinecart cart = new EntityMoverMinecart(ModEntities.MOVER_CART, level, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + level.addFreshEntity(cart); } - context.getPlayer().getHeldItem(context.getHand()).shrink(1); + context.getPlayer().getItemInHand(context.getHand()).shrink(1); return InteractionResult.SUCCESS; } return InteractionResult.PASS; diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemMultiblockMaker.java b/src/main/java/de/ellpeck/naturesaura/items/ItemMultiblockMaker.java index 1f7e8c67..25c786f2 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemMultiblockMaker.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemMultiblockMaker.java @@ -2,15 +2,15 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.multiblock.IMultiblock; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUseContext; -import net.minecraft.util.ActionResult; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.level.Level; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; import java.util.ArrayList; import java.util.List; @@ -38,21 +38,21 @@ public class ItemMultiblockMaker extends ItemImpl { } @Override - public ActionResult onItemRightClick(Level levelIn, Player playerIn, Hand handIn) { - ItemStack stack = playerIn.getHeldItem(handIn); + public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { + ItemStack stack = playerIn.getItemInHand(handIn); if (!levelIn.isClientSide && playerIn.isCreative()) { int curr = getMultiblock(stack); int next = (curr + 1) % multiblocks().size(); stack.getOrCreateTag().putInt("multiblock", next); } - return new ActionResult<>(InteractionResult.SUCCESS, stack); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } @Override - public InteractionResult onItemUse(ItemUseContext context) { + public InteractionResult useOn(UseOnContext context) { Player player = context.getPlayer(); if (player.isCreative()) { - int id = getMultiblock(player.getHeldItem(context.getHand())); + int id = getMultiblock(player.getItemInHand(context.getHand())); if (id < 0) return InteractionResult.PASS; IMultiblock multi = multiblocks().get(id); @@ -60,8 +60,8 @@ public class ItemMultiblockMaker extends ItemImpl { return InteractionResult.PASS; if (!context.getLevel().isClientSide) - multi.forEach(context.getPos().up(), (char) 0, (blockPos, matcher) -> { - context.getLevel().setBlockState(blockPos, matcher.getDefaultState()); + multi.forEach(context.getClickedPos().above(), (char) 0, (blockPos, matcher) -> { + context.getLevel().setBlockAndUpdate(blockPos, matcher.defaultState()); return true; }); @@ -71,12 +71,13 @@ public class ItemMultiblockMaker extends ItemImpl { } @Override - public ITextComponent getDisplayName(ItemStack stack) { - TextComponent name = (TextComponent) super.getDisplayName(stack); + public Component getName(ItemStack stack) { + MutableComponent name = (MutableComponent) super.getName(stack); int id = getMultiblock(stack); if (id < 0) return name; IMultiblock multi = multiblocks().get(id); - return multi == null ? name : name.appendString(" (" + multi.getName() + ")"); + return multi == null ? name : name.append(" (" + multi.getName() + ")"); } + } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemNetheriteFinder.java b/src/main/java/de/ellpeck/naturesaura/items/ItemNetheriteFinder.java index 669243cf..9a977f01 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemNetheriteFinder.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemNetheriteFinder.java @@ -1,33 +1,34 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.api.NaturesAuraAPI; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; public class ItemNetheriteFinder extends ItemImpl { + public ItemNetheriteFinder() { - super("netherite_finder", new Properties().maxStackSize(1)); + super("netherite_finder", new Properties().stacksTo(1)); } @Override - public ActionResult onItemRightClick(Level levelIn, Player playerIn, Hand handIn) { - ItemStack stack = playerIn.getHeldItem(handIn); + public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { + ItemStack stack = playerIn.getItemInHand(handIn); NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance(); if (!inst.extractAuraFromPlayer(playerIn, 200000, false)) - return new ActionResult<>(InteractionResult.FAIL, stack); + return new InteractionResultHolder<>(InteractionResult.FAIL, stack); if (levelIn.isClientSide) { inst.setParticleDepth(false); inst.setParticleSpawnRange(64); inst.setParticleCulling(false); - BlockPos pos = playerIn.getPosition(); + BlockPos pos = playerIn.blockPosition(); int range = 12; for (int x = -range; x <= range; x++) { for (int y = 0; y <= 128; y++) { @@ -46,9 +47,9 @@ public class ItemNetheriteFinder extends ItemImpl { inst.setParticleDepth(true); inst.setParticleSpawnRange(32); inst.setParticleCulling(true); - playerIn.swingArm(handIn); + playerIn.swing(handIn); } - playerIn.getCooldownTracker().setCooldown(this, 20 * 60); - return new ActionResult<>(InteractionResult.SUCCESS, stack); + playerIn.getCooldowns().addCooldown(this, 20 * 60); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemPetReviver.java b/src/main/java/de/ellpeck/naturesaura/items/ItemPetReviver.java index 66e8f3c4..796b242e 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemPetReviver.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemPetReviver.java @@ -4,19 +4,19 @@ import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticles; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.passive.TameableEntity; -import net.minecraft.entity.player.Player; -import net.minecraft.entity.player.ServerPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.particles.ParticleTypes; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.level.server.ServerLevel; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingEvent; @@ -28,6 +28,7 @@ import java.util.Optional; import java.util.UUID; public class ItemPetReviver extends ItemImpl { + public ItemPetReviver() { super("pet_reviver"); MinecraftForge.EVENT_BUS.register(new Events()); @@ -38,32 +39,31 @@ public class ItemPetReviver extends ItemImpl { @SubscribeEvent public void onEntityTick(LivingEvent.LivingUpdateEvent event) { LivingEntity entity = event.getEntityLiving(); - if (entity.level.isClientSide || entity.level.getGameTime() % 20 != 0 || !(entity instanceof TameableEntity)) + if (entity.level.isClientSide || entity.level.getGameTime() % 20 != 0 || !(entity instanceof TamableAnimal tameable)) return; - TameableEntity tameable = (TameableEntity) entity; - if (!tameable.isTamed() || !tameable.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver")) + if (!tameable.isTame() || !tameable.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver")) return; LivingEntity owner = tameable.getOwner(); - if (owner == null || owner.getDistanceSq(tameable) > 5 * 5) + if (owner == null || owner.distanceToSqr(tameable) > 5 * 5) return; - if (entity.level.rand.nextFloat() >= 0.65F) { - ((ServerLevel) entity.level).spawnParticle(ParticleTypes.HEART, - entity.getPosX() + entity.level.rand.nextGaussian() * 0.25F, - entity.getPosYEye() + entity.level.rand.nextGaussian() * 0.25F, - entity.getPosZ() + entity.level.rand.nextGaussian() * 0.25F, - entity.level.rand.nextInt(2) + 1, 0, 0, 0, 0); + if (entity.level.random.nextFloat() >= 0.65F) { + ((ServerLevel) entity.level).sendParticles(ParticleTypes.HEART, + entity.getX() + entity.level.random.nextGaussian() * 0.25F, + entity.getEyeY() + entity.level.random.nextGaussian() * 0.25F, + entity.getZ() + entity.level.random.nextGaussian() * 0.25F, + entity.level.random.nextInt(2) + 1, 0, 0, 0, 0); } } - // we need to use the event since the item doesn't receive the interaction for tamed pets.. + // we need to use the event since the item doesn't receive the interaction for tamed pets... @SubscribeEvent public void onEntityInteract(PlayerInteractEvent.EntityInteractSpecific event) { Entity target = event.getTarget(); - if (!(target instanceof TameableEntity) || !((TameableEntity) target).isTamed()) + if (!(target instanceof TamableAnimal) || !((TamableAnimal) target).isTame()) return; if (target.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver")) return; - ItemStack stack = event.getPlayer().getHeldItem(event.getHand()); + ItemStack stack = event.getPlayer().getItemInHand(event.getHand()); if (stack.getItem() != ModItems.PET_REVIVER) return; target.getPersistentData().putBoolean(NaturesAura.MOD_ID + ":pet_reviver", true); @@ -77,26 +77,23 @@ public class ItemPetReviver extends ItemImpl { @SubscribeEvent(priority = EventPriority.LOWEST) public void onLivingDeath(LivingDeathEvent event) { LivingEntity entity = event.getEntityLiving(); - if (entity.level.isClientSide || !(entity instanceof TameableEntity)) + if (entity.level.isClientSide || !(entity instanceof TamableAnimal tameable)) return; - TameableEntity tameable = (TameableEntity) entity; - if (!tameable.isTamed() || !tameable.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver")) + if (!tameable.isTame() || !tameable.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver")) return; // get the overworld, and the overworld's spawn point, by default - ServerLevel spawnLevel = tameable.level.getServer().func_241755_D_(); - Vector3d spawn = Vector3d.copyCenteredHorizontally(spawnLevel.func_241135_u_()); + ServerLevel spawnLevel = tameable.level.getServer().overworld(); + Vec3 spawn = Vec3.atBottomCenterOf(spawnLevel.getSharedSpawnPos()); // check if the owner is online, and respawn at the bed if they are LivingEntity owner = tameable.getOwner(); - if (owner instanceof ServerPlayer) { - ServerPlayer player = (ServerPlayer) owner; - // I'm not really sure what this means, but I got it from PlayerList.func_232644_a_ haha - BlockPos pos = player.func_241140_K_(); + if (owner instanceof ServerPlayer player) { + BlockPos pos = player.getRespawnPosition(); if (pos != null) { - float f = player.func_242109_L(); - boolean b = player.func_241142_M_(); - Optional bed = Player.func_242374_a((ServerLevel) player.level, pos, f, b, false); + float f = player.getRespawnAngle(); + boolean b = player.isRespawnForced(); + Optional bed = Player.findRespawnPositionAndUseSpawnBlock((ServerLevel) player.level, pos, f, b, false); if (bed.isPresent()) { spawnLevel = (ServerLevel) player.level; spawn = bed.get(); @@ -104,38 +101,38 @@ public class ItemPetReviver extends ItemImpl { } } - PacketHandler.sendToAllAround(tameable.level, tameable.getPosition(), 32, new PacketParticles((float) tameable.getPosX(), (float) tameable.getPosYEye(), (float) tameable.getPosZ(), PacketParticles.Type.PET_REVIVER, 0xc2461d)); + PacketHandler.sendToAllAround(tameable.level, tameable.blockPosition(), 32, new PacketParticles((float) tameable.getX(), (float) tameable.getEyeY(), (float) tameable.getZ(), PacketParticles.Type.PET_REVIVER, 0xc2461d)); - TameableEntity spawnedPet = tameable; + TamableAnimal spawnedPet = tameable; if (tameable.level != spawnLevel) { ((ServerLevel) tameable.level).removeEntity(tameable, true); - spawnedPet = (TameableEntity) tameable.getType().create(spawnLevel); + spawnedPet = (TamableAnimal) tameable.getType().create(spawnLevel); } // respawn (a copy of) the pet - spawnedPet.copyDataFromOld(tameable); - spawnedPet.setMotion(0, 0, 0); - spawnedPet.setLocationAndAngles(spawn.x, spawn.y, spawn.z, tameable.rotationYaw, tameable.rotationPitch); - while (!spawnLevel.hasNoCollisions(spawnedPet)) - spawnedPet.setPosition(spawnedPet.getPosX(), spawnedPet.getPosY() + 1, spawnedPet.getPosZ()); + spawnedPet.restoreFrom(tameable); + spawnedPet.setDeltaMovement(0, 0, 0); + spawnedPet.moveTo(spawn.x, spawn.y, spawn.z, tameable.getYRot(), tameable.getXRot()); + while (!spawnLevel.noCollision(spawnedPet)) + spawnedPet.setPos(spawnedPet.getX(), spawnedPet.getY() + 1, spawnedPet.getZ()); spawnedPet.setHealth(spawnedPet.getMaxHealth()); - spawnedPet.getNavigator().clearPath(); + spawnedPet.getNavigation().stop(); // sit down (on the server side!) - spawnedPet.func_233687_w_(true); + spawnedPet.setInSittingPose(true); spawnedPet.setJumping(false); - spawnedPet.setAttackTarget(null); + spawnedPet.setTarget(null); if (tameable.level != spawnLevel) { - spawnLevel.addEntity(spawnedPet); - tameable.remove(false); + spawnLevel.addFreshEntity(spawnedPet); + tameable.remove(Entity.RemovalReason.DISCARDED); } // drain aura - BlockPos auraPos = IAuraChunk.getHighestSpot(spawnLevel, spawnedPet.getPosition(), 35, spawnedPet.getPosition()); + BlockPos auraPos = IAuraChunk.getHighestSpot(spawnLevel, spawnedPet.blockPosition(), 35, spawnedPet.blockPosition()); IAuraChunk.getAuraChunk(spawnLevel, auraPos).drainAura(auraPos, 200000); - PacketHandler.sendToAllAround(spawnedPet.level, spawnedPet.getPosition(), 32, new PacketParticles((float) spawnedPet.getPosX(), (float) spawnedPet.getPosYEye(), (float) spawnedPet.getPosZ(), PacketParticles.Type.PET_REVIVER, 0x4dba2f)); + PacketHandler.sendToAllAround(spawnedPet.level, spawnedPet.blockPosition(), 32, new PacketParticles((float) spawnedPet.getX(), (float) spawnedPet.getEyeY(), (float) spawnedPet.getZ(), PacketParticles.Type.PET_REVIVER, 0x4dba2f)); if (owner instanceof Player) - owner.sendMessage(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".pet_reviver", spawnedPet.getDisplayName()).mergeStyle(TextFormatting.ITALIC, TextFormatting.GRAY), UUID.randomUUID()); + owner.sendMessage(new TranslatableComponent("info." + NaturesAura.MOD_ID + ".pet_reviver", spawnedPet.getDisplayName()).withStyle(ChatFormatting.ITALIC, ChatFormatting.GRAY), UUID.randomUUID()); event.setCanceled(true); } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java b/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java index c69f4ca1..82b35363 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java @@ -4,19 +4,19 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.render.IVisualizable; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUseContext; -import net.minecraft.util.ActionResult; -import net.minecraft.util.InteractionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -28,7 +28,7 @@ public class ItemRangeVisualizer extends ItemImpl { public static final ListMultimap VISUALIZED_RAILS = ArrayListMultimap.create(); public ItemRangeVisualizer() { - super("range_visualizer", new Properties().maxStackSize(1)); + super("range_visualizer", new Properties().stacksTo(1)); MinecraftForge.EVENT_BUS.register(new EventHandler()); } @@ -44,33 +44,33 @@ public class ItemRangeVisualizer extends ItemImpl { public static void visualize(Player player, ListMultimap map, ResourceLocation dim, T value) { if (map.containsEntry(dim, value)) { map.remove(dim, value); - player.sendStatusMessage(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.end"), true); + player.displayClientMessage(new TranslatableComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.end"), true); } else { map.put(dim, value); - player.sendStatusMessage(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.start"), true); + player.displayClientMessage(new TranslatableComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.start"), true); } } @Override - public ActionResult onItemRightClick(Level levelIn, Player playerIn, Hand handIn) { - ItemStack stack = playerIn.getHeldItem(handIn); - if (playerIn.isSneaking()) { + public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { + ItemStack stack = playerIn.getItemInHand(handIn); + if (playerIn.isCrouching()) { clear(); - playerIn.sendStatusMessage(new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.end_all"), true); - return new ActionResult<>(InteractionResult.SUCCESS, stack); + playerIn.displayClientMessage(new TranslatableComponent("info." + NaturesAura.MOD_ID + ".range_visualizer.end_all"), true); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } - return new ActionResult<>(InteractionResult.PASS, stack); + return new InteractionResultHolder<>(InteractionResult.PASS, stack); } @Override - public InteractionResult onItemUse(ItemUseContext context) { + public InteractionResult useOn(UseOnContext context) { Level level = context.getLevel(); - BlockPos pos = context.getPos(); + BlockPos pos = context.getClickedPos(); BlockState state = level.getBlockState(pos); Block block = state.getBlock(); if (block instanceof IVisualizable) { if (level.isClientSide) - visualize(context.getPlayer(), VISUALIZED_BLOCKS, level.func_234923_W_().func_240901_a_(), pos); + visualize(context.getPlayer(), VISUALIZED_BLOCKS, level.dimension().location(), pos); return InteractionResult.SUCCESS; } return InteractionResult.PASS; @@ -86,10 +86,10 @@ public class ItemRangeVisualizer extends ItemImpl { Entity entity = event.getTarget(); if (entity instanceof IVisualizable) { if (entity.level.isClientSide) { - ResourceLocation dim = entity.level.func_234923_W_().func_240901_a_(); + ResourceLocation dim = entity.level.dimension().location(); visualize(event.getPlayer(), VISUALIZED_ENTITIES, dim, entity); } - event.getPlayer().swingArm(event.getHand()); + event.getPlayer().swing(event.getHand()); event.setCancellationResult(InteractionResult.SUCCESS); event.setCanceled(true); } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemShockwaveCreator.java b/src/main/java/de/ellpeck/naturesaura/items/ItemShockwaveCreator.java index c3335038..09d7ad96 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemShockwaveCreator.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemShockwaveCreator.java @@ -1,33 +1,33 @@ package de.ellpeck.naturesaura.items; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.render.ITrinketItem; import de.ellpeck.naturesaura.items.tools.ItemArmor; import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.reg.ModArmorMaterial; -import net.minecraft.block.BlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.Player; -import net.minecraft.inventory.EquipmentSlotType; -import net.minecraft.item.ItemStack; +import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.Effects; -import net.minecraft.util.DamageSource; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.AABB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3f; -import net.minecraft.level.Level; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -36,23 +36,22 @@ import java.util.List; public class ItemShockwaveCreator extends ItemImpl implements ITrinketItem { public ItemShockwaveCreator() { - super("shockwave_creator", new Properties().maxStackSize(1)); + super("shockwave_creator", new Properties().stacksTo(1)); } @Override public void inventoryTick(ItemStack stack, Level levelIn, Entity entityIn, int itemSlot, boolean isSelected) { - if (levelIn.isClientSide || !(entityIn instanceof LivingEntity)) + if (levelIn.isClientSide || !(entityIn instanceof LivingEntity living)) return; - LivingEntity living = (LivingEntity) entityIn; if (!living.isOnGround()) { CompoundTag compound = stack.getOrCreateTag(); if (compound.getBoolean("air")) return; compound.putBoolean("air", true); - compound.putDouble("x", living.getPosX()); - compound.putDouble("y", living.getPosY()); - compound.putDouble("z", living.getPosZ()); + compound.putDouble("x", living.getX()); + compound.putDouble("y", living.getY()); + compound.putDouble("z", living.getZ()); } else { if (!stack.hasTag()) return; @@ -62,59 +61,59 @@ public class ItemShockwaveCreator extends ItemImpl implements ITrinketItem { compound.putBoolean("air", false); - if (!living.isSneaking()) + if (!living.isCrouching()) return; - if (living.getDistanceSq(compound.getDouble("x"), compound.getDouble("y"), compound.getDouble("z")) > 0.75F) + if (living.distanceToSqr(compound.getDouble("x"), compound.getDouble("y"), compound.getDouble("z")) > 0.75F) return; if (living instanceof Player && !NaturesAuraAPI.instance().extractAuraFromPlayer((Player) living, 1000, false)) return; DamageSource source; if (living instanceof Player) - source = DamageSource.causePlayerDamage((Player) living); + source = DamageSource.playerAttack((Player) living); else source = DamageSource.MAGIC; boolean infusedSet = ItemArmor.isFullSetEquipped(living, ModArmorMaterial.INFUSED); int range = 5; - List mobs = levelIn.getEntitiesWithinAABB(LivingEntity.class, new AABB( - living.getPosX() - range, living.getPosY() - 0.5, living.getPosZ() - range, - living.getPosX() + range, living.getPosY() + 0.5, living.getPosZ() + range)); + List mobs = levelIn.getEntitiesOfClass(LivingEntity.class, new AABB( + living.getX() - range, living.getY() - 0.5, living.getZ() - range, + living.getX() + range, living.getY() + 0.5, living.getZ() + range)); for (LivingEntity mob : mobs) { if (!mob.isAlive() || mob == living) continue; - if (living.getDistanceSq(mob) > range * range) + if (living.distanceToSqr(mob) > range * range) continue; if (living instanceof Player && !NaturesAuraAPI.instance().extractAuraFromPlayer((Player) living, 500, false)) break; - mob.attackEntityFrom(source, 4F); + mob.hurt(source, 4F); if (infusedSet) - mob.addPotionEffect(new EffectInstance(Effects.WITHER, 120)); + mob.addEffect(new MobEffectInstance(MobEffects.WITHER, 120)); } - BlockPos pos = living.getPosition(); - BlockPos down = pos.down(); + BlockPos pos = living.blockPosition(); + BlockPos down = pos.below(); BlockState downState = levelIn.getBlockState(down); if (downState.getMaterial() != Material.AIR) { SoundType type = downState.getBlock().getSoundType(downState, levelIn, down, null); - levelIn.playSound(null, pos, type.getBreakSound(), SoundCategory.BLOCKS, type.getVolume() * 0.5F, type.getPitch() * 0.8F); + levelIn.playSound(null, pos, type.getBreakSound(), SoundSource.BLOCKS, type.getVolume() * 0.5F, type.getPitch() * 0.8F); } - PacketHandler.sendToAllAround(levelIn, pos, 32, new PacketParticles((float) living.getPosX(), (float) living.getPosY(), (float) living.getPosZ(), PacketParticles.Type.SHOCKWAVE_CREATOR)); + PacketHandler.sendToAllAround(levelIn, pos, 32, new PacketParticles((float) living.getX(), (float) living.getY(), (float) living.getZ(), PacketParticles.Type.SHOCKWAVE_CREATOR)); } } @Override @OnlyIn(Dist.CLIENT) - public void render(ItemStack stack, Player player, RenderType type, MatrixStack matrices, IRenderTypeBuffer buffer, int packedLight, boolean isHolding) { + public void render(ItemStack stack, Player player, RenderType type, PoseStack matrices, MultiBufferSource buffer, int packedLight, boolean isHolding) { if (type == RenderType.BODY && !isHolding) { - boolean armor = !player.inventory.armorInventory.get(EquipmentSlotType.CHEST.getIndex()).isEmpty(); + boolean armor = !player.getInventory().armor.get(EquipmentSlot.CHEST.getIndex()).isEmpty(); matrices.translate(0, 0.125F, armor ? -0.195F : -0.1475F); matrices.scale(0.3F, 0.3F, 0.3F); - matrices.rotate(Vector3f.XP.rotationDegrees(180)); - Minecraft.getInstance().getItemRenderer().renderItem(stack, ItemCameraTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer); + matrices.mulPose(Vector3f.XP.rotationDegrees(180)); + Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer, 0); } } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemStructureFinder.java b/src/main/java/de/ellpeck/naturesaura/items/ItemStructureFinder.java index 2a6cfb37..552f07dd 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemStructureFinder.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemStructureFinder.java @@ -4,9 +4,8 @@ import de.ellpeck.naturesaura.entities.EntityStructureFinder; import de.ellpeck.naturesaura.entities.ModEntities; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.ActionResult; -import net.minecraft.util.InteractionResult; import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -30,18 +29,18 @@ public class ItemStructureFinder extends ItemImpl { public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { ItemStack stack = playerIn.getItemInHand(handIn); if (!levelIn.isClientSide && ((ServerLevel) levelIn).structureFeatureManager().shouldGenerateFeatures()) { - BlockPos pos = ((ServerLevel) levelIn).getChunkSource().getGenerator().findNearestMapFeature((ServerLevel) levelIn, this.structureName, playerIn.getPosition(), this.radius, false); + BlockPos pos = ((ServerLevel) levelIn).getChunkSource().getGenerator().findNearestMapFeature((ServerLevel) levelIn, this.structureName, playerIn.blockPosition(), this.radius, false); if (pos != null) { EntityStructureFinder entity = new EntityStructureFinder(ModEntities.STRUCTURE_FINDER, levelIn); - entity.setPosition(playerIn.getPosX(), playerIn.getPosYHeight(0.5D), playerIn.getPosZ()); - entity.func_213863_b(stack); - entity.getDataManager().set(EntityStructureFinder.COLOR, this.color); - entity.moveTowards(pos.up(64)); - levelIn.addEntity(entity); + entity.setPos(playerIn.getX(), playerIn.getY(0.5D), playerIn.getZ()); + entity.setItem(stack); + entity.getEntityData().set(EntityStructureFinder.COLOR, this.color); + entity.signalTo(pos.above(64)); + levelIn.addFreshEntity(entity); stack.shrink(1); } } - return new ActionResult<>(InteractionResult.SUCCESS, stack); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); } } diff --git a/src/main/java/de/ellpeck/naturesaura/items/tools/ItemPickaxe.java b/src/main/java/de/ellpeck/naturesaura/items/tools/ItemPickaxe.java index 7536b859..af1697ab 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/tools/ItemPickaxe.java +++ b/src/main/java/de/ellpeck/naturesaura/items/tools/ItemPickaxe.java @@ -75,7 +75,7 @@ public class ItemPickaxe extends PickaxeItem implements IModItem, ICustomItemMod return; if (!isSelected || levelIn.isClientSide) return; - AABB bounds = new AABB(entityIn.getOnPos()).inflate(3.5F); + AABB bounds = new AABB(entityIn.blockPosition()).inflate(3.5F); for (ItemEntity item : levelIn.getEntitiesOfClass(ItemEntity.class, bounds)) { // only pick up freshly dropped items if (item.tickCount >= 5 || !item.isAlive()) diff --git a/src/main/java/de/ellpeck/naturesaura/misc/ColoredBlockHelper.java b/src/main/java/de/ellpeck/naturesaura/misc/ColoredBlockHelper.java index 3885dbdc..4b369251 100644 --- a/src/main/java/de/ellpeck/naturesaura/misc/ColoredBlockHelper.java +++ b/src/main/java/de/ellpeck/naturesaura/misc/ColoredBlockHelper.java @@ -1,8 +1,8 @@ package de.ellpeck.naturesaura.misc; -import net.minecraft.block.Block; -import net.minecraft.item.DyeColor; -import net.minecraft.util.ResourceLocation; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.level.block.Block; import net.minecraftforge.registries.ForgeRegistries; import java.util.ArrayList; @@ -24,7 +24,7 @@ public final class ColoredBlockHelper { private static List collectBlocks(String name) { List blocks = new ArrayList<>(); for (DyeColor color : DyeColor.values()) - blocks.add(ForgeRegistries.BLOCKS.getValue(new ResourceLocation(color.getString() + '_' + name))); + blocks.add(ForgeRegistries.BLOCKS.getValue(new ResourceLocation(color.getName() + '_' + name))); return Collections.unmodifiableList(blocks); } diff --git a/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java b/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java index d21cad12..7f4f11d2 100644 --- a/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java +++ b/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java @@ -5,7 +5,6 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.chunk.AuraChunk; import de.ellpeck.naturesaura.events.ClientEvents; import net.minecraft.core.BlockPos; -import net.minecraft.level.chunk.Chunk; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.level.Level; import net.minecraft.world.level.chunk.LevelChunk; @@ -40,7 +39,7 @@ public class PacketAuraChunk { int amount = buf.readInt(); for (int i = 0; i < amount; i++) { packet.drainSpots.put( - BlockPos.fromLong(buf.readLong()), + BlockPos.of(buf.readLong()), new MutableInt(buf.readInt()) ); } @@ -54,7 +53,7 @@ public class PacketAuraChunk { buf.writeInt(packet.drainSpots.size()); for (Map.Entry entry : packet.drainSpots.entrySet()) { - buf.writeLong(entry.getKey().toLong()); + buf.writeLong(entry.getKey().asLong()); buf.writeInt(entry.getValue().intValue()); } } diff --git a/src/main/java/de/ellpeck/naturesaura/packet/PacketClient.java b/src/main/java/de/ellpeck/naturesaura/packet/PacketClient.java index 8caf5551..30835505 100644 --- a/src/main/java/de/ellpeck/naturesaura/packet/PacketClient.java +++ b/src/main/java/de/ellpeck/naturesaura/packet/PacketClient.java @@ -3,19 +3,20 @@ package de.ellpeck.naturesaura.packet; import de.ellpeck.naturesaura.items.ItemRangeVisualizer; import de.ellpeck.naturesaura.items.ModItems; import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.PacketBuffer; -import net.minecraft.particles.ParticleTypes; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.SoundEvents; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.network.NetworkEvent; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class PacketClient { + private int type; private CompoundTag data; @@ -28,16 +29,16 @@ public class PacketClient { } - public static PacketClient fromBytes(PacketBuffer buf) { + public static PacketClient fromBytes(FriendlyByteBuf buf) { PacketClient client = new PacketClient(); client.type = buf.readByte(); - client.data = buf.readCompoundTag(); + client.data = buf.readNbt(); return client; } - public static void toBytes(PacketClient packet, PacketBuffer buf) { + public static void toBytes(PacketClient packet, FriendlyByteBuf buf) { buf.writeByte(packet.type); - buf.writeCompoundTag(packet.data); + buf.writeNbt(packet.data); } // lambda causes classloading issues on a server here @@ -51,12 +52,12 @@ public class PacketClient { switch (message.type) { case 0: // dimension rail visualization ResourceLocation goalDim = new ResourceLocation(message.data.getString("dim")); - BlockPos goalPos = BlockPos.fromLong(message.data.getLong("pos")); + BlockPos goalPos = BlockPos.of(message.data.getLong("pos")); ItemRangeVisualizer.visualize(mc.player, ItemRangeVisualizer.VISUALIZED_RAILS, goalDim, goalPos); case 1: - Entity entity = mc.level.getEntityByID(message.data.getInt("id")); - mc.particles.emitParticleAtEntity(entity, ParticleTypes.TOTEM_OF_UNDYING, 30); - mc.level.playSound(entity.getPosX(), entity.getPosY(), entity.getPosZ(), SoundEvents.ITEM_TOTEM_USE, entity.getSoundCategory(), 1.0F, 1.0F, false); + Entity entity = mc.level.getEntity(message.data.getInt("id")); + mc.particleEngine.createTrackingEmitter(entity, ParticleTypes.TOTEM_OF_UNDYING, 30); + mc.level.playLocalSound(entity.getX(), entity.getY(), entity.getZ(), SoundEvents.TOTEM_USE, entity.getSoundSource(), 1.0F, 1.0F, false); if (entity == mc.player) { mc.gameRenderer.displayItemActivation(new ItemStack(ModItems.DEATH_RING)); } diff --git a/src/main/java/de/ellpeck/naturesaura/packet/PacketHandler.java b/src/main/java/de/ellpeck/naturesaura/packet/PacketHandler.java index 9811cd70..cc830dde 100644 --- a/src/main/java/de/ellpeck/naturesaura/packet/PacketHandler.java +++ b/src/main/java/de/ellpeck/naturesaura/packet/PacketHandler.java @@ -4,7 +4,6 @@ import de.ellpeck.naturesaura.NaturesAura; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraftforge.network.NetworkRegistry; @@ -29,7 +28,7 @@ public final class PacketHandler { } public static void sendToAllAround(Level level, BlockPos pos, int range, Object message) { - network.send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(pos.getX(), pos.getY(), pos.getZ(), range, level.func_234923_W_())), message); + network.send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(pos.getX(), pos.getY(), pos.getZ(), range, level.dimension())), message); } public static void sendTo(Player player, Object message) { diff --git a/src/main/java/de/ellpeck/naturesaura/packet/PacketParticles.java b/src/main/java/de/ellpeck/naturesaura/packet/PacketParticles.java index f2fd45ce..8f93c72e 100644 --- a/src/main/java/de/ellpeck/naturesaura/packet/PacketParticles.java +++ b/src/main/java/de/ellpeck/naturesaura/packet/PacketParticles.java @@ -6,15 +6,12 @@ import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.entities.EntityStructureFinder; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.BiomeColors; import net.minecraft.core.BlockPos; -import net.minecraft.level.biome.BiomeColors; +import net.minecraft.core.particles.ItemParticleOption; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.particles.ItemParticleData; -import net.minecraft.particles.ParticleTypes; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; import net.minecraftforge.network.NetworkEvent; import java.util.function.BiConsumer; @@ -40,7 +37,7 @@ public class PacketParticles { } public static PacketParticles fromBytes(FriendlyByteBuf buf) { - PacketParticles packet = new PacketParticles(); + var packet = new PacketParticles(); packet.posX = buf.readFloat(); packet.posY = buf.readFloat(); @@ -48,7 +45,7 @@ public class PacketParticles { packet.type = Type.values()[buf.readByte()]; packet.data = new int[buf.readByte()]; - for (int i = 0; i < packet.data.length; i++) { + for (var i = 0; i < packet.data.length; i++) { packet.data[i] = buf.readInt(); } @@ -62,7 +59,7 @@ public class PacketParticles { buf.writeByte(packet.type.ordinal()); buf.writeByte(packet.data.length); - for (int i : packet.data) { + for (var i : packet.data) { buf.writeInt(i); } } @@ -83,136 +80,136 @@ public class PacketParticles { public enum Type { TR_GOLD_POWDER((message, level) -> { - BlockPos pos = new BlockPos(message.posX, message.posY, message.posZ); + var pos = new BlockPos(message.posX, message.posY, message.posZ); Multiblocks.TREE_RITUAL.forEach(pos, 'G', (dustPos, matcher) -> { - BlockState state = level.getBlockState(dustPos); - AABB box = state.getShape(level, dustPos).getBoundingBox(); + var state = level.getBlockState(dustPos); + var box = state.getShape(level, dustPos).bounds(); NaturesAuraAPI.instance().spawnMagicParticle( - dustPos.getX() + box.minX + (box.maxX - box.minX) * level.rand.nextFloat(), + dustPos.getX() + box.minX + (box.maxX - box.minX) * level.random.nextFloat(), dustPos.getY() + 0.1F, - dustPos.getZ() + box.minZ + (box.maxZ - box.minZ) * level.rand.nextFloat(), - (float) level.rand.nextGaussian() * 0.02F, - level.rand.nextFloat() * 0.01F + 0.02F, - (float) level.rand.nextGaussian() * 0.02F, + dustPos.getZ() + box.minZ + (box.maxZ - box.minZ) * level.random.nextFloat(), + (float) level.random.nextGaussian() * 0.02F, + level.random.nextFloat() * 0.01F + 0.02F, + (float) level.random.nextGaussian() * 0.02F, 0xf4cb42, 2F, 50, 0F, false, true); return true; }); }), TR_CONSUME_ITEM((message, level) -> { - for (int i = level.rand.nextInt(20) + 10; i >= 0; i--) { + for (var i = level.random.nextInt(20) + 10; i >= 0; i--) { NaturesAuraAPI.instance().spawnMagicParticle( message.posX + 0.5F, message.posY + 0.9F, message.posZ + 0.5F, - (float) level.rand.nextGaussian() * 0.04F, level.rand.nextFloat() * 0.04F, (float) level.rand.nextGaussian() * 0.04F, + (float) level.random.nextGaussian() * 0.04F, level.random.nextFloat() * 0.04F, (float) level.random.nextGaussian() * 0.04F, 0x89cc37, 1.5F, 25, 0F, false, true); } }), TR_DISAPPEAR((message, level) -> { - for (int i = level.rand.nextInt(5) + 3; i >= 0; i--) { + for (var i = level.random.nextInt(5) + 3; i >= 0; i--) { NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextFloat(), message.posY + level.rand.nextFloat(), message.posZ + level.rand.nextFloat(), + message.posX + level.random.nextFloat(), message.posY + level.random.nextFloat(), message.posZ + level.random.nextFloat(), 0F, 0F, 0F, 0x33FF33, 1F, 50, 0F, false, true); } }), TR_SPAWN_RESULT((message, level) -> { - for (int i = level.rand.nextInt(10) + 10; i >= 0; i--) { + for (var i = level.random.nextInt(10) + 10; i >= 0; i--) { NaturesAuraAPI.instance().spawnMagicParticle( message.posX, message.posY, message.posZ, - level.rand.nextGaussian() * 0.1F, level.rand.nextGaussian() * 0.1F, level.rand.nextGaussian() * 0.1F, + level.random.nextGaussian() * 0.1F, level.random.nextGaussian() * 0.1F, level.random.nextGaussian() * 0.1F, 0x89cc37, 2F, 100, 0F, true, true); } }), ALTAR_CONVERSION((message, level) -> { - int color = message.data[0]; - for (int i = level.rand.nextInt(5) + 2; i >= 0; i--) { + var color = message.data[0]; + for (var i = level.random.nextInt(5) + 2; i >= 0; i--) { NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 0.25F + level.rand.nextFloat() * 0.5F, - message.posY + 0.9F + 0.25F * level.rand.nextFloat(), - message.posZ + 0.25F + level.rand.nextFloat() * 0.5F, - level.rand.nextGaussian() * 0.02F, level.rand.nextFloat() * 0.02F, level.rand.nextGaussian() * 0.02F, - color, level.rand.nextFloat() * 1.5F + 0.75F, 20, 0F, false, true); + message.posX + 0.25F + level.random.nextFloat() * 0.5F, + message.posY + 0.9F + 0.25F * level.random.nextFloat(), + message.posZ + 0.25F + level.random.nextFloat() * 0.5F, + level.random.nextGaussian() * 0.02F, level.random.nextFloat() * 0.02F, level.random.nextGaussian() * 0.02F, + color, level.random.nextFloat() * 1.5F + 0.75F, 20, 0F, false, true); } }), POTION_GEN((message, level) -> { - int color = message.data[0]; - boolean releaseAura = message.data[1] > 0; - for (int i = level.rand.nextInt(5) + 5; i >= 0; i--) { + var color = message.data[0]; + var releaseAura = message.data[1] > 0; + for (var i = level.random.nextInt(5) + 5; i >= 0; i--) { NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextFloat(), + message.posX + level.random.nextFloat(), message.posY + 1.1F, - message.posZ + level.rand.nextFloat(), - level.rand.nextGaussian() * 0.01F, level.rand.nextFloat() * 0.1F, level.rand.nextGaussian() * 0.01F, - color, 2F + level.rand.nextFloat(), 40, 0F, true, true); + message.posZ + level.random.nextFloat(), + level.random.nextGaussian() * 0.01F, level.random.nextFloat() * 0.1F, level.random.nextGaussian() * 0.01F, + color, 2F + level.random.nextFloat(), 40, 0F, true, true); if (releaseAura) - for (int x = -1; x <= 1; x += 2) - for (int z = -1; z <= 1; z += 2) { + for (var x = -1; x <= 1; x += 2) + for (var z = -1; z <= 1; z += 2) { NaturesAuraAPI.instance().spawnMagicParticle( message.posX + x * 3 + 0.5F, message.posY + 2.5, message.posZ + z * 3 + 0.5F, - level.rand.nextGaussian() * 0.02F, - level.rand.nextFloat() * 0.04F, - level.rand.nextGaussian() * 0.02F, - 0xd6340c, 1F + level.rand.nextFloat() * 2F, 75, 0F, true, true); + level.random.nextGaussian() * 0.02F, + level.random.nextFloat() * 0.04F, + level.random.nextGaussian() * 0.02F, + 0xd6340c, 1F + level.random.nextFloat() * 2F, 75, 0F, true, true); } } }), PLANT_BOOST((message, level) -> { - for (int i = level.rand.nextInt(20) + 15; i >= 0; i--) + for (var i = level.random.nextInt(20) + 15; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextFloat(), - message.posY + 0.25F + level.rand.nextFloat() * 0.5F, - message.posZ + level.rand.nextFloat(), - 0F, level.rand.nextFloat() * 0.02F, 0F, - 0x5ccc30, 1F + level.rand.nextFloat() * 2F, 50, 0F, false, true); + message.posX + level.random.nextFloat(), + message.posY + 0.25F + level.random.nextFloat() * 0.5F, + message.posZ + level.random.nextFloat(), + 0F, level.random.nextFloat() * 0.02F, 0F, + 0x5ccc30, 1F + level.random.nextFloat() * 2F, 50, 0F, false, true); }), FLOWER_GEN_CONSUME((message, level) -> { - int color = message.data[0]; - for (int i = level.rand.nextInt(10) + 10; i >= 0; i--) + var color = message.data[0]; + for (var i = level.random.nextInt(10) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 0.25F + level.rand.nextFloat() * 0.5F, - message.posY + 0.25F + level.rand.nextFloat() * 0.5F, - message.posZ + 0.25F + level.rand.nextFloat() * 0.5F, - level.rand.nextGaussian() * 0.02F, - level.rand.nextGaussian() * 0.02F, - level.rand.nextGaussian() * 0.02F, - color, level.rand.nextFloat() * 2F + 1F, 25, 0F, false, true); + message.posX + 0.25F + level.random.nextFloat() * 0.5F, + message.posY + 0.25F + level.random.nextFloat() * 0.5F, + message.posZ + 0.25F + level.random.nextFloat() * 0.5F, + level.random.nextGaussian() * 0.02F, + level.random.nextGaussian() * 0.02F, + level.random.nextGaussian() * 0.02F, + color, level.random.nextFloat() * 2F + 1F, 25, 0F, false, true); }), FLOWER_GEN_AURA_CREATION((message, level) -> { - for (int i = level.rand.nextInt(10) + 5; i >= 0; i--) + for (var i = level.random.nextInt(10) + 5; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 0.25F + level.rand.nextFloat() * 0.5F, + message.posX + 0.25F + level.random.nextFloat() * 0.5F, message.posY + 1.01F, - message.posZ + 0.25F + level.rand.nextFloat() * 0.5F, - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.04F + 0.02F, - level.rand.nextGaussian() * 0.01F, - 0x5ccc30, 1F + level.rand.nextFloat() * 1.5F, 40, 0F, false, true); + message.posZ + 0.25F + level.random.nextFloat() * 0.5F, + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.04F + 0.02F, + level.random.nextGaussian() * 0.01F, + 0x5ccc30, 1F + level.random.nextFloat() * 1.5F, 40, 0F, false, true); }), PLACER_PLACING((message, level) -> { - for (int i = level.rand.nextInt(20) + 20; i >= 0; i--) { - boolean side = level.rand.nextBoolean(); - float x = side ? level.rand.nextFloat() : level.rand.nextBoolean() ? 1.1F : -0.1F; - float z = !side ? level.rand.nextFloat() : level.rand.nextBoolean() ? 1.1F : -0.1F; + for (var i = level.random.nextInt(20) + 20; i >= 0; i--) { + var side = level.random.nextBoolean(); + var x = side ? level.random.nextFloat() : level.random.nextBoolean() ? 1.1F : -0.1F; + var z = !side ? level.random.nextFloat() : level.random.nextBoolean() ? 1.1F : -0.1F; NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + x, message.posY + 0.1F + level.rand.nextFloat() * 0.98F, message.posZ + z, + message.posX + x, message.posY + 0.1F + level.random.nextFloat() * 0.98F, message.posZ + z, 0F, 0F, 0F, - 0xad7a37, level.rand.nextFloat() + 1F, 50, 0F, true, true); + 0xad7a37, level.random.nextFloat() + 1F, 50, 0F, true, true); } }), HOPPER_UPGRADE((message, level) -> { - for (int i = level.rand.nextInt(20) + 10; i >= 0; i--) + for (var i = level.random.nextInt(20) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( message.posX, message.posY + 0.45F, message.posZ, - level.rand.nextGaussian() * 0.015F, - level.rand.nextGaussian() * 0.015F, - level.rand.nextGaussian() * 0.015F, - 0xdde7ff, level.rand.nextFloat() + 1F, 30, -0.06F, true, true); + level.random.nextGaussian() * 0.015F, + level.random.nextGaussian() * 0.015F, + level.random.nextGaussian() * 0.015F, + 0xdde7ff, level.random.nextFloat() + 1F, 30, -0.06F, true, true); }), SHOCKWAVE_CREATOR((message, level) -> { - for (int i = 0; i < 360; i += 2) { - double rad = Math.toRadians(i); + for (var i = 0; i < 360; i += 2) { + var rad = Math.toRadians(i); NaturesAuraAPI.instance().spawnMagicParticle( message.posX, message.posY + 0.01F, message.posZ, (float) Math.sin(rad) * 0.65F, @@ -222,359 +219,359 @@ public class PacketParticles { } }), OAK_GENERATOR((message, level) -> { - int sapX = message.data[0]; - int sapY = message.data[1]; - int sapZ = message.data[2]; - boolean releaseAura = message.data[3] > 0; - for (int i = level.rand.nextInt(20) + 10; i >= 0; i--) + var sapX = message.data[0]; + var sapY = message.data[1]; + var sapZ = message.data[2]; + var releaseAura = message.data[3] > 0; + for (var i = level.random.nextInt(20) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnParticleStream( - sapX + 0.5F + (float) level.rand.nextGaussian() * 3F, - sapY + 0.5F + level.rand.nextFloat() * 4F, - sapZ + 0.5F + (float) level.rand.nextGaussian() * 3F, + sapX + 0.5F + (float) level.random.nextGaussian() * 3F, + sapY + 0.5F + level.random.nextFloat() * 4F, + sapZ + 0.5F + (float) level.random.nextGaussian() * 3F, message.posX + 0.5F, message.posY + 0.5F, message.posZ + 0.5F, - 0.6F, BiomeColors.getGrassColor(level, new BlockPos(sapX, sapY, sapZ)), 1.5F); + 0.6F, BiomeColors.getAverageGrassColor(level, new BlockPos(sapX, sapY, sapZ)), 1.5F); if (releaseAura) - for (int i = level.rand.nextInt(10) + 10; i >= 0; i--) + for (var i = level.random.nextInt(10) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 0.25F + level.rand.nextFloat() * 0.5F, + message.posX + 0.25F + level.random.nextFloat() * 0.5F, message.posY + 1.01F, - message.posZ + 0.25F + level.rand.nextFloat() * 0.5F, - level.rand.nextGaussian() * 0.03F, - level.rand.nextFloat() * 0.04F + 0.04F, - level.rand.nextGaussian() * 0.03F, - 0x5ccc30, 1F + level.rand.nextFloat() * 1.5F, 60, 0F, false, true); + message.posZ + 0.25F + level.random.nextFloat() * 0.5F, + level.random.nextGaussian() * 0.03F, + level.random.nextFloat() * 0.04F + 0.04F, + level.random.nextGaussian() * 0.03F, + 0x5ccc30, 1F + level.random.nextFloat() * 1.5F, 60, 0F, false, true); }), OFFERING_TABLE((message, level) -> { - int genX = message.data[0]; - int genY = message.data[1]; - int genZ = message.data[2]; - for (int i = level.rand.nextInt(20) + 10; i >= 0; i--) + var genX = message.data[0]; + var genY = message.data[1]; + var genZ = message.data[2]; + for (var i = level.random.nextInt(20) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( message.posX, message.posY + 0.5F, message.posZ, - level.rand.nextGaussian() * 0.02F, - level.rand.nextFloat() * 0.25F, - level.rand.nextGaussian() * 0.02F, + level.random.nextGaussian() * 0.02F, + level.random.nextFloat() * 0.25F, + level.random.nextGaussian() * 0.02F, 0xffadfd, 1.5F, 40, 0F, false, true); - for (int i = level.rand.nextInt(50) + 30; i >= 0; i--) + for (var i = level.random.nextInt(50) + 30; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - genX + 0.5F + level.rand.nextGaussian() * 2.5F, + genX + 0.5F + level.random.nextGaussian() * 2.5F, genY + 0.1F, - genZ + 0.5F + level.rand.nextGaussian() * 2.5F, - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.01F, - level.rand.nextGaussian() * 0.01F, + genZ + 0.5F + level.random.nextGaussian() * 2.5F, + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.01F, + level.random.nextGaussian() * 0.01F, 0xd3e4ff, 1.5F, 150, 0F, false, true); }), PICKUP_STOPPER((message, level) -> { NaturesAuraAPI.instance().spawnMagicParticle( message.posX, message.posY + 0.4F, message.posZ, - level.rand.nextGaussian() * 0.005F, - level.rand.nextFloat() * 0.005F, - level.rand.nextGaussian() * 0.005F, + level.random.nextGaussian() * 0.005F, + level.random.nextFloat() * 0.005F, + level.random.nextGaussian() * 0.005F, 0xcc3116, 1.5F, 40, 0F, false, true); }), SPAWN_LAMP((message, level) -> { - for (int i = level.rand.nextInt(5) + 5; i >= 0; i--) + for (var i = level.random.nextInt(5) + 5; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 0.3F + level.rand.nextFloat() * 0.4F, - message.posY + 0.15F + level.rand.nextFloat() * 0.5F, - message.posZ + 0.3F + level.rand.nextFloat() * 0.4F, + message.posX + 0.3F + level.random.nextFloat() * 0.4F, + message.posY + 0.15F + level.random.nextFloat() * 0.5F, + message.posZ + 0.3F + level.random.nextFloat() * 0.4F, 0F, 0F, 0F, 0xf4a142, 1F, 30, 0F, false, true); }), ANIMAL_GEN_CREATE((message, level) -> { - for (int i = level.rand.nextInt(5) + 5; i >= 0; i--) + for (var i = level.random.nextInt(5) + 5; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 0.25F + level.rand.nextFloat() * 0.5F, + message.posX + 0.25F + level.random.nextFloat() * 0.5F, message.posY + 1.01F, - message.posZ + 0.25F + level.rand.nextFloat() * 0.5F, - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.04F + 0.02F, - level.rand.nextGaussian() * 0.01F, - 0xd13308, 1F + level.rand.nextFloat() * 1.5F, 40, 0F, false, true); + message.posZ + 0.25F + level.random.nextFloat() * 0.5F, + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.04F + 0.02F, + level.random.nextGaussian() * 0.01F, + 0xd13308, 1F + level.random.nextFloat() * 1.5F, 40, 0F, false, true); }), ANIMAL_GEN_CONSUME((message, level) -> { - boolean child = message.data[0] > 0; - float height = message.data[1] / 10F; - int genX = message.data[2]; - int genY = message.data[3]; - int genZ = message.data[4]; - for (int i = child ? level.rand.nextInt(10) + 10 : level.rand.nextInt(20) + 20; i >= 0; i--) + var child = message.data[0] > 0; + var height = message.data[1] / 10F; + var genX = message.data[2]; + var genY = message.data[3]; + var genZ = message.data[4]; + for (var i = child ? level.random.nextInt(10) + 10 : level.random.nextInt(20) + 20; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextGaussian() * 0.25F, - message.posY + height * 0.75F + level.rand.nextGaussian() * 0.25F, - message.posZ + level.rand.nextGaussian() * 0.25F, - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.01F, - level.rand.nextGaussian() * 0.01F, - 0x42f4c8, level.rand.nextFloat() * (child ? 0.5F : 2F) + 1F, level.rand.nextInt(30) + 40, 0F, true, true); + message.posX + level.random.nextGaussian() * 0.25F, + message.posY + height * 0.75F + level.random.nextGaussian() * 0.25F, + message.posZ + level.random.nextGaussian() * 0.25F, + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.01F, + level.random.nextGaussian() * 0.01F, + 0x42f4c8, level.random.nextFloat() * (child ? 0.5F : 2F) + 1F, level.random.nextInt(30) + 40, 0F, true, true); NaturesAuraAPI.instance().spawnParticleStream( message.posX, message.posY + height * 0.75F, message.posZ, genX + 0.5F, genY + 0.5F, genZ + 0.5F, 0.15F, 0x41c4f4, child ? 1.5F : 3F); }), END_FLOWER_DECAY((message, level) -> { - int color = message.data[0]; - for (int i = level.rand.nextInt(10) + 20; i >= 0; i--) + var color = message.data[0]; + for (var i = level.random.nextInt(10) + 20; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextFloat(), - message.posY + level.rand.nextFloat(), - message.posZ + level.rand.nextFloat(), - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.01F, - level.rand.nextGaussian() * 0.01F, + message.posX + level.random.nextFloat(), + message.posY + level.random.nextFloat(), + message.posZ + level.random.nextFloat(), + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.01F, + level.random.nextGaussian() * 0.01F, color, 1.5F, 80, 0F, true, true); }), ANIMAL_SPAWNER((message, level) -> { - for (int i = level.rand.nextInt(20) + 10; i >= 0; i--) + for (var i = level.random.nextInt(20) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( message.posX, message.posY + 0.5F, message.posZ, - level.rand.nextGaussian() * 0.02F, - level.rand.nextFloat() * 0.02F, - level.rand.nextGaussian() * 0.02F, + level.random.nextGaussian() * 0.02F, + level.random.nextFloat() * 0.02F, + level.random.nextGaussian() * 0.02F, 0x16b7b2, 1.5F, 40, 0F, false, true); }), RF_CONVERTER((message, level) -> { - for (int i = level.rand.nextInt(5) + 2; i >= 0; i--) + for (var i = level.random.nextInt(5) + 2; i >= 0; i--) Multiblocks.RF_CONVERTER.forEach(new BlockPos(message.posX, message.posY, message.posZ), 'R', (blockPos, matcher) -> { - if (level.rand.nextFloat() < 0.35F) { + if (level.random.nextFloat() < 0.35F) { NaturesAuraAPI.instance().spawnParticleStream( - blockPos.getX() + level.rand.nextFloat(), - blockPos.getY() + level.rand.nextFloat(), - blockPos.getZ() + level.rand.nextFloat(), - message.posX + level.rand.nextFloat(), - message.posY + level.rand.nextFloat(), - message.posZ + level.rand.nextFloat(), + blockPos.getX() + level.random.nextFloat(), + blockPos.getY() + level.random.nextFloat(), + blockPos.getZ() + level.random.nextFloat(), + message.posX + level.random.nextFloat(), + message.posY + level.random.nextFloat(), + message.posZ + level.random.nextFloat(), 0.05F, 0xff1a05, 1.5F); } return true; }); }), END_FLOWER_CONSUME((message, level) -> { - int color = message.data[0]; - for (int i = level.rand.nextInt(20) + 10; i >= 0; i--) + var color = message.data[0]; + for (var i = level.random.nextInt(20) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( message.posX, message.posY + 0.5F, message.posZ, - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.01F, - level.rand.nextGaussian() * 0.01F, + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.01F, + level.random.nextGaussian() * 0.01F, color, 1.5F, 40, 0F, false, true); }), MOVER_CART((message, level) -> { - float motionX = message.data[0] / 100F; - float motionY = message.data[1] / 100F; - float motionZ = message.data[2] / 100F; - for (int i = level.rand.nextInt(60) + 30; i >= 0; i--) + var motionX = message.data[0] / 100F; + var motionY = message.data[1] / 100F; + var motionZ = message.data[2] / 100F; + for (var i = level.random.nextInt(60) + 30; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextGaussian() * 10F, - message.posY + level.rand.nextGaussian() * 10F, - message.posZ + level.rand.nextGaussian() * 10F, + message.posX + level.random.nextGaussian() * 10F, + message.posY + level.random.nextGaussian() * 10F, + message.posZ + level.random.nextGaussian() * 10F, motionX * 0.2F, motionY * 0.2F, motionZ * 0.2F, IAuraType.forLevel(level).getColor(), 2F, 30, 0F, false, true); }), MOSS_GENERATOR((message, level) -> { - for (int i = level.rand.nextInt(30) + 30; i >= 0; i--) { - int side = level.rand.nextInt(3); - float x = side != 0 ? level.rand.nextFloat() : level.rand.nextBoolean() ? 1.1F : -0.1F; - float y = side != 1 ? level.rand.nextFloat() : level.rand.nextBoolean() ? 1.1F : -0.1F; - float z = side != 2 ? level.rand.nextFloat() : level.rand.nextBoolean() ? 1.1F : -0.1F; + for (var i = level.random.nextInt(30) + 30; i >= 0; i--) { + var side = level.random.nextInt(3); + var x = side != 0 ? level.random.nextFloat() : level.random.nextBoolean() ? 1.1F : -0.1F; + var y = side != 1 ? level.random.nextFloat() : level.random.nextBoolean() ? 1.1F : -0.1F; + var z = side != 2 ? level.random.nextFloat() : level.random.nextBoolean() ? 1.1F : -0.1F; NaturesAuraAPI.instance().spawnMagicParticle( message.posX + x, message.posY + y, message.posZ + z, 0F, 0F, 0F, - 0x184c0d, level.rand.nextFloat() + 1F, 30, 0F, true, true); + 0x184c0d, level.random.nextFloat() + 1F, 30, 0F, true, true); } - for (int i = level.rand.nextInt(20) + 10; i >= 0; i--) + for (var i = level.random.nextInt(20) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextFloat(), + message.posX + level.random.nextFloat(), message.posY + 1F, - message.posZ + level.rand.nextFloat(), - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.04F + 0.02F, - level.rand.nextGaussian() * 0.01F, - 0x5ccc30, 1F + level.rand.nextFloat() * 1.5F, 40, 0F, true, true); + message.posZ + level.random.nextFloat(), + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.04F + 0.02F, + level.random.nextGaussian() * 0.01F, + 0x5ccc30, 1F + level.random.nextFloat() * 1.5F, 40, 0F, true, true); }), FIREWORK_GEN((message, level) -> { - int goalX = message.data[0]; - int goalY = message.data[1]; - int goalZ = message.data[2]; + var goalX = message.data[0]; + var goalY = message.data[1]; + var goalZ = message.data[2]; NaturesAuraAPI.instance().setParticleSpawnRange(64); - for (int i = level.rand.nextInt(30) + 30; i >= 0; i--) + for (var i = level.random.nextInt(30) + 30; i >= 0; i--) NaturesAuraAPI.instance().spawnParticleStream( - message.posX + (float) level.rand.nextGaussian(), - message.posY + (float) level.rand.nextGaussian(), - message.posZ + (float) level.rand.nextGaussian(), - goalX + 0.25F + level.rand.nextFloat() * 0.5F, - goalY + 0.25F + level.rand.nextFloat() * 0.5F, - goalZ + 0.25F + level.rand.nextFloat() * 0.5F, - 0.65F, message.data[3 + level.rand.nextInt(message.data.length - 3)], 1F); + message.posX + (float) level.random.nextGaussian(), + message.posY + (float) level.random.nextGaussian(), + message.posZ + (float) level.random.nextGaussian(), + goalX + 0.25F + level.random.nextFloat() * 0.5F, + goalY + 0.25F + level.random.nextFloat() * 0.5F, + goalZ + 0.25F + level.random.nextFloat() * 0.5F, + 0.65F, message.data[3 + level.random.nextInt(message.data.length - 3)], 1F); NaturesAuraAPI.instance().setParticleSpawnRange(32); }), DIMENSION_RAIL((message, level) -> { - float width = message.data[0] / 100F; - float height = message.data[1] / 100F; - float depth = message.data[2] / 100F; - for (int i = level.rand.nextInt(100) + 50; i >= 0; i--) + var width = message.data[0] / 100F; + var height = message.data[1] / 100F; + var depth = message.data[2] / 100F; + for (var i = level.random.nextInt(100) + 50; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextFloat() * width, - message.posY + level.rand.nextFloat() * height, - message.posZ + level.rand.nextFloat() * depth, - 0F, 0F, 0F, 0xd60cff, 1F + level.rand.nextFloat(), 60, 0F, false, true); + message.posX + level.random.nextFloat() * width, + message.posY + level.random.nextFloat() * height, + message.posZ + level.random.nextFloat() * depth, + 0F, 0F, 0F, 0xd60cff, 1F + level.random.nextFloat(), 60, 0F, false, true); }), PROJECTILE_GEN((message, level) -> { - int x = message.data[0]; - int y = message.data[1]; - int z = message.data[2]; - for (int i = level.rand.nextInt(10) + 5; i >= 0; i--) + var x = message.data[0]; + var y = message.data[1]; + var z = message.data[2]; + for (var i = level.random.nextInt(10) + 5; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - x + 0.25F + level.rand.nextFloat() * 0.5F, + x + 0.25F + level.random.nextFloat() * 0.5F, y + 1.01F, - z + 0.25F + level.rand.nextFloat() * 0.5F, - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.04F + 0.02F, - level.rand.nextGaussian() * 0.01F, - 0x5ccc30, 1F + level.rand.nextFloat() * 1.5F, 40, 0F, false, true); - for (int i = level.rand.nextInt(10) + 10; i >= 0; i--) + z + 0.25F + level.random.nextFloat() * 0.5F, + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.04F + 0.02F, + level.random.nextGaussian() * 0.01F, + 0x5ccc30, 1F + level.random.nextFloat() * 1.5F, 40, 0F, false, true); + for (var i = level.random.nextInt(10) + 10; i >= 0; i--) level.addParticle(ParticleTypes.FIREWORK, message.posX, message.posY, message.posZ, - level.rand.nextGaussian() * 0.03F, - level.rand.nextGaussian() * 0.03F, - level.rand.nextGaussian() * 0.03F); + level.random.nextGaussian() * 0.03F, + level.random.nextGaussian() * 0.03F, + level.random.nextGaussian() * 0.03F); }), BLAST_FURNACE_BOOSTER((message, level) -> { - boolean worked = message.data[0] > 0; - for (int i = level.rand.nextInt(10) + 5; i >= 0; i--) + var worked = message.data[0] > 0; + for (var i = level.random.nextInt(10) + 5; i >= 0; i--) level.addParticle(ParticleTypes.CAMPFIRE_COSY_SMOKE, - message.posX + 5 / 16F + level.rand.nextInt(6) / 16F, + message.posX + 5 / 16F + level.random.nextInt(6) / 16F, message.posY + 0.6F, - message.posZ + 5 / 16F + level.rand.nextInt(6) / 16F, - level.rand.nextGaussian() * 0.005F, - level.rand.nextFloat() * 0.02F + 0.01F, - level.rand.nextGaussian() * 0.005F); + message.posZ + 5 / 16F + level.random.nextInt(6) / 16F, + level.random.nextGaussian() * 0.005F, + level.random.nextFloat() * 0.02F + 0.01F, + level.random.nextGaussian() * 0.005F); if (worked) { - BlockPos pos = new BlockPos(message.posX, message.posY, message.posZ); - int color = IAuraChunk.getAuraChunk(level, pos).getType().getColor(); - for (int i = level.rand.nextInt(10) + 10; i >= 0; i--) + var pos = new BlockPos(message.posX, message.posY, message.posZ); + var color = IAuraChunk.getAuraChunk(level, pos).getType().getColor(); + for (var i = level.random.nextInt(10) + 10; i >= 0; i--) NaturesAuraAPI.instance().spawnParticleStream( - message.posX + (float) level.rand.nextGaussian() * 5, - message.posY + level.rand.nextFloat() * 5, - message.posZ + (float) level.rand.nextGaussian() * 5, + message.posX + (float) level.random.nextGaussian() * 5, + message.posY + level.random.nextFloat() * 5, + message.posZ + (float) level.random.nextGaussian() * 5, message.posX + 0.5F, message.posY + 0.5F, message.posZ + 0.5F, - 0.25F, color, 0.5F + level.rand.nextFloat() + 0.25F, color, 0.5F + level.random.nextFloat() ); } }), ANIMAL_CONTAINER((message, level) -> { - for (int i = level.rand.nextInt(2) + 1; i > 0; i--) + for (var i = level.random.nextInt(2) + 1; i > 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + level.rand.nextGaussian() * 0.15F, - message.posY - level.rand.nextFloat() * 0.5F, - message.posZ + level.rand.nextGaussian() * 0.15F, - 0, 0, 0, 0x42e9f5, 1 + level.rand.nextFloat() * 2, 40, 0, false, true + message.posX + level.random.nextGaussian() * 0.15F, + message.posY - level.random.nextFloat() * 0.5F, + message.posZ + level.random.nextGaussian() * 0.15F, + 0, 0, 0, 0x42e9f5, 1 + level.random.nextFloat() * 2, 40, 0, false, true ); }), SNOW_CREATOR((message, level) -> { - BlockPos pos = new BlockPos(message.posX, message.posY, message.posZ); - int color = IAuraChunk.getAuraChunk(level, pos).getType().getColor(); - for (int i = level.rand.nextInt(3) + 1; i > 0; i--) + var pos = new BlockPos(message.posX, message.posY, message.posZ); + var color = IAuraChunk.getAuraChunk(level, pos).getType().getColor(); + for (var i = level.random.nextInt(3) + 1; i > 0; i--) NaturesAuraAPI.instance().spawnParticleStream( - message.posX + (float) level.rand.nextGaussian() * 5, - message.posY + level.rand.nextFloat() * 5, - message.posZ + (float) level.rand.nextGaussian() * 5, + message.posX + (float) level.random.nextGaussian() * 5, + message.posY + level.random.nextFloat() * 5, + message.posZ + (float) level.random.nextGaussian() * 5, message.posX + 0.5F, message.posY + 0.5F, message.posZ + 0.5F, - 0.25F, color, 0.5F + level.rand.nextFloat() + 0.25F, color, 0.5F + level.random.nextFloat() ); }), CHORUS_GENERATOR((message, level) -> { - int chorusX = message.data[0]; - int chorusY = message.data[1]; - int chorusZ = message.data[2]; - for (int i = level.rand.nextInt(5) + 3; i >= 0; i--) + var chorusX = message.data[0]; + var chorusY = message.data[1]; + var chorusZ = message.data[2]; + for (var i = level.random.nextInt(5) + 3; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - chorusX + level.rand.nextFloat(), chorusY + level.rand.nextFloat(), chorusZ + level.rand.nextFloat(), + chorusX + level.random.nextFloat(), chorusY + level.random.nextFloat(), chorusZ + level.random.nextFloat(), 0F, 0F, 0F, - 0xbb0be3, 1F + level.rand.nextFloat(), 50, 0F, false, true); - for (int i = level.rand.nextInt(5) + 5; i >= 0; i--) + 0xbb0be3, 1F + level.random.nextFloat(), 50, 0F, false, true); + for (var i = level.random.nextInt(5) + 5; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 0.25F + level.rand.nextFloat() * 0.5F, + message.posX + 0.25F + level.random.nextFloat() * 0.5F, message.posY + 1.01F, - message.posZ + 0.25F + level.rand.nextFloat() * 0.5F, - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.04F + 0.02F, - level.rand.nextGaussian() * 0.01F, - IAuraType.forLevel(level).getColor(), 1F + level.rand.nextFloat() * 1.5F, 40, 0F, false, true); + message.posZ + 0.25F + level.random.nextFloat() * 0.5F, + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.04F + 0.02F, + level.random.nextGaussian() * 0.01F, + IAuraType.forLevel(level).getColor(), 1F + level.random.nextFloat() * 1.5F, 40, 0F, false, true); }), TIMER_RESET((message, level) -> { - int color = message.data[0]; - for (int i = level.rand.nextInt(10) + 15; i >= 0; i--) + var color = message.data[0]; + for (var i = level.random.nextInt(10) + 15; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 5 / 16F + level.rand.nextFloat() * 6 / 16F, - message.posY + 2 / 16F + level.rand.nextFloat() * 8 / 16F, - message.posZ + 5 / 16F + level.rand.nextFloat() * 6 / 16F, - 0, 0, 0, color, 2, 40 + level.rand.nextInt(20), 0, false, true); + message.posX + 5 / 16F + level.random.nextFloat() * 6 / 16F, + message.posY + 2 / 16F + level.random.nextFloat() * 8 / 16F, + message.posZ + 5 / 16F + level.random.nextFloat() * 6 / 16F, + 0, 0, 0, color, 2, 40 + level.random.nextInt(20), 0, false, true); }), STRUCTURE_FINDER((message, level) -> { - EntityStructureFinder entity = (EntityStructureFinder) level.getEntityByID(message.data[0]); - LevelRenderer renderer = Minecraft.getInstance().levelRenderer; + var entity = (EntityStructureFinder) level.getEntity(message.data[0]); + var renderer = Minecraft.getInstance().levelRenderer; - double d0 = message.posX + 0.5D; + var d0 = message.posX + 0.5D; double d13 = message.posY; - double d18 = message.posZ + 0.5D; - for (int j2 = 0; j2 < 8; ++j2) - renderer.addParticle(new ItemParticleData(ParticleTypes.ITEM, entity.getItem()), false, d0, d13, d18, level.rand.nextGaussian() * 0.15D, level.rand.nextDouble() * 0.2D, level.rand.nextGaussian() * 0.15D); + var d18 = message.posZ + 0.5D; + for (var j2 = 0; j2 < 8; ++j2) + renderer.addParticle(new ItemParticleOption(ParticleTypes.ITEM, entity.getItem()), false, d0, d13, d18, level.random.nextGaussian() * 0.15D, level.random.nextDouble() * 0.2D, level.random.nextGaussian() * 0.15D); - int color = entity.getDataManager().get(EntityStructureFinder.COLOR); - for (double d24 = 0.0D; d24 < (Math.PI * 2D); d24 += 0.15707963267948966D) { + int color = entity.getEntityData().get(EntityStructureFinder.COLOR); + for (var d24 = 0.0D; d24 < (Math.PI * 2D); d24 += 0.15707963267948966D) { NaturesAuraAPI.instance().spawnMagicParticle(d0 + Math.cos(d24) * 5.0D, d13 - 0.4D, d18 + Math.sin(d24) * 5.0D, Math.cos(d24) * -2, 0.0D, Math.sin(d24) * -2, color, 2, 60, 0, false, true); NaturesAuraAPI.instance().spawnMagicParticle(d0 + Math.cos(d24) * 5.0D, d13 - 0.4D, d18 + Math.sin(d24) * 5.0D, Math.cos(d24) * -2.5, 0.0D, Math.sin(d24) * -2.5, color, 2, 60, 0, false, true); } }), SLIME_SPLIT_GEN_CREATE((message, level) -> { - for (int i = level.rand.nextInt(5) + 5; i >= 0; i--) + for (var i = level.random.nextInt(5) + 5; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + 0.25F + level.rand.nextFloat() * 0.5F, + message.posX + 0.25F + level.random.nextFloat() * 0.5F, message.posY + 1.01F, - message.posZ + 0.25F + level.rand.nextFloat() * 0.5F, - level.rand.nextGaussian() * 0.01F, - level.rand.nextFloat() * 0.04F + 0.02F, - level.rand.nextGaussian() * 0.01F, - message.data[0], 1F + level.rand.nextFloat() * 1.5F, 40, 0F, false, true); + message.posZ + 0.25F + level.random.nextFloat() * 0.5F, + level.random.nextGaussian() * 0.01F, + level.random.nextFloat() * 0.04F + 0.02F, + level.random.nextGaussian() * 0.01F, + message.data[0], 1F + level.random.nextFloat() * 1.5F, 40, 0F, false, true); }), SLIME_SPLIT_GEN_START((message, level) -> { - int x = message.data[0]; - int y = message.data[1]; - int z = message.data[2]; - int color = message.data[3]; - for (int i = level.rand.nextInt(10) + 5; i >= 0; i--) + var x = message.data[0]; + var y = message.data[1]; + var z = message.data[2]; + var color = message.data[3]; + for (var i = level.random.nextInt(10) + 5; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + (float) level.rand.nextGaussian() * 0.5F, - message.posY + (float) level.rand.nextGaussian() * 0.5F, - message.posZ + (float) level.rand.nextGaussian() * 0.5F, - level.rand.nextGaussian() * 0.02F, - level.rand.nextFloat() * 0.04F + 0.02F, - level.rand.nextGaussian() * 0.02F, - color, level.rand.nextFloat() + 1, level.rand.nextInt(20) + 20, 0, false, true); - for (int i = level.rand.nextInt(10) + 5; i >= 0; i--) + message.posX + (float) level.random.nextGaussian() * 0.5F, + message.posY + (float) level.random.nextGaussian() * 0.5F, + message.posZ + (float) level.random.nextGaussian() * 0.5F, + level.random.nextGaussian() * 0.02F, + level.random.nextFloat() * 0.04F + 0.02F, + level.random.nextGaussian() * 0.02F, + color, level.random.nextFloat() + 1, level.random.nextInt(20) + 20, 0, false, true); + for (var i = level.random.nextInt(10) + 5; i >= 0; i--) NaturesAuraAPI.instance().spawnParticleStream( - message.posX + (float) level.rand.nextGaussian() * 0.5F, - message.posY + (float) level.rand.nextGaussian() * 0.5F, - message.posZ + (float) level.rand.nextGaussian() * 0.5F, - x + 0.5F, y + 0.5F, z + 0.5F, 0.2F, color, level.rand.nextFloat() + 1); + message.posX + (float) level.random.nextGaussian() * 0.5F, + message.posY + (float) level.random.nextGaussian() * 0.5F, + message.posZ + (float) level.random.nextGaussian() * 0.5F, + x + 0.5F, y + 0.5F, z + 0.5F, 0.2F, color, level.random.nextFloat() + 1); }), PET_REVIVER((message, level) -> { - for (int i = level.rand.nextInt(50) + 150; i >= 0; i--) + for (var i = level.random.nextInt(50) + 150; i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle( - message.posX + (float) level.rand.nextGaussian() * 0.4F, - message.posY + (float) level.rand.nextGaussian() * 0.4F, - message.posZ + (float) level.rand.nextGaussian() * 0.4F, - level.rand.nextGaussian() * 0.002F, - level.rand.nextFloat() * 0.001F + 0.002F, - level.rand.nextGaussian() * 0.002F, - message.data[0], level.rand.nextFloat() * 2 + 1, level.rand.nextInt(50) + 50, 0, false, true); + message.posX + (float) level.random.nextGaussian() * 0.4F, + message.posY + (float) level.random.nextGaussian() * 0.4F, + message.posZ + (float) level.random.nextGaussian() * 0.4F, + level.random.nextGaussian() * 0.002F, + level.random.nextFloat() * 0.001F + 0.002F, + level.random.nextGaussian() * 0.002F, + message.data[0], level.random.nextFloat() * 2 + 1, level.random.nextInt(50) + 50, 0, false, true); }); public final BiConsumer action; diff --git a/src/main/java/de/ellpeck/naturesaura/proxy/ClientProxy.java b/src/main/java/de/ellpeck/naturesaura/proxy/ClientProxy.java index 428f9019..8c774a15 100644 --- a/src/main/java/de/ellpeck/naturesaura/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/naturesaura/proxy/ClientProxy.java @@ -17,7 +17,6 @@ import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.color.item.ItemColors; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.ItemBlockRenderTypes; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.EntityRenderers; @@ -84,12 +83,6 @@ public class ClientProxy implements IProxy { Minecraft.getInstance().getBlockColors().register(block.getBlockColor(), (Block) block); } - @Override - public void registerTESR(ITESRProvider provider) { - var tesr = provider.getTESR(); - BlockEntityRenderers.register(tesr.getA(), tesr.getB().get()); - } - @Override public void spawnMagicParticle(double posX, double posY, double posZ, double motionX, double motionY, double motionZ, int color, float scale, int maxAge, float gravity, boolean collision, boolean fade) { ParticleHandler.spawnParticle(() -> new ParticleMagic(Minecraft.getInstance().level, diff --git a/src/main/java/de/ellpeck/naturesaura/proxy/IProxy.java b/src/main/java/de/ellpeck/naturesaura/proxy/IProxy.java index a159cb68..c41e4cab 100644 --- a/src/main/java/de/ellpeck/naturesaura/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/naturesaura/proxy/IProxy.java @@ -2,7 +2,6 @@ package de.ellpeck.naturesaura.proxy; import de.ellpeck.naturesaura.reg.IColorProvidingBlock; import de.ellpeck.naturesaura.reg.IColorProvidingItem; -import de.ellpeck.naturesaura.reg.ITESRProvider; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -22,8 +21,6 @@ public interface IProxy { void addColorProvidingBlock(IColorProvidingBlock block); - void registerTESR(ITESRProvider provider); - void spawnMagicParticle(double posX, double posY, double posZ, double motionX, double motionY, double motionZ, int color, float scale, int maxAge, float gravity, boolean collision, boolean fade); void setParticleDepth(boolean depth); diff --git a/src/main/java/de/ellpeck/naturesaura/proxy/ServerProxy.java b/src/main/java/de/ellpeck/naturesaura/proxy/ServerProxy.java index 5c6c0625..f81e9874 100644 --- a/src/main/java/de/ellpeck/naturesaura/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/naturesaura/proxy/ServerProxy.java @@ -2,7 +2,6 @@ package de.ellpeck.naturesaura.proxy; import de.ellpeck.naturesaura.reg.IColorProvidingBlock; import de.ellpeck.naturesaura.reg.IColorProvidingItem; -import de.ellpeck.naturesaura.reg.ITESRProvider; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -37,11 +36,6 @@ public class ServerProxy implements IProxy { } - @Override - public void registerTESR(ITESRProvider provider) { - - } - @Override public void spawnMagicParticle(double posX, double posY, double posZ, double motionX, double motionY, double motionZ, int color, float scale, int maxAge, float gravity, boolean collision, boolean fade) { diff --git a/src/main/java/de/ellpeck/naturesaura/reg/ITESRProvider.java b/src/main/java/de/ellpeck/naturesaura/reg/ITESRProvider.java index c9247379..48af5a0b 100644 --- a/src/main/java/de/ellpeck/naturesaura/reg/ITESRProvider.java +++ b/src/main/java/de/ellpeck/naturesaura/reg/ITESRProvider.java @@ -1,16 +1,11 @@ package de.ellpeck.naturesaura.reg; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.util.Tuple; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import java.util.function.Supplier; - public interface ITESRProvider { @OnlyIn(Dist.CLIENT) - Tuple, Supplier>> getTESR(); + void registerTESR(); } diff --git a/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java b/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java index f07fe01b..192771b9 100644 --- a/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java +++ b/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java @@ -334,7 +334,7 @@ public final class ModRegistry { if (item instanceof IColorProvidingItem) NaturesAura.proxy.addColorProvidingItem((IColorProvidingItem) item); if (item instanceof ITESRProvider provider) - NaturesAura.proxy.registerTESR(provider); + provider.registerTESR(); } // register features again for some reason diff --git a/src/main/java/de/ellpeck/naturesaura/renderers/SupporterFancyHandler.java b/src/main/java/de/ellpeck/naturesaura/renderers/SupporterFancyHandler.java index 96cb77e9..71670a89 100644 --- a/src/main/java/de/ellpeck/naturesaura/renderers/SupporterFancyHandler.java +++ b/src/main/java/de/ellpeck/naturesaura/renderers/SupporterFancyHandler.java @@ -49,7 +49,7 @@ public class SupporterFancyHandler { if (rand.nextFloat() >= 0.75F) { int color; if (info.tier == 1) { - var pos = player.getOnPos(); + var pos = player.blockPosition(); color = BiomeColors.getAverageGrassColor(player.level, pos); } else { color = info.color;