From 764e2b1efdb1dcb3a5dc5829d7ad28fedd3698da Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 22 Apr 2020 20:23:54 +0200 Subject: [PATCH] It compiles, now for the todos --- .../minelittlepony/unicopia/CustomDrops.java | 2 +- .../com/minelittlepony/unicopia/TreeType.java | 84 +++++++++++++++++++ .../com/minelittlepony/unicopia/Unicopia.java | 3 + .../ability/EarthPonyStompAbility.java | 24 +----- .../advancement/BOHDeathCriterion.java | 1 - .../unicopia/block/BlockGrowingCuccoon.java | 10 +-- .../unicopia/block/ChitinBlock.java | 2 +- .../unicopia/block/GlowingGemBlock.java | 2 +- .../unicopia/block/StickBlock.java | 2 +- .../unicopia/block/SugarBlock.java | 2 +- .../unicopia/block/TomatoPlantBlock.java | 2 +- .../unicopia/block/UBlocks.java | 4 +- .../unicopia/client/UnicopiaClient.java | 37 ++++---- .../gui/{ClientHooks.java => HudHooks.java} | 3 +- .../container/SpellBookContainer.java | 2 +- .../unicopia/ducks/Climbable.java | 7 ++ .../unicopia/ducks/PickedItemSupplier.java | 7 ++ .../unicopia/entity/ButterflyEntity.java | 6 +- .../unicopia/entity/SpellbookEntity.java | 15 ++-- .../unicopia/entity/SpellcastEntity.java | 10 +-- .../unicopia/item/AppleItem.java | 39 --------- .../unicopia/item/MossItem.java | 27 +++--- .../unicopia/magic/spell/FireSpell.java | 4 +- .../unicopia/magic/spell/IceSpell.java | 4 +- .../unicopia/magic/spell/InfernoSpell.java | 4 +- .../unicopia/mixin/CriterionsRegistry.java | 15 ++++ .../unicopia/mixin/MixinLivingEntity.java | 10 +++ .../mixin/client/DefaultTexturesRegistry.java | 17 ++++ .../mixin/client/MixinMinecraftClient.java | 52 ++++++++++++ .../{StateMapList.java => BlockStateMap.java} | 2 +- .../unicopia/util/collection/Pool.java | 44 ---------- ...List.java => ReversableBlockStateMap.java} | 6 +- 32 files changed, 269 insertions(+), 180 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/TreeType.java rename src/main/java/com/minelittlepony/unicopia/client/gui/{ClientHooks.java => HudHooks.java} (97%) create mode 100644 src/main/java/com/minelittlepony/unicopia/ducks/Climbable.java create mode 100644 src/main/java/com/minelittlepony/unicopia/ducks/PickedItemSupplier.java create mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/CriterionsRegistry.java create mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/client/DefaultTexturesRegistry.java create mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMinecraftClient.java rename src/main/java/com/minelittlepony/unicopia/util/collection/{StateMapList.java => BlockStateMap.java} (96%) delete mode 100644 src/main/java/com/minelittlepony/unicopia/util/collection/Pool.java rename src/main/java/com/minelittlepony/unicopia/util/collection/{ReversableStateMapList.java => ReversableBlockStateMap.java} (63%) diff --git a/src/main/java/com/minelittlepony/unicopia/CustomDrops.java b/src/main/java/com/minelittlepony/unicopia/CustomDrops.java index a63fa2ba..364ff544 100644 --- a/src/main/java/com/minelittlepony/unicopia/CustomDrops.java +++ b/src/main/java/com/minelittlepony/unicopia/CustomDrops.java @@ -16,7 +16,7 @@ import net.minecraft.world.World; @Deprecated public class CustomDrops { - // TODO: replace with a loot table + // TODO: loot table public void addAuxiliaryDrops(World world, BlockState state, BlockPos pos, List drops, int fortune) { Block block = state.getBlock(); diff --git a/src/main/java/com/minelittlepony/unicopia/TreeType.java b/src/main/java/com/minelittlepony/unicopia/TreeType.java new file mode 100644 index 00000000..114e9352 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/TreeType.java @@ -0,0 +1,84 @@ +package com.minelittlepony.unicopia; + +import java.util.stream.Collectors; + +import com.minelittlepony.unicopia.item.UItems; +import com.minelittlepony.unicopia.util.collection.Weighted; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Supplier; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public final class TreeType { + // TODO: Move this to a datapack + private static final Set REGISTRY = new HashSet<>(); + + public static final TreeType NONE = new TreeType("none", new Weighted>()); + public static final TreeType OAK = new TreeType("oak", new Weighted>() + .put(1, () -> new ItemStack(UItems.rotten_apple)) + .put(2, () -> new ItemStack(UItems.green_apple)) + .put(3, () -> new ItemStack(UItems.VanillaOverrides.red_apple)), Blocks.OAK_LOG, Blocks.OAK_LEAVES); + public static final TreeType BIRCH = new TreeType("birch", new Weighted>() + .put(1, () -> new ItemStack(UItems.rotten_apple)) + .put(2, () -> new ItemStack(UItems.sweet_apple)) + .put(5, () -> new ItemStack(UItems.green_apple)), Blocks.BIRCH_LOG, Blocks.BIRCH_LEAVES); + public static final TreeType SPRUCE = new TreeType("spruce", new Weighted>() + .put(1, () -> new ItemStack(UItems.sour_apple)) + .put(2, () -> new ItemStack(UItems.green_apple)) + .put(3, () -> new ItemStack(UItems.sweet_apple)) + .put(4, () -> new ItemStack(UItems.rotten_apple)), Blocks.SPRUCE_LOG, Blocks.SPRUCE_LEAVES); + public static final TreeType ACACIA = new TreeType("acacia", new Weighted>() + .put(1, () -> new ItemStack(UItems.rotten_apple)) + .put(2, () -> new ItemStack(UItems.sweet_apple)) + .put(5, () -> new ItemStack(UItems.green_apple)), Blocks.ACACIA_LOG, Blocks.ACACIA_LEAVES); + public static final TreeType JUNGLE = new TreeType("jungle", new Weighted>() + .put(5, () -> new ItemStack(UItems.green_apple)) + .put(2, () -> new ItemStack(UItems.sweet_apple)) + .put(1, () -> new ItemStack(UItems.sour_apple)), Blocks.JUNGLE_LOG, Blocks.JUNGLE_LEAVES); + public static final TreeType DARK_OAK = new TreeType("dark_oak", new Weighted>() + .put(1, () -> new ItemStack(UItems.rotten_apple)) + .put(2, () -> new ItemStack(UItems.sweet_apple)) + .put(5, () -> new ItemStack(UItems.zap_apple)), Blocks.DARK_OAK_LOG, Blocks.DARK_OAK_LEAVES); + + private final String name; + private final Set blocks; + private final Weighted> pool; + + private TreeType(String name, Weighted> pool, Block...blocks) { + this.name = name; + this.pool = pool; + this.blocks = Arrays.stream(blocks).map(Registry.BLOCK::getId) + .collect(Collectors.toSet()); + REGISTRY.add(this); + } + + public boolean matches(BlockState state) { + return blocks.contains(Registry.BLOCK.getId(state.getBlock())); + } + + public ItemStack pickRandomStack() { + return pool.get().map(Supplier::get).orElse(ItemStack.EMPTY); + } + + public static TreeType get(BlockState state) { + return REGISTRY.stream().filter(type -> type.matches(state)).findFirst().orElse(TreeType.NONE); + } + + @Override + public boolean equals(Object o) { + return o instanceof TreeType && name.compareTo(((TreeType)o).name) == 0; + } + + @Override + public int hashCode() { + return name.hashCode(); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/Unicopia.java b/src/main/java/com/minelittlepony/unicopia/Unicopia.java index 0c0d0b74..b173615e 100644 --- a/src/main/java/com/minelittlepony/unicopia/Unicopia.java +++ b/src/main/java/com/minelittlepony/unicopia/Unicopia.java @@ -11,12 +11,14 @@ import com.minelittlepony.common.util.GamePaths; import com.minelittlepony.jumpingcastle.api.Channel; import com.minelittlepony.jumpingcastle.api.JumpingCastle; import com.minelittlepony.unicopia.ability.Abilities; +import com.minelittlepony.unicopia.advancement.BOHDeathCriterion; import com.minelittlepony.unicopia.block.UBlocks; import com.minelittlepony.unicopia.command.Commands; import com.minelittlepony.unicopia.container.UContainers; import com.minelittlepony.unicopia.enchanting.Pages; import com.minelittlepony.unicopia.enchanting.recipe.AffineIngredients; import com.minelittlepony.unicopia.item.UItems; +import com.minelittlepony.unicopia.mixin.CriterionsRegistry; import com.minelittlepony.unicopia.network.MsgPlayerAbility; import com.minelittlepony.unicopia.network.MsgPlayerCapabilities; import com.minelittlepony.unicopia.network.MsgRequestCapabilities; @@ -50,6 +52,7 @@ public class Unicopia implements ModInitializer { UStructures.bootstrap(); Abilities.getInstance().init(); + CriterionsRegistry.register(BOHDeathCriterion.INSTANCE); ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(Pages.instance()); ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(AffineIngredients.instance()); } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java index 79315bb1..dec046f2 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java @@ -8,8 +8,8 @@ import com.google.common.collect.Lists; import com.google.gson.annotations.Expose; import com.minelittlepony.unicopia.AwaitTickQueue; import com.minelittlepony.unicopia.Race; +import com.minelittlepony.unicopia.TreeType; import com.minelittlepony.unicopia.entity.player.Pony; -import com.minelittlepony.unicopia.item.AppleItem; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.VecHelper; @@ -28,7 +28,6 @@ import net.minecraft.entity.ItemEntity; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; import net.minecraft.particle.BlockStateParticleEffect; import net.minecraft.particle.ParticleTypes; import net.minecraft.util.hit.BlockHitResult; @@ -351,7 +350,7 @@ public class EarthPonyStompAbility implements Ability logs = new ArrayList<>(); List leaves = new ArrayList<>(); @@ -455,20 +450,7 @@ public class EarthPonyStompAbility implements Ability i.getKey().getName().contentEquals("variant")) - .map(i -> i.getValue()) - .findFirst().orElse(null);*/ - return null; + return TreeType.get(one).equals(TreeType.get(two)); } protected static class Data extends Ability.Pos { diff --git a/src/main/java/com/minelittlepony/unicopia/advancement/BOHDeathCriterion.java b/src/main/java/com/minelittlepony/unicopia/advancement/BOHDeathCriterion.java index e37bd1b8..10978665 100644 --- a/src/main/java/com/minelittlepony/unicopia/advancement/BOHDeathCriterion.java +++ b/src/main/java/com/minelittlepony/unicopia/advancement/BOHDeathCriterion.java @@ -15,7 +15,6 @@ import net.minecraft.util.Identifier; * Advantement trigger for the book of holding. It's an achievement to die so spectacularly! :D */ public class BOHDeathCriterion extends AbstractCriterion { - // TODO: Need to register this public static final BOHDeathCriterion INSTANCE = new BOHDeathCriterion(); private static final Identifier ID = new Identifier("unicopia", "death_by_bag_of_holding"); diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockGrowingCuccoon.java b/src/main/java/com/minelittlepony/unicopia/block/BlockGrowingCuccoon.java index 3f1d5754..a2de679a 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockGrowingCuccoon.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockGrowingCuccoon.java @@ -4,6 +4,7 @@ import java.util.Random; import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.USounds; +import com.minelittlepony.unicopia.ducks.Climbable; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; @@ -36,7 +37,7 @@ import net.minecraft.world.BlockView; import net.minecraft.world.World; import net.minecraft.world.WorldView; -public class BlockGrowingCuccoon extends Block { +public class BlockGrowingCuccoon extends Block implements Climbable { public static final IntProperty AGE = IntProperty.of("age", 0, 7); public static final EnumProperty SHAPE = EnumProperty.of("shape", Shape.class); @@ -229,7 +230,6 @@ public class BlockGrowingCuccoon extends Block { public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, EntityContext ePos) { Vec3d offset = getOffsetPos(state, view, pos); - if (state.get(SHAPE) == Shape.BULB) { return BULBS[state.get(AGE) / 2].offset(offset.x, offset.y, offset.z); } @@ -243,12 +243,6 @@ public class BlockGrowingCuccoon extends Block { builder.add(AGE, SHAPE); } - // TODO: isLadder - /*@Override - public boolean isLadder(BlockState state, BlockView world, BlockPos pos, LivingEntity entity) { - return true; - }*/ - @Override public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random rand) { if (state.get(SHAPE) == Shape.BULB) { diff --git a/src/main/java/com/minelittlepony/unicopia/block/ChitinBlock.java b/src/main/java/com/minelittlepony/unicopia/block/ChitinBlock.java index 489d4136..0ca60321 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/ChitinBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/ChitinBlock.java @@ -31,7 +31,7 @@ public class ChitinBlock extends Block { ); setDefaultState(stateManager.getDefaultState().with(COVERING, Covering.UNCOVERED)); - // TODO: drops: + // TODO: loot table: // UItems.chitin_shell x 3 // setCreativeTab(CreativeTabs.BUILDING_BLOCKS); } diff --git a/src/main/java/com/minelittlepony/unicopia/block/GlowingGemBlock.java b/src/main/java/com/minelittlepony/unicopia/block/GlowingGemBlock.java index e4fd136a..0c8bccb5 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/GlowingGemBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/GlowingGemBlock.java @@ -172,7 +172,7 @@ public class GlowingGemBlock extends TorchBlock implements Gas { return CloudType.ENCHANTED; } - // TODO: this is a loot table now + // TODO: loot table /*@Override public List getDroppedStacks(BlockState state, LootContext.Builder context) { diff --git a/src/main/java/com/minelittlepony/unicopia/block/StickBlock.java b/src/main/java/com/minelittlepony/unicopia/block/StickBlock.java index b7c1031e..2d268b9f 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/StickBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/StickBlock.java @@ -40,7 +40,7 @@ public class StickBlock extends Block { .build() ); - // TODO: drops Items.STICK x1 + // TODO: loot table Items.STICK x1 } @Deprecated diff --git a/src/main/java/com/minelittlepony/unicopia/block/SugarBlock.java b/src/main/java/com/minelittlepony/unicopia/block/SugarBlock.java index 7f4716da..9c23254c 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/SugarBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/SugarBlock.java @@ -13,6 +13,6 @@ public class SugarBlock extends FallingBlock { .sounds(BlockSoundGroup.SAND) .build() ); - //TODO: drops SUGAR x 9; + //TODO: loot table SUGAR x 9; } } diff --git a/src/main/java/com/minelittlepony/unicopia/block/TomatoPlantBlock.java b/src/main/java/com/minelittlepony/unicopia/block/TomatoPlantBlock.java index 9ef5b361..676f291c 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/TomatoPlantBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/TomatoPlantBlock.java @@ -46,7 +46,7 @@ public class TomatoPlantBlock extends CropBlock { ); setDefaultState(getDefaultState().with(TYPE, Type.NORMAL)); - // TODO: drops UItems.tomato_seeds x1 + // TODO: loot table UItems.tomato_seeds x1 // if mature: UItems.tomato } diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java index b45c771d..53b1f6fe 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java @@ -1,5 +1,6 @@ package com.minelittlepony.unicopia.block; +import com.minelittlepony.unicopia.TreeType; import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.gas.CloudAnvilBlock; import com.minelittlepony.unicopia.gas.CloudBlock; @@ -9,7 +10,6 @@ import com.minelittlepony.unicopia.gas.CloudFenceBlock; import com.minelittlepony.unicopia.gas.CloudSlabBlock; import com.minelittlepony.unicopia.gas.CloudStairsBlock; import com.minelittlepony.unicopia.gas.CloudType; -import com.minelittlepony.unicopia.item.AppleItem; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.structure.CustomSaplingGenerator; @@ -68,7 +68,7 @@ public interface UBlocks { Block apple_leaves = register(new FruitLeavesBlock() .growthChance(1200) .tint(0xFFEE81) - .fruit(AppleItem::getRandomItemStack) + .fruit(W -> TreeType.OAK.pickRandomStack()) .compost(w -> new ItemStack(UItems.rotten_apple)), "apple_leaves"); diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java index 6332e7d0..3cd5f528 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java +++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java @@ -13,10 +13,12 @@ import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.block.UBlocks; +import com.minelittlepony.unicopia.container.SpellbookResultSlot; import com.minelittlepony.unicopia.ducks.Colourful; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.mixin.client.DefaultTexturesRegistry; import com.minelittlepony.unicopia.network.MsgRequestCapabilities; import com.minelittlepony.unicopia.util.dummy.DummyClientPlayerEntity; import com.mojang.authlib.GameProfile; @@ -28,6 +30,8 @@ import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.color.world.BiomeColors; import net.minecraft.client.color.world.GrassColors; +import net.minecraft.client.texture.SpriteAtlasTexture; +import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; @@ -55,11 +59,9 @@ public class UnicopiaClient extends InteractionManager implements ClientModIniti InteractionManager.instance = this; ClientTickCallback.EVENT.register(this::tick); - ClientReadyCallback.EVENT.register(client -> { - Abilities.getInstance().getValues().forEach(keyboard::addKeybind); - }); + ClientReadyCallback.EVENT.register(client -> Abilities.getInstance().getValues().forEach(keyboard::addKeybind)); - //BuildInTexturesBakery.getBuiltInTextures().add(new Identifier(Unicopia.MODID, "items/empty_slot_gem")); + DefaultTexturesRegistry.getDefaultTextures().add(new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEX, SpellbookResultSlot.EMPTY_GEM_SLOT)); ColorProviderRegistry.ITEM.register((stack, tint) -> { return getLeavesColor(((BlockItem)stack.getItem()).getBlock().getDefaultState(), null, null, tint); @@ -88,19 +90,6 @@ public class UnicopiaClient extends InteractionManager implements ClientModIniti keyboard.onKeyInput(); } - private static Race getclientPlayerRace() { - if (!Config.getInstance().ignoresMineLittlePony() - && MinecraftClient.getInstance().player != null) { - Race race = MineLPConnector.getPlayerPonyRace(); - - if (!race.isDefault()) { - return race; - } - } - - - return Config.getInstance().getPrefferedRace(); - } @Override @Nonnull @@ -129,6 +118,20 @@ public class UnicopiaClient extends InteractionManager implements ClientModIniti return MinecraftClient.getInstance().options.perspective; } + private static Race getclientPlayerRace() { + if (!Config.getInstance().ignoresMineLittlePony() + && MinecraftClient.getInstance().player != null) { + Race race = MineLPConnector.getPlayerPonyRace(); + + if (!race.isDefault()) { + return race; + } + } + + + return Config.getInstance().getPrefferedRace(); + } + private static int getLeavesColor(BlockState state, @Nullable BlockRenderView world, @Nullable BlockPos pos, int tint) { Block block = state.getBlock(); diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/ClientHooks.java b/src/main/java/com/minelittlepony/unicopia/client/gui/HudHooks.java similarity index 97% rename from src/main/java/com/minelittlepony/unicopia/client/gui/ClientHooks.java rename to src/main/java/com/minelittlepony/unicopia/client/gui/HudHooks.java index 7012dc9c..2e1457a9 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/ClientHooks.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/HudHooks.java @@ -6,7 +6,7 @@ import net.minecraft.client.MinecraftClient; @Deprecated // TODO: forge events -class ClientHooks { +class HudHooks { public static void beforePreRenderHud() { MinecraftClient client = MinecraftClient.getInstance(); @@ -16,7 +16,6 @@ class ClientHooks { } public static void postRenderHud() { - MinecraftClient client = MinecraftClient.getInstance(); if (client.player != null && client.world != null) { diff --git a/src/main/java/com/minelittlepony/unicopia/container/SpellBookContainer.java b/src/main/java/com/minelittlepony/unicopia/container/SpellBookContainer.java index 583e6434..bcf114c5 100644 --- a/src/main/java/com/minelittlepony/unicopia/container/SpellBookContainer.java +++ b/src/main/java/com/minelittlepony/unicopia/container/SpellBookContainer.java @@ -73,7 +73,7 @@ public class SpellBookContainer extends Container { ItemStack current = craftResult.getInvStack(0); if (!current.isEmpty()) { - // TODO: RecipeType.SPELL_BOOK + // TODO: URecipeType.SPELL_BOOK ItemStack crafted = player.world.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, craftMatrix, worldObj) .map(Recipe::getOutput) .orElse(ItemStack.EMPTY); diff --git a/src/main/java/com/minelittlepony/unicopia/ducks/Climbable.java b/src/main/java/com/minelittlepony/unicopia/ducks/Climbable.java new file mode 100644 index 00000000..5e12e5b6 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/ducks/Climbable.java @@ -0,0 +1,7 @@ +package com.minelittlepony.unicopia.ducks; + +@Deprecated +// TODO: 1.16 Use the vanilla BlockTag once mojang adds it +public interface Climbable { + +} diff --git a/src/main/java/com/minelittlepony/unicopia/ducks/PickedItemSupplier.java b/src/main/java/com/minelittlepony/unicopia/ducks/PickedItemSupplier.java new file mode 100644 index 00000000..3f4f34ee --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/ducks/PickedItemSupplier.java @@ -0,0 +1,7 @@ +package com.minelittlepony.unicopia.ducks; + +import net.minecraft.item.ItemStack; + +public interface PickedItemSupplier { + ItemStack getPickedStack(); +} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/ButterflyEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/ButterflyEntity.java index 815dea94..28e14385 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/ButterflyEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/ButterflyEntity.java @@ -19,6 +19,7 @@ import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.mob.AmbientEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; @@ -123,10 +124,9 @@ public class ButterflyEntity extends AmbientEntity { if (player.isSprinting() || player.isHandSwinging || player.forwardSpeed > 0 || player.sidewaysSpeed > 0) { return true; } - // TODO: IMob.VISIBLE_MOB_SELECTOR - }/* else if (!IMob.VISIBLE_MOB_SELECTOR.test(e)) { + } else if (!EntityPredicates.EXCEPT_CREATIVE_OR_SPECTATOR.test(e)) { return false; - }*/ + } return e.getVelocity().x != 0 || e.getVelocity().z != 0; } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/SpellbookEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/SpellbookEntity.java index 2619a429..5f3d3a02 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/SpellbookEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/SpellbookEntity.java @@ -1,6 +1,7 @@ package com.minelittlepony.unicopia.entity; import com.minelittlepony.unicopia.EquinePredicates; +import com.minelittlepony.unicopia.ducks.PickedItemSupplier; import com.minelittlepony.unicopia.item.UItems; import net.minecraft.container.Container; @@ -13,6 +14,7 @@ import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.particle.ParticleTypes; import net.minecraft.sound.BlockSoundGroup; @@ -24,7 +26,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.GameRules; import net.minecraft.world.World; -public class SpellbookEntity extends MobEntity implements NameableContainerFactory, IMagicals { +public class SpellbookEntity extends MobEntity implements NameableContainerFactory, IMagicals, PickedItemSupplier { private static final TrackedData OPENED = DataTracker.registerData(SpellbookEntity.class, TrackedDataHandlerRegistry.BOOLEAN); private static final TrackedData ALTERED = DataTracker.registerData(SpellbookEntity.class, TrackedDataHandlerRegistry.BOOLEAN); @@ -47,6 +49,11 @@ public class SpellbookEntity extends MobEntity implements NameableContainerFacto dataTracker.startTracking(ALTERED, false); } + @Override + public ItemStack getPickedStack() { + return new ItemStack(UItems.spellbook); + } + @Override public boolean isPushable() { return false; @@ -192,10 +199,4 @@ public class SpellbookEntity extends MobEntity implements NameableContainerFacto compound.putBoolean("force_open", state); } } - - // TODO: getPickStack - /*@Override - public ItemStack getPickStack(HitResult target) { - return new ItemStack(UItems.spellbook); - }*/ } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/SpellcastEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/SpellcastEntity.java index ac5d1d59..771c1a95 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/SpellcastEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/SpellcastEntity.java @@ -7,6 +7,7 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.Race; +import com.minelittlepony.unicopia.ducks.PickedItemSupplier; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.magic.Affinity; import com.minelittlepony.unicopia.magic.Castable; @@ -43,7 +44,7 @@ import net.minecraft.world.GameRules; import net.minecraft.world.World; import net.minecraft.world.explosion.Explosion.DestructionType; -public class SpellcastEntity extends MobEntityWithAi implements IMagicals, Caster, InAnimate { +public class SpellcastEntity extends MobEntityWithAi implements IMagicals, Caster, InAnimate, PickedItemSupplier { private LivingEntity owner = null; @@ -132,11 +133,10 @@ public class SpellcastEntity extends MobEntityWithAi implements IMagicals, Caste dataTracker.startTracking(AFFINITY, Affinity.NEUTRAL.ordinal()); } - // TODO: getPickedStack - /*@Override - public ItemStack getPickedStack(HitResult target) { + @Override + public ItemStack getPickedStack() { return SpellRegistry.instance().enchantStack(new ItemStack(getItem()), getEffect().getName()); - }*/ + } protected Item getItem() { return getAffinity() == Affinity.BAD ? UItems.curse : UItems.spell; diff --git a/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java index 9d8230bf..4ea77f3e 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java @@ -7,7 +7,6 @@ import com.minelittlepony.unicopia.ducks.IItemEntity; import com.minelittlepony.unicopia.entity.ItemEntityCapabilities; import com.minelittlepony.unicopia.toxin.Toxic; import com.minelittlepony.unicopia.toxin.Toxicity; - import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.EntityType; import net.minecraft.entity.ItemEntity; @@ -23,44 +22,6 @@ import net.minecraft.world.World; public class AppleItem extends Item implements Toxic, ItemEntityCapabilities.TickableItem { - // TODO: Move this to a datapack - /*private static final Pool>> TYPE_VARIANT_POOL = Pool.of(PlanksBlock.Type.OAK, - PlanksBlock.Type.OAK, new Weighted>() - .put(1, () -> new ItemStack(UItems.rotten_apple)) - .put(2, () -> new ItemStack(UItems.green_apple)) - .put(3, () -> new ItemStack(UItems.red_apple)), - PlanksBlock.Type.SPRUCE, new Weighted>() - .put(1, () -> new ItemStack(UItems.sour_apple)) - .put(2, () -> new ItemStack(UItems.green_apple)) - .put(3, () -> new ItemStack(UItems.sweet_apple)) - .put(4, () -> new ItemStack(UItems.rotten_apple)), - PlanksBlock.Type.BIRCH, new Weighted>() - .put(1, () -> new ItemStack(UItems.rotten_apple)) - .put(2, () -> new ItemStack(UItems.sweet_apple)) - .put(5, () -> new ItemStack(UItems.green_apple)), - PlanksBlock.Type.JUNGLE, new Weighted>() - .put(5, () -> new ItemStack(UItems.green_apple)) - .put(2, () -> new ItemStack(UItems.sweet_apple)) - .put(1, () -> new ItemStack(UItems.sour_apple)), - PlanksBlock.Type.ACACIA, new Weighted>() - .put(1, () -> new ItemStack(UItems.rotten_apple)) - .put(2, () -> new ItemStack(UItems.sweet_apple)) - .put(5, () -> new ItemStack(UItems.green_apple)), - PlanksBlock.Type.DARK_OAK, new Weighted>() - .put(1, () -> new ItemStack(UItems.rotten_apple)) - .put(2, () -> new ItemStack(UItems.sweet_apple)) - .put(5, () -> new ItemStack(UItems.zap_apple) - ) - );*/ - - public static ItemStack getRandomItemStack(Object variant) { - return new ItemStack(UItems.VanillaOverrides.red_apple); - /*return TYPE_VARIANT_POOL.getOptional(variant) - .flatMap(Weighted::get) - .map(Supplier::get) - .orElse(ItemStack.EMPTY);*/ - } - public AppleItem(FoodComponent components) { super(new Item.Settings() .group(ItemGroup.FOOD) diff --git a/src/main/java/com/minelittlepony/unicopia/item/MossItem.java b/src/main/java/com/minelittlepony/unicopia/item/MossItem.java index c24ab0aa..64b48481 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/MossItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/MossItem.java @@ -5,7 +5,7 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.toxin.ToxicItem; import com.minelittlepony.unicopia.toxin.Toxicity; -import com.minelittlepony.unicopia.util.collection.ReversableStateMapList; +import com.minelittlepony.unicopia.util.collection.ReversableBlockStateMap; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -16,25 +16,24 @@ import net.minecraft.item.ItemStack; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.util.UseAction; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class MossItem extends ToxicItem { - public static final ReversableStateMapList AFFECTED = new ReversableStateMapList(); - - static { + public static final ReversableBlockStateMap AFFECTED = Util.make(new ReversableBlockStateMap(), a -> { // TODO: move to resourcepack - AFFECTED.replaceBlock(Blocks.MOSSY_COBBLESTONE, Blocks.COBBLESTONE); - AFFECTED.replaceBlock(Blocks.MOSSY_COBBLESTONE_SLAB, Blocks.COBBLESTONE_SLAB); - AFFECTED.replaceBlock(Blocks.MOSSY_COBBLESTONE_STAIRS, Blocks.COBBLESTONE_STAIRS); - AFFECTED.replaceBlock(Blocks.MOSSY_COBBLESTONE_WALL, Blocks.COBBLESTONE_WALL); - AFFECTED.replaceBlock(Blocks.MOSSY_STONE_BRICK_SLAB, Blocks.STONE_BRICK_SLAB); - AFFECTED.replaceBlock(Blocks.MOSSY_STONE_BRICK_STAIRS, Blocks.STONE_BRICK_STAIRS); - AFFECTED.replaceBlock(Blocks.MOSSY_STONE_BRICK_WALL, Blocks.MOSSY_STONE_BRICK_WALL); - AFFECTED.replaceBlock(Blocks.MOSSY_STONE_BRICKS, Blocks.STONE_BRICKS); - AFFECTED.replaceBlock(Blocks.INFESTED_MOSSY_STONE_BRICKS, Blocks.INFESTED_STONE_BRICKS); - } + a.replaceBlock(Blocks.MOSSY_COBBLESTONE, Blocks.COBBLESTONE); + a.replaceBlock(Blocks.MOSSY_COBBLESTONE_SLAB, Blocks.COBBLESTONE_SLAB); + a.replaceBlock(Blocks.MOSSY_COBBLESTONE_STAIRS, Blocks.COBBLESTONE_STAIRS); + a.replaceBlock(Blocks.MOSSY_COBBLESTONE_WALL, Blocks.COBBLESTONE_WALL); + a.replaceBlock(Blocks.MOSSY_STONE_BRICK_SLAB, Blocks.STONE_BRICK_SLAB); + a.replaceBlock(Blocks.MOSSY_STONE_BRICK_STAIRS, Blocks.STONE_BRICK_STAIRS); + a.replaceBlock(Blocks.MOSSY_STONE_BRICK_WALL, Blocks.MOSSY_STONE_BRICK_WALL); + a.replaceBlock(Blocks.MOSSY_STONE_BRICKS, Blocks.STONE_BRICKS); + a.replaceBlock(Blocks.INFESTED_MOSSY_STONE_BRICKS, Blocks.INFESTED_STONE_BRICKS); + }); public MossItem(Item.Settings settings) { super(settings, 2, 1, UseAction.EAT, Toxicity.FAIR); diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java index 4b15900e..4da4c453 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java @@ -13,7 +13,7 @@ import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.VecHelper; import com.minelittlepony.unicopia.util.collection.StateMapping; -import com.minelittlepony.unicopia.util.collection.StateMapList; +import com.minelittlepony.unicopia.util.collection.BlockStateMap; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -43,7 +43,7 @@ import net.minecraft.world.World; public class FireSpell extends AbstractSpell.RangedAreaSpell implements Useable, DispenceableMagicEffect { - public final StateMapList affected = new StateMapList(); + public final BlockStateMap affected = new BlockStateMap(); private static final Shape visual_effect_region = new Sphere(false, 0.5); private static final Shape effect_range = new Sphere(false, 4); diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java index e3abdc7e..282bbf22 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java @@ -12,7 +12,7 @@ import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.VecHelper; import com.minelittlepony.unicopia.util.collection.StateMapping; -import com.minelittlepony.unicopia.util.collection.StateMapList; +import com.minelittlepony.unicopia.util.collection.BlockStateMap; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -37,7 +37,7 @@ import net.minecraft.world.World; public class IceSpell extends AbstractSpell.RangedAreaSpell implements Useable, DispenceableMagicEffect { - public final StateMapList affected = new StateMapList(); + public final BlockStateMap affected = new BlockStateMap(); public IceSpell() { affected.add(StateMapping.build( diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/InfernoSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/InfernoSpell.java index be118cb5..f2da325f 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/InfernoSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/InfernoSpell.java @@ -5,7 +5,7 @@ import com.minelittlepony.unicopia.magic.CastResult; import com.minelittlepony.unicopia.magic.Caster; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.collection.StateMapping; -import com.minelittlepony.unicopia.util.collection.StateMapList; +import com.minelittlepony.unicopia.util.collection.BlockStateMap; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -24,7 +24,7 @@ import net.minecraft.world.World; public class InfernoSpell extends FireSpell { - public final StateMapList hellFireAffected = new StateMapList(); + public final BlockStateMap hellFireAffected = new BlockStateMap(); public InfernoSpell() { hellFireAffected.add(StateMapping.build( diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/CriterionsRegistry.java b/src/main/java/com/minelittlepony/unicopia/mixin/CriterionsRegistry.java new file mode 100644 index 00000000..8144dcd0 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/mixin/CriterionsRegistry.java @@ -0,0 +1,15 @@ +package com.minelittlepony.unicopia.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.advancement.criterion.Criterion; +import net.minecraft.advancement.criterion.Criterions; + +@Mixin(Criterions.class) +public interface CriterionsRegistry { + @Invoker + static > T register(T object) { + throw new NullPointerException("mixin y u fail"); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java index 516259d9..f39e4442 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java @@ -67,4 +67,14 @@ public abstract class MixinLivingEntity extends Entity implements PonyContainer< private static void clinit(CallbackInfo info) { LivingEntityCapabilities.boostrap(); } + + // ---------- temporary + @Inject(method = "isClimbing()Z", at = @At("HEAD"), cancellable = true) + public void onIsClimbing(CallbackInfoReturnable info) { + LivingEntity self = (LivingEntity)(Object)this; + + if (!self.isSpectator() && self.getBlockState().getBlock() instanceof com.minelittlepony.unicopia.ducks.Climbable) { + info.setReturnValue(true); + } + } } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/DefaultTexturesRegistry.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/DefaultTexturesRegistry.java new file mode 100644 index 00000000..44bac031 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/DefaultTexturesRegistry.java @@ -0,0 +1,17 @@ +package com.minelittlepony.unicopia.mixin.client; + +import java.util.Set; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.client.render.model.ModelLoader; +import net.minecraft.client.util.SpriteIdentifier; + +@Mixin(ModelLoader.class) +public interface DefaultTexturesRegistry { + @Accessor("DEFAULT_TEXTURES") + static Set getDefaultTextures() { + return null; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMinecraftClient.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMinecraftClient.java new file mode 100644 index 00000000..a856b2c9 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMinecraftClient.java @@ -0,0 +1,52 @@ +package com.minelittlepony.unicopia.mixin.client; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import com.minelittlepony.unicopia.ducks.PickedItemSupplier; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SpawnEggItem; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.EntityHitResult; + +@Mixin(MinecraftClient.class) +public class MixinMinecraftClient { + @Redirect(method = "doItemPick()V", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/item/SpawnEggItem;forEntity(Lnet/minecraft/entity/EntityType;)Lnet/minecraft/item/SpawnEggItem;")) + private SpawnEggItem redirectSpawnEggForEntity(EntityType type) { + + MinecraftClient self = MinecraftClient.getInstance(); + + Entity entity = ((EntityHitResult)self.crosshairTarget).getEntity(); + + if (!(entity instanceof PickedItemSupplier)) { + return SpawnEggItem.forEntity(type); + } + + ItemStack pickedStack = ((PickedItemSupplier) entity).getPickedStack(); + + PlayerInventory inventory = self.player.inventory; + + int i = inventory.getSlotWithStack(pickedStack); + + if (self.player.abilities.creativeMode) { + inventory.addPickBlock(pickedStack); + self.interactionManager.clickCreativeStack(self.player.getStackInHand(Hand.MAIN_HAND), 36 + inventory.selectedSlot); + } else if (i != -1) { + if (PlayerInventory.isValidHotbarIndex(i)) { + inventory.selectedSlot = i; + } else { + self.interactionManager.pickFromInventory(i); + } + } + + return null; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/util/collection/StateMapList.java b/src/main/java/com/minelittlepony/unicopia/util/collection/BlockStateMap.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/util/collection/StateMapList.java rename to src/main/java/com/minelittlepony/unicopia/util/collection/BlockStateMap.java index f37a88bc..1a9ac89c 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/collection/StateMapList.java +++ b/src/main/java/com/minelittlepony/unicopia/util/collection/BlockStateMap.java @@ -14,7 +14,7 @@ import net.minecraft.state.property.Property; * A collection of block-state mappings. * */ -public class StateMapList extends ArrayList { +public class BlockStateMap extends ArrayList { private static final long serialVersionUID = 2602772651960588745L; public void removeBlock(Predicate mapper) { diff --git a/src/main/java/com/minelittlepony/unicopia/util/collection/Pool.java b/src/main/java/com/minelittlepony/unicopia/util/collection/Pool.java deleted file mode 100644 index eb8e2de1..00000000 --- a/src/main/java/com/minelittlepony/unicopia/util/collection/Pool.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.minelittlepony.unicopia.util.collection; - -import java.util.HashMap; -import java.util.Optional; - -public class Pool extends HashMap { - private static final long serialVersionUID = -4794854344664655790L; - - private final K defaultKey; - - @SuppressWarnings("unchecked") - public static Pool of(K def, Object...entries) { - Pool result = new Pool<>(def); - - for (int i = 0; i < entries.length - 1; i += 2) { - result.put((K)entries[i], (V)entries[i + 1]); - } - - return result; - } - - public Pool(K defKey) { - defaultKey = defKey; - } - - public Pool add(K key, V value) { - put(key, value); - - return this; - } - - @Override - public V get(Object key) { - if (key == null || !containsKey(key)) { - key = defaultKey; - } - - return super.get(key); - } - - public Optional getOptional(K key) { - return Optional.ofNullable(get(key)); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/util/collection/ReversableStateMapList.java b/src/main/java/com/minelittlepony/unicopia/util/collection/ReversableBlockStateMap.java similarity index 63% rename from src/main/java/com/minelittlepony/unicopia/util/collection/ReversableStateMapList.java rename to src/main/java/com/minelittlepony/unicopia/util/collection/ReversableBlockStateMap.java index 0cb2eb17..bb993b10 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/collection/ReversableStateMapList.java +++ b/src/main/java/com/minelittlepony/unicopia/util/collection/ReversableBlockStateMap.java @@ -1,11 +1,11 @@ package com.minelittlepony.unicopia.util.collection; -public class ReversableStateMapList extends StateMapList { +public class ReversableBlockStateMap extends BlockStateMap { private static final long serialVersionUID = 6154365988455383098L; - private final StateMapList inverse = new StateMapList(); + private final BlockStateMap inverse = new BlockStateMap(); - public StateMapList getInverse() { + public BlockStateMap getInverse() { return inverse; }