Fixed dimensional doors not mining like they should.

This commit is contained in:
Waterpicker 2024-05-19 22:52:50 -05:00
parent c01db32798
commit e9087cfae2
7 changed files with 39 additions and 17 deletions

View file

@ -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<EntranceRiftBlockEntity>, CoordinateTransformerBlock, ExplosionConvertibleBlock, AfterMoveCollidableBlock {
@ -157,6 +160,11 @@ public class DimensionalDoorBlock extends WaterLoggableDoorBlock implements Rift
return new EntranceRiftBlockEntity(pos, state);
}
@Override
public List<ItemStack> getDrops(BlockState state, LootParams.Builder params) {
return super.getDrops(state, params);
}
public void createDetachedRift(Level world, BlockPos pos) {
createDetachedRift(world, pos, world.getBlockState(pos));
}

View file

@ -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<ItemStack> getDrops(BlockState state, LootParams.Builder params) {
return originalBlock.getDrops(state, params);
var defaultState = originalBlock.defaultBlockState();
return originalBlock.getDrops(defaultState, params);
}
@Override

View file

@ -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;
}
}

View file

@ -1,13 +0,0 @@
[
{
"data": {
"destination": {
"type": "dimdoors:template",
"template": "dimdoors:lab/lab_hallway"
}
},
"condition": {
"type": "dimdoors:always_true"
}
}
]

View file

@ -6,6 +6,7 @@
"mixins": [
"ArgumentTypesMixin",
"BlockMixin",
"ItemStackMixin",
"DoorBlockMixin",
"EntityMixin",
"ExplosionMixin",

View file

@ -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(),

View file

@ -25,8 +25,8 @@ public class LootTableProvider extends FabricBlockLootTableProvider {
for (RegistrySupplier<Block> 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);