From b572d731b419d04903fa70fd6cef105230a0caf5 Mon Sep 17 00:00:00 2001 From: Waterpicker Date: Thu, 23 Jul 2020 02:23:58 -0500 Subject: [PATCH] Simplified Biome registration. Fixed Fabric Block lighting and ability to not replace itself. --- .../DimensionalDoorsClientInitializer.java | 2 + .../dimdev/dimdoors/block/FabricBlock.java | 49 ++++++++++++++ .../org/dimdev/dimdoors/block/ModBlocks.java | 65 ++++++------------- .../dimdoors/entity/ai/MonolithTask.java | 34 +++++----- .../org/dimdev/dimdoors/world/ModBiomes.java | 3 +- 5 files changed, 90 insertions(+), 63 deletions(-) create mode 100644 src/main/java/org/dimdev/dimdoors/block/FabricBlock.java diff --git a/src/main/java/org/dimdev/dimdoors/DimensionalDoorsClientInitializer.java b/src/main/java/org/dimdev/dimdoors/DimensionalDoorsClientInitializer.java index 5189d447..cce98e17 100644 --- a/src/main/java/org/dimdev/dimdoors/DimensionalDoorsClientInitializer.java +++ b/src/main/java/org/dimdev/dimdoors/DimensionalDoorsClientInitializer.java @@ -52,10 +52,12 @@ public class DimensionalDoorsClientInitializer implements ClientModInitializer { putCutout(ModBlocks.QUARTZ_DIMENSIONAL_DOOR); putCutout(ModBlocks.QUARTZ_DOOR); + setupFluidRendering(ModFluids.ETERNAL_FLUID, ModFluids.FLOWING_ETERNAL_FLUID, new Identifier("dimdoors:eternal_fluid")); OpenWorlds.registerSkyRenderer(ModDimensions.POCKET_TYPE, new CustomSkyProvider(null, null, new Vec3i(0, 0, 0))); OpenWorlds.registerSkyRenderer(ModDimensions.LIMBO_TYPE, new LimboSkyProvider()); + OpenWorlds.registerCloudRenderer(ModDimensions.LIMBO_TYPE, (minecraftClient, matrixStack, v, v1, v2, v3) -> {}); ClientSidePacketRegistry.INSTANCE.register(DimensionalDoorsInitializer.MONOLITH_PARTICLE_PACKET, MonolithEntity::spawnParticles); diff --git a/src/main/java/org/dimdev/dimdoors/block/FabricBlock.java b/src/main/java/org/dimdev/dimdoors/block/FabricBlock.java new file mode 100644 index 00000000..2d85be62 --- /dev/null +++ b/src/main/java/org/dimdev/dimdoors/block/FabricBlock.java @@ -0,0 +1,49 @@ +package org.dimdev.dimdoors.block; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.util.ActionResult; +import net.minecraft.util.DyeColor; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.dimdev.dimdoors.world.ModDimensions; + +class FabricBlock extends Block { + FabricBlock(DyeColor color) { + super(FabricBlockSettings.of(Material.STONE, color).lightLevel(15)); + } + + @Override + @SuppressWarnings({"deprecation"}) + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + ItemStack heldStack = hand == Hand.MAIN_HAND ? player.getMainHandStack() : player.getOffHandStack(); + Block heldBlock = Block.getBlockFromItem(heldStack.getItem()); + + if (world.canPlayerModifyAt(player, pos) && + player.canPlaceOn(pos, hit.getSide(), heldStack) && + heldBlock.getDefaultState().isFullCube(world, pos) && + !heldBlock.hasBlockEntity() && + heldBlock != this && + !player.isSneaking() && + !(heldBlock instanceof FabricBlock) + ) { + + if (!player.isCreative()) { + heldStack.decrement(1); + } + + world.setBlockState(pos, heldBlock.getPlacementState(new ItemPlacementContext(new ItemUsageContext(player, hand, hit)))); + return ActionResult.SUCCESS; + } else { + return ActionResult.PASS; + } + } +} diff --git a/src/main/java/org/dimdev/dimdoors/block/ModBlocks.java b/src/main/java/org/dimdev/dimdoors/block/ModBlocks.java index cb8e82b4..ff7382e4 100644 --- a/src/main/java/org/dimdev/dimdoors/block/ModBlocks.java +++ b/src/main/java/org/dimdev/dimdoors/block/ModBlocks.java @@ -28,22 +28,22 @@ public final class ModBlocks { public static final Block DIMENSIONAL_PORTAL = register("dimdoors:dimensional_portal", new DimensionalPortalBlock(FabricBlockSettings.of(Material.AIR).collidable(false).dropsNothing())); public static final Block DETACHED_RIFT = register("dimdoors:detached_rift", new DetachedRiftBlock(FabricBlockSettings.of(Material.AIR).nonOpaque())); - public static final Block WHITE_FABRIC = registerFabric("dimdoors:white_fabric"); - public static final Block ORANGE_FABRIC = registerFabric("dimdoors:orange_fabric"); - public static final Block MAGENTA_FABRIC = registerFabric("dimdoors:magenta_fabric"); - public static final Block LIGHT_BLUE_FABRIC = registerFabric("dimdoors:light_blue_fabric"); - public static final Block YELLOW_FABRIC = registerFabric("dimdoors:yellow_fabric"); - public static final Block LIME_FABRIC = registerFabric("dimdoors:lime_fabric"); - public static final Block PINK_FABRIC = registerFabric("dimdoors:pink_fabric"); - public static final Block GRAY_FABRIC = registerFabric("dimdoors:gray_fabric"); - public static final Block LIGHT_GRAY_FABRIC = registerFabric("dimdoors:light_gray_fabric"); - public static final Block CYAN_FABRIC = registerFabric("dimdoors:cyan_fabric"); - public static final Block PURPLE_FABRIC = registerFabric("dimdoors:purple_fabric"); - public static final Block BLUE_FABRIC = registerFabric("dimdoors:blue_fabric"); - public static final Block BROWN_FABRIC = registerFabric("dimdoors:brown_fabric"); - public static final Block GREEN_FABRIC = registerFabric("dimdoors:green_fabric"); - public static final Block RED_FABRIC = registerFabric("dimdoors:red_fabric"); - public static final Block BLACK_FABRIC = registerFabric("dimdoors:black_fabric"); + public static final Block WHITE_FABRIC = registerFabric("dimdoors:white_fabric", DyeColor.WHITE); + public static final Block ORANGE_FABRIC = registerFabric("dimdoors:orange_fabric", DyeColor.ORANGE); + public static final Block MAGENTA_FABRIC = registerFabric("dimdoors:magenta_fabric", DyeColor.MAGENTA); + public static final Block LIGHT_BLUE_FABRIC = registerFabric("dimdoors:light_blue_fabric", DyeColor.LIGHT_BLUE); + public static final Block YELLOW_FABRIC = registerFabric("dimdoors:yellow_fabric", DyeColor.YELLOW); + public static final Block LIME_FABRIC = registerFabric("dimdoors:lime_fabric", DyeColor.LIME); + public static final Block PINK_FABRIC = registerFabric("dimdoors:pink_fabric", DyeColor.PINK); + public static final Block GRAY_FABRIC = registerFabric("dimdoors:gray_fabric", DyeColor.GRAY); + public static final Block LIGHT_GRAY_FABRIC = registerFabric("dimdoors:light_gray_fabric", DyeColor.LIGHT_GRAY); + public static final Block CYAN_FABRIC = registerFabric("dimdoors:cyan_fabric", DyeColor.CYAN); + public static final Block PURPLE_FABRIC = registerFabric("dimdoors:purple_fabric", DyeColor.PURPLE); + public static final Block BLUE_FABRIC = registerFabric("dimdoors:blue_fabric", DyeColor.BLUE); + public static final Block BROWN_FABRIC = registerFabric("dimdoors:brown_fabric", DyeColor.BROWN); + public static final Block GREEN_FABRIC = registerFabric("dimdoors:green_fabric", DyeColor.GREEN); + public static final Block RED_FABRIC = registerFabric("dimdoors:red_fabric", DyeColor.RED); + public static final Block BLACK_FABRIC = registerFabric("dimdoors:black_fabric", DyeColor.BLACK); public static final Block WHITE_ANCIENT_FABRIC = registerAncientFabric("dimdoors:white_ancient_fabric", DyeColor.WHITE); public static final Block ORANGE_ANCIENT_FABRIC = registerAncientFabric("dimdoors:orange_ancient_fabric", DyeColor.ORANGE); @@ -62,8 +62,8 @@ public final class ModBlocks { public static final Block RED_ANCIENT_FABRIC = registerAncientFabric("dimdoors:red_ancient_fabric", DyeColor.RED); public static final Block BLACK_ANCIENT_FABRIC = registerAncientFabric("dimdoors:black_ancient_fabric", DyeColor.BLACK); - public static final Block ETERNAL_FLUID = register("dimdoors:eternal_fluid", new EternalFluidBlock(FabricBlockSettings.of(Material.STONE, MaterialColor.RED))); - public static final Block UNRAVELLED_FABRIC = register("dimdoors:unravelled_fabric", new UnravelledFabricBlock(FabricBlockSettings.of(Material.STONE, MaterialColor.BLACK))); + public static final Block ETERNAL_FLUID = register("dimdoors:eternal_fluid", new EternalFluidBlock(FabricBlockSettings.of(Material.STONE, MaterialColor.RED).lightLevel(15))); + public static final Block UNRAVELLED_FABRIC = register("dimdoors:unravelled_fabric", new UnravelledFabricBlock(FabricBlockSettings.of(Material.STONE, MaterialColor.BLACK).lightLevel(15))); public static final Block MARKING_PLATE = register("dimdoors:marking_plate", new MarkingPlateBlock(FabricBlockSettings.of(Material.METAL, DyeColor.BLACK))); @@ -75,33 +75,8 @@ public final class ModBlocks { return register(id, new Block(FabricBlockSettings.of(Material.STONE, color).strength(-1.0F, 3600000.0F).dropsNothing())); } - private static Block registerFabric(String id) { - return register(id, new Block(FabricBlockSettings.of(Material.STONE, DyeColor.WHITE)) { - @Override - @SuppressWarnings({"deprecation"}) - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - ItemStack heldStack = hand == Hand.MAIN_HAND ? player.getMainHandStack() : player.getOffHandStack(); - Block heldBlock = Block.getBlockFromItem(heldStack.getItem()); - - if (world.canPlayerModifyAt(player, pos) && - player.canPlaceOn(pos, hit.getSide(), heldStack) && - heldBlock.getDefaultState().isFullCube(world, pos) && - !heldBlock.hasBlockEntity() && - heldBlock != this && - !player.isSneaking() && - ModDimensions.isDimDoorsPocketDimension(world)) { - - if (!player.isCreative()) { - heldStack.decrement(1); - } - - world.setBlockState(pos, heldBlock.getPlacementState(new ItemPlacementContext(new ItemUsageContext(player, hand, hit)))); - return ActionResult.SUCCESS; - } else { - return ActionResult.PASS; - } - } - }); + private static Block registerFabric(String id, DyeColor color) { + return register(id, new FabricBlock(color)); } public static void init() { diff --git a/src/main/java/org/dimdev/dimdoors/entity/ai/MonolithTask.java b/src/main/java/org/dimdev/dimdoors/entity/ai/MonolithTask.java index 31f49abe..50cf08f1 100644 --- a/src/main/java/org/dimdev/dimdoors/entity/ai/MonolithTask.java +++ b/src/main/java/org/dimdev/dimdoors/entity/ai/MonolithTask.java @@ -33,13 +33,17 @@ public class MonolithTask extends Goal { this.targetPredicate = (new TargetPredicate()).setBaseMaxDistance(range).includeTeammates().includeInvulnerable().ignoreEntityTargetRules().setPredicate(EXCEPT_SPECTATOR::test); } + private PlayerEntity getTarget() { + PlayerEntity playerEntity = this.mob.world.getClosestPlayer(this.targetPredicate, this.mob, this.mob.getX(), this.mob.getEyeY(), this.mob.getZ()); + return playerEntity != null && mob.canSee(playerEntity) ? playerEntity : null; + } + public boolean canStart() { - this.target = this.mob.world.getClosestPlayer(this.targetPredicate, this.mob, this.mob.getX(), this.mob.getEyeY(), this.mob.getZ()); - return this.target != null; + return (this.target = getTarget()) != null; } public boolean shouldContinue() { - return this.mob.squaredDistanceTo(this.target) > (double)(this.range * this.range); + return (this.target = getTarget()) != null; } public void start() { @@ -50,7 +54,7 @@ public class MonolithTask extends Goal { } public void tick() { - boolean visibility = target != null && mob.canSee(mob); + boolean visibility = target != null; mob.updateAggroLevel(target, visibility); // Change orientation and face a player if one is in range @@ -69,19 +73,17 @@ public class MonolithTask extends Goal { ServerSidePacketRegistry.INSTANCE.sendToPlayer(target, DimensionalDoorsInitializer.MONOLITH_PARTICLE_PACKET, data); } - if (visibility) { - // Only spawn particles on the client side and outside Limbo - /*(world.isClient && isDangerous()) { - target.spawnParticles(player); - }*/ + // Only spawn particles on the client side and outside Limbo + /*(world.isClient && isDangerous()) { + target.spawnParticles(player); + }*/ - // Teleport the target player if various conditions are met - if (mob.getAggro() >= MAX_AGGRO && ModConfig.MONOLITHS.monolithTeleportation && !target.isCreative() && mob.isDangerous()) { - mob.setAggro(0); - //Location destination = LimboDimension.getLimboSkySpawn(player); - //TeleportUtil.teleport(player, destination, 0, 0); - target.world.playSound(null, new BlockPos(target.getPos()), ModSoundEvents.CRACK, SoundCategory.HOSTILE, 13, 1); - } + // Teleport the target player if various conditions are met + if (mob.getAggro() >= MAX_AGGRO && ModConfig.MONOLITHS.monolithTeleportation && !target.isCreative() && mob.isDangerous()) { + mob.setAggro(0); + //Location destination = LimboDimension.getLimboSkySpawn(player); + //TeleportUtil.teleport(player, destination, 0, 0); + target.world.playSound(null, new BlockPos(target.getPos()), ModSoundEvents.CRACK, SoundCategory.HOSTILE, 13, 1); } } } diff --git a/src/main/java/org/dimdev/dimdoors/world/ModBiomes.java b/src/main/java/org/dimdev/dimdoors/world/ModBiomes.java index 88669fc6..63a258ff 100644 --- a/src/main/java/org/dimdev/dimdoors/world/ModBiomes.java +++ b/src/main/java/org/dimdev/dimdoors/world/ModBiomes.java @@ -13,8 +13,7 @@ public final class ModBiomes { public static final Biome DANGEROUS_BLACK_VOID = register(new Identifier("dimdoors:dangerous_black_void"), new BlankBiome(false, true)); private static Biome register(Identifier id, Biome biome) { - Registry.register(Registry.BIOME, id, biome); - return biome; + return Registry.register(Registry.BIOME, id, biome); } public static void init() {