switched door class checks to instanceof

This commit is contained in:
CreepyCre 2021-04-11 02:25:44 +02:00
parent a29b4f72ed
commit 9fdca2fa74
3 changed files with 32 additions and 104 deletions

View file

@ -9,6 +9,8 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.DoorBlock;
import net.minecraft.block.TrapdoorBlock;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
@ -41,16 +43,10 @@ public class DimensionalDoorBlockRegistrar {
}
public void handleEntry(Identifier identifier, Block block) {
switch (DoorBlockClassCase.getCase(block)) {
case DOOR_BLOCK:
if (!(block instanceof DimensionalDoorBlock) && block instanceof DoorBlock) {
register(identifier, block, DimensionalDoorBlock::new);
break;
case TRAPDOOR_BLOCK:
} else if (!(block instanceof DimensionalTrapdoorBlock) && block instanceof TrapdoorBlock) {
register(identifier, block, DimensionalTrapdoorBlock::new);
break;
default:
// do nothing
break;
}
}

View file

@ -1,35 +0,0 @@
package org.dimdev.dimdoors.block.door;
import net.minecraft.block.Block;
import net.minecraft.block.DoorBlock;
import net.minecraft.block.TrapdoorBlock;
import java.util.HashMap;
import java.util.Map;
// Just in case we want to support more Door classes in the future.
// Need to move away from an enum for better mod support though.
public enum DoorBlockClassCase {
NONE(null),
DOOR_BLOCK(DoorBlock.class),
TRAPDOOR_BLOCK(TrapdoorBlock.class);
private static final Map<Class<? extends Block>, DoorBlockClassCase> CASE_MAP = new HashMap<>();
static {
for (DoorBlockClassCase doorBlockClassCase : DoorBlockClassCase.values()) {
CASE_MAP.put(doorBlockClassCase.doorClazz, doorBlockClassCase);
}
}
public static DoorBlockClassCase getCase(Block block) {
DoorBlockClassCase doorBlockClassCase = CASE_MAP.get(block.getClass());
return doorBlockClassCase == null ? NONE : doorBlockClassCase;
}
private final Class<? extends Block> doorClazz;
DoorBlockClassCase(Class<? extends Block> doorClazz) {
this.doorClazz = doorClazz;
}
}

View file

@ -3,6 +3,8 @@ package org.dimdev.dimdoors.item;
import net.fabricmc.fabric.api.event.registry.RegistryEntryAddedCallback;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.block.Block;
import net.minecraft.block.DoorBlock;
import net.minecraft.block.TrapdoorBlock;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@ -13,7 +15,8 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.Pair;
import net.minecraft.util.registry.Registry;
import org.dimdev.dimdoors.api.util.QuadFunction;
import org.dimdev.dimdoors.block.door.DoorBlockClassCase;
import org.dimdev.dimdoors.block.door.DimensionalDoorBlock;
import org.dimdev.dimdoors.block.door.DimensionalTrapdoorBlock;
import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity;
import org.dimdev.dimdoors.listener.ItemRegistryEntryAddedListener;
import org.dimdev.dimdoors.rift.targets.PublicPocketTarget;
@ -45,26 +48,20 @@ public class DimensionalDoorItemRegistrar {
}
public void handleEntry(Identifier identifier, Item item) {
Block block;
switch (DoorItemClassCase.getCase(item)) {
case TALL_BLOCK_ITEM:
block = ((TallBlockItem) item).getBlock();
if (item instanceof TallBlockItem) {
Block block = ((TallBlockItem) item).getBlock();
handleEntry(identifier, item, block, AutoGenDimensionalDoorItem::new);
break;
case BLOCK_ITEM:
block = ((BlockItem) item).getBlock();
} else if (item instanceof BlockItem) {
Block block = ((BlockItem) item).getBlock();
handleEntry(identifier, item, block, AutoGenDimensionalTrapdoorItem::new);
break;
default:
// do nothing
break;
}
}
private void handleEntry(Identifier identifier, Item item, Block block, QuadFunction<Block, Item.Settings, Consumer<? super EntranceRiftBlockEntity>, Item, ? extends Item> constructor) {
switch (DoorBlockClassCase.getCase(block)) {
case DOOR_BLOCK:
case TRAPDOOR_BLOCK:
if (!(block instanceof DimensionalDoorBlock)
&& !(block instanceof DimensionalTrapdoorBlock)
&& (block instanceof DoorBlock || block instanceof TrapdoorBlock)) {
Item.Settings settings = new FabricItemSettings()
.maxCount(item.getMaxCount())
.maxDamage(item.getMaxDamage())
@ -80,10 +77,6 @@ public class DimensionalDoorItemRegistrar {
}
register(identifier, dimItemConstructor.apply(blocksAlreadyNotifiedAbout.get(block)));
break;
default:
// do nothing
break;
}
}
@ -106,32 +99,6 @@ public class DimensionalDoorItemRegistrar {
}
private enum DoorItemClassCase {
NONE(null),
TALL_BLOCK_ITEM(TallBlockItem.class),
BLOCK_ITEM(BlockItem.class);
private static final Map<Class<? extends Item>, DoorItemClassCase> CASE_MAP = new HashMap<>();
static {
for (DoorItemClassCase doorItemClassCase : DoorItemClassCase.values()) {
CASE_MAP.put(doorItemClassCase.doorClazz, doorItemClassCase);
}
}
public static DoorItemClassCase getCase(Item item) {
DoorItemClassCase doorItemClassCase = CASE_MAP.get(item.getClass());
return doorItemClassCase == null ? NONE : doorItemClassCase;
}
private final Class<? extends Item> doorClazz;
DoorItemClassCase(Class<? extends Item> doorClazz) {
this.doorClazz = doorClazz;
}
}
private static class AutoGenDimensionalDoorItem extends DimensionalDoorItem {
private final Item originalItem;