diff --git a/common/src/main/java/org/dimdev/dimdoors/block/door/DimensionalDoorBlock.java b/common/src/main/java/org/dimdev/dimdoors/block/door/DimensionalDoorBlock.java index 10f132aa..879449cf 100644 --- a/common/src/main/java/org/dimdev/dimdoors/block/door/DimensionalDoorBlock.java +++ b/common/src/main/java/org/dimdev/dimdoors/block/door/DimensionalDoorBlock.java @@ -25,6 +25,7 @@ import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.Shapes; @@ -42,6 +43,8 @@ import org.dimdev.dimdoors.block.entity.DetachedRiftBlockEntity; import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity; import org.jetbrains.annotations.Nullable; +import java.util.List; + import static net.minecraft.world.level.material.PushReaction.BLOCK; public class DimensionalDoorBlock extends WaterLoggableDoorBlock implements RiftProvider, CoordinateTransformerBlock, ExplosionConvertibleBlock, AfterMoveCollidableBlock { @@ -157,6 +160,11 @@ public class DimensionalDoorBlock extends WaterLoggableDoorBlock implements Rift return new EntranceRiftBlockEntity(pos, state); } + @Override + public List getDrops(BlockState state, LootParams.Builder params) { + return super.getDrops(state, params); + } + public void createDetachedRift(Level world, BlockPos pos) { createDetachedRift(world, pos, world.getBlockState(pos)); } diff --git a/common/src/main/java/org/dimdev/dimdoors/block/door/DimensionalDoorBlockRegistrar.java b/common/src/main/java/org/dimdev/dimdoors/block/door/DimensionalDoorBlockRegistrar.java index 5c15f42d..e02d4599 100644 --- a/common/src/main/java/org/dimdev/dimdoors/block/door/DimensionalDoorBlockRegistrar.java +++ b/common/src/main/java/org/dimdev/dimdoors/block/door/DimensionalDoorBlockRegistrar.java @@ -9,6 +9,7 @@ import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.RegistrarManager; import dev.architectury.utils.Env; import net.minecraft.client.renderer.RenderType; +import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; @@ -101,7 +102,7 @@ public class DimensionalDoorBlockRegistrar { if(mappedDoorBlocks.containsKey(gennedId)) return; - Block dimBlock = registrar.register(gennedId, () -> constructor.apply(BlockBehaviour.Properties.copy((BlockBehaviour) original), original)).get(); + Block dimBlock = registrar.register(gennedId, () -> constructor.apply(BlockBehaviour.Properties.copy((BlockBehaviour) original).requiresCorrectToolForDrops(), original)).get(); // ModBlockEntityTypes.ENTRANCE_RIFT.get().addBlock(dimBlock); //TODO: Add mappedDoorBlocks.put(gennedId, location); itemRegistrar.notifyBlockMapped((Block) original, dimBlock); @@ -186,7 +187,9 @@ public class DimensionalDoorBlockRegistrar { @Override public List getDrops(BlockState state, LootParams.Builder params) { - return originalBlock.getDrops(state, params); + var defaultState = originalBlock.defaultBlockState(); + + return originalBlock.getDrops(defaultState, params); } @Override diff --git a/common/src/main/java/org/dimdev/dimdoors/mixin/ItemStackMixin.java b/common/src/main/java/org/dimdev/dimdoors/mixin/ItemStackMixin.java new file mode 100644 index 00000000..73a0d076 --- /dev/null +++ b/common/src/main/java/org/dimdev/dimdoors/mixin/ItemStackMixin.java @@ -0,0 +1,22 @@ +package org.dimdev.dimdoors.mixin; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; +import org.dimdev.dimdoors.block.door.DimensionalDoorBlockRegistrar; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(ItemStack.class) +public class ItemStackMixin { + + @ModifyArg(method = "getDestroySpeed", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/Item;getDestroySpeed(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;)F"), index = 1) + public BlockState speed(BlockState state) { + return state.getBlock() instanceof DimensionalDoorBlockRegistrar.AutoGenDimensionalDoorBlock autogenDoor ? autogenDoor.getOriginalBlock().defaultBlockState() : state; + } + + @ModifyArg(method = "isCorrectToolForDrops", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/Item;isCorrectToolForDrops(Lnet/minecraft/world/level/block/state/BlockState;)Z"), index = 0) + public BlockState isCorrect(BlockState state) { + return state.getBlock() instanceof DimensionalDoorBlockRegistrar.AutoGenDimensionalDoorBlock autogenDoor ? autogenDoor.getOriginalBlock().defaultBlockState() : state; + } +} diff --git a/common/src/main/resources/data/dimdoors/door/data/gold_door.json b/common/src/main/resources/data/dimdoors/door/data/gold_door.json deleted file mode 100644 index 93d88312..00000000 --- a/common/src/main/resources/data/dimdoors/door/data/gold_door.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - { - "data": { - "destination": { - "type": "dimdoors:template", - "template": "dimdoors:lab/lab_hallway" - } - }, - "condition": { - "type": "dimdoors:always_true" - } - } -] diff --git a/common/src/main/resources/dimdoors-common.mixins.json b/common/src/main/resources/dimdoors-common.mixins.json index 60eeac94..8d5ab029 100644 --- a/common/src/main/resources/dimdoors-common.mixins.json +++ b/common/src/main/resources/dimdoors-common.mixins.json @@ -6,6 +6,7 @@ "mixins": [ "ArgumentTypesMixin", "BlockMixin", + "ItemStackMixin", "DoorBlockMixin", "EntityMixin", "ExplosionMixin", diff --git a/fabric/src/main/datagen/org/dimdev/dimdoors/datagen/BlockTagProvider.java b/fabric/src/main/datagen/org/dimdev/dimdoors/datagen/BlockTagProvider.java index 2facd975..62be4af8 100644 --- a/fabric/src/main/datagen/org/dimdev/dimdoors/datagen/BlockTagProvider.java +++ b/fabric/src/main/datagen/org/dimdev/dimdoors/datagen/BlockTagProvider.java @@ -30,6 +30,7 @@ public class BlockTagProvider extends FabricTagProvider.BlockTagProvider { } protected void configure(HolderGetter.Provider arg) { + add(ModBlockTags.DECAY_TO_AIR, Blocks.COBWEB, ModBlocks.DRIFTWOOD_LEAVES.get(), diff --git a/fabric/src/main/datagen/org/dimdev/dimdoors/datagen/LootTableProvider.java b/fabric/src/main/datagen/org/dimdev/dimdoors/datagen/LootTableProvider.java index 43b3e994..41221d85 100644 --- a/fabric/src/main/datagen/org/dimdev/dimdoors/datagen/LootTableProvider.java +++ b/fabric/src/main/datagen/org/dimdev/dimdoors/datagen/LootTableProvider.java @@ -25,8 +25,8 @@ public class LootTableProvider extends FabricBlockLootTableProvider { for (RegistrySupplier block : ModBlocks.FABRIC_BLOCKS.values()) { this.dropWhenSilkTouch(block.get()); } - this.dropWhenSilkTouch(ModBlocks.GOLD_DOOR.get()); - this.dropWhenSilkTouch(ModBlocks.QUARTZ_DOOR.get()); + this.dropSelf(ModBlocks.GOLD_DOOR.get()); + this.dropSelf(ModBlocks.QUARTZ_DOOR.get()); // this.addDropWithSilkTouch(ModBlocks.OAK_DIMENSIONAL_DOOR); // this.addDropWithSilkTouch(ModBlocks.IRON_DIMENSIONAL_DOOR); // this.addDropWithSilkTouch(ModBlocks.GOLD_DIMENSIONAL_DOOR);