mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-23 21:38:00 +01:00
Porting to Fabric/Yarn/1.14 part 5
This commit is contained in:
parent
11de4c8821
commit
995c332814
36 changed files with 347 additions and 497 deletions
|
@ -22,6 +22,7 @@ import com.minelittlepony.unicopia.block.DutchDoorBlock;
|
||||||
import com.minelittlepony.unicopia.block.SugarBlock;
|
import com.minelittlepony.unicopia.block.SugarBlock;
|
||||||
import com.minelittlepony.unicopia.block.UPot;
|
import com.minelittlepony.unicopia.block.UPot;
|
||||||
import com.minelittlepony.unicopia.item.AppleItem;
|
import com.minelittlepony.unicopia.item.AppleItem;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.world.structure.CustomSaplingGenerator;
|
import com.minelittlepony.unicopia.world.structure.CustomSaplingGenerator;
|
||||||
import com.minelittlepony.unicopia.block.BlockTomatoPlant;
|
import com.minelittlepony.unicopia.block.BlockTomatoPlant;
|
||||||
import com.minelittlepony.unicopia.block.BlockCloudDoor;
|
import com.minelittlepony.unicopia.block.BlockCloudDoor;
|
||||||
|
@ -101,7 +102,9 @@ public class UBlocks {
|
||||||
return Registry.BLOCK.add(new Identifier(Unicopia.MODID, name), block);
|
return Registry.BLOCK.add(new Identifier(Unicopia.MODID, name), block);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void registerColors(ItemColors items, BlockColors blocks) {
|
public static void bootstrap() {
|
||||||
|
ItemColors items;
|
||||||
|
BlockColors blocks;
|
||||||
items.register((stack, tint) -> {
|
items.register((stack, tint) -> {
|
||||||
BlockState state = ((BlockItem)stack.getItem()).getBlock().getDefaultState();
|
BlockState state = ((BlockItem)stack.getItem()).getBlock().getDefaultState();
|
||||||
|
|
||||||
|
@ -121,8 +124,4 @@ public class UBlocks {
|
||||||
return GrassColors.getColor(0.5D, 1);
|
return GrassColors.getColor(0.5D, 1);
|
||||||
}, apple_leaves);
|
}, apple_leaves);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bootstrap() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ import com.minelittlepony.unicopia.enchanting.recipe.AffineIngredients;
|
||||||
import com.minelittlepony.unicopia.enchanting.recipe.SpecialRecipe;
|
import com.minelittlepony.unicopia.enchanting.recipe.SpecialRecipe;
|
||||||
import com.minelittlepony.unicopia.enchanting.recipe.SpellRecipe;
|
import com.minelittlepony.unicopia.enchanting.recipe.SpellRecipe;
|
||||||
import com.minelittlepony.unicopia.inventory.gui.SpellBookContainer;
|
import com.minelittlepony.unicopia.inventory.gui.SpellBookContainer;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.inventory.gui.GuiSpellBook;
|
import com.minelittlepony.unicopia.inventory.gui.GuiSpellBook;
|
||||||
import com.minelittlepony.unicopia.network.MsgPlayerAbility;
|
import com.minelittlepony.unicopia.network.MsgPlayerAbility;
|
||||||
import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
|
import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
|
||||||
|
|
|
@ -4,7 +4,7 @@ import java.util.Random;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.UItems;
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.CropBlock;
|
import net.minecraft.block.CropBlock;
|
||||||
|
|
|
@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.block;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.UItems;
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
|
|
@ -3,10 +3,10 @@ package com.minelittlepony.unicopia.client;
|
||||||
import com.minelittlepony.unicopia.InteractionManager;
|
import com.minelittlepony.unicopia.InteractionManager;
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
import com.minelittlepony.unicopia.UBlocks;
|
import com.minelittlepony.unicopia.UBlocks;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.client.gui.UHud;
|
import com.minelittlepony.unicopia.client.gui.UHud;
|
||||||
import com.minelittlepony.unicopia.entity.capabilities.ICamera;
|
import com.minelittlepony.unicopia.entity.capabilities.ICamera;
|
||||||
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
|
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
|
|
@ -4,8 +4,8 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.inventory.gui.SpellBookInventory;
|
import com.minelittlepony.unicopia.inventory.gui.SpellBookInventory;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
|
|
||||||
import net.minecraft.inventory.CraftingInventory;
|
import net.minecraft.inventory.CraftingInventory;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package com.minelittlepony.unicopia.enchanting.recipe;
|
package com.minelittlepony.unicopia.enchanting.recipe;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.inventory.gui.SpellBookInventory;
|
import com.minelittlepony.unicopia.inventory.gui.SpellBookInventory;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
|
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
|
||||||
|
|
||||||
import net.minecraft.inventory.CraftingInventory;
|
import net.minecraft.inventory.CraftingInventory;
|
||||||
|
|
|
@ -8,9 +8,9 @@ import com.minelittlepony.unicopia.EquinePredicates;
|
||||||
import com.minelittlepony.unicopia.Race;
|
import com.minelittlepony.unicopia.Race;
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
import com.minelittlepony.unicopia.UBlocks;
|
import com.minelittlepony.unicopia.UBlocks;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.UParticles;
|
import com.minelittlepony.unicopia.UParticles;
|
||||||
import com.minelittlepony.unicopia.ability.PowerCloudBase.ICloudEntity;
|
import com.minelittlepony.unicopia.ability.PowerCloudBase.ICloudEntity;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.particles.ParticleEmitter;
|
import com.minelittlepony.unicopia.particles.ParticleEmitter;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package com.minelittlepony.unicopia.entity;
|
package com.minelittlepony.unicopia.entity;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.EquinePredicates;
|
import com.minelittlepony.unicopia.EquinePredicates;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
|
|
||||||
import net.minecraft.container.Container;
|
import net.minecraft.container.Container;
|
||||||
import net.minecraft.container.NameableContainerProvider;
|
import net.minecraft.container.NameableContainerProvider;
|
||||||
import net.minecraft.entity.EntityType;
|
import net.minecraft.entity.EntityType;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.EquinePredicates;
|
import com.minelittlepony.unicopia.EquinePredicates;
|
||||||
import com.minelittlepony.unicopia.Race;
|
import com.minelittlepony.unicopia.Race;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.magic.Affinity;
|
import com.minelittlepony.unicopia.magic.Affinity;
|
||||||
import com.minelittlepony.unicopia.magic.ICaster;
|
import com.minelittlepony.unicopia.magic.ICaster;
|
||||||
import com.minelittlepony.unicopia.magic.IMagicEffect;
|
import com.minelittlepony.unicopia.magic.IMagicEffect;
|
||||||
|
|
|
@ -9,7 +9,6 @@ import com.google.common.collect.Maps;
|
||||||
import com.minelittlepony.unicopia.Race;
|
import com.minelittlepony.unicopia.Race;
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
import com.minelittlepony.unicopia.UEffects;
|
import com.minelittlepony.unicopia.UEffects;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.Unicopia;
|
import com.minelittlepony.unicopia.Unicopia;
|
||||||
import com.minelittlepony.unicopia.ability.IAbilityReceiver;
|
import com.minelittlepony.unicopia.ability.IAbilityReceiver;
|
||||||
import com.minelittlepony.unicopia.enchanting.PageState;
|
import com.minelittlepony.unicopia.enchanting.PageState;
|
||||||
|
@ -19,6 +18,7 @@ import com.minelittlepony.unicopia.entity.IFood;
|
||||||
import com.minelittlepony.unicopia.entity.IGravity;
|
import com.minelittlepony.unicopia.entity.IGravity;
|
||||||
import com.minelittlepony.unicopia.entity.IInventory;
|
import com.minelittlepony.unicopia.entity.IInventory;
|
||||||
import com.minelittlepony.unicopia.entity.ITrap;
|
import com.minelittlepony.unicopia.entity.ITrap;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.magic.Affinity;
|
import com.minelittlepony.unicopia.magic.Affinity;
|
||||||
import com.minelittlepony.unicopia.magic.IAttachedEffect;
|
import com.minelittlepony.unicopia.magic.IAttachedEffect;
|
||||||
import com.minelittlepony.unicopia.magic.IHeldEffect;
|
import com.minelittlepony.unicopia.magic.IHeldEffect;
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.forgebullshit;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides access to the built in texture locations.
|
|
||||||
* This is needed to add things like custom backgrounds for slots.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public final class BuildInTexturesBakery extends ModelBakery {
|
|
||||||
private BuildInTexturesBakery() {
|
|
||||||
super(null, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Set<Identifier> getBuiltInTextures() {
|
|
||||||
return LOCATIONS_BUILTIN_TEXTURES;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.forgebullshit;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
import net.minecraft.item.Item;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public class ItemModels {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers models and item variants for all of the provided textures.
|
|
||||||
*/
|
|
||||||
public static void registerAll(Item...items) {
|
|
||||||
for (Item i : items) {
|
|
||||||
registerAll(i, 1, new ModelIdentifier(i.getRegistryName().toString()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void registerAll(@Nonnull Item item, int maxMeta, ModelIdentifier resource) {
|
|
||||||
for (int i = 0; i < maxMeta; i++) {
|
|
||||||
ModelLoader.setCustomModelIdentifier(item, i, resource);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a model for the given item and all associated variants.
|
|
||||||
*/
|
|
||||||
public static void registerAllVariants(@Nonnull Item item, String... variants) {
|
|
||||||
registerAllVariants(item, item.getRegistryName().getNamespace(), variants);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void registerAllVariants(@Nonnull Item item, String domain, String... variants) {
|
|
||||||
for (int i = 0; i < variants.length; i++) {
|
|
||||||
ModelLoader.setCustomModelIdentifier(item, i, new ModelIdentifier(domain + ":" + variants[i]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -9,7 +9,13 @@ import org.apache.logging.log4j.Logger;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Streams;
|
import com.google.common.collect.Streams;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemGroup;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.recipe.Ingredient;
|
||||||
|
import net.minecraft.recipe.Recipe;
|
||||||
|
import net.minecraft.recipe.RecipeType;
|
||||||
|
import net.minecraft.util.DefaultedList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An Ore Replacer.
|
* An Ore Replacer.
|
||||||
|
@ -25,25 +31,24 @@ public class OreReplacer {
|
||||||
public static final IIngredientRemapper VANILLA = new IIngredientRemapper() {
|
public static final IIngredientRemapper VANILLA = new IIngredientRemapper() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canRemap(IRecipe recipe) {
|
public boolean canRemap(Recipe<?> recipe) {
|
||||||
return recipe.getClass() == ShapedRecipes.class
|
return recipe.getType() == RecipeType.CRAFTING;
|
||||||
|| recipe.getClass() == ShapelessRecipes.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int replaceIngredients(OreReplacer sender, IRecipe recipe) {
|
public int replaceIngredients(OreReplacer sender, Recipe<?> recipe) {
|
||||||
NonNullList<Ingredient> ingredients = recipe.getIngredients();
|
DefaultedList<Ingredient> ingredients = recipe.getPreviewInputs();
|
||||||
|
|
||||||
int replacements = 0;
|
int replacements = 0;
|
||||||
|
|
||||||
for (int i = 0; i < ingredients.size(); i++) {
|
for (int i = 0; i < ingredients.size(); i++) {
|
||||||
Ingredient ingredient = ingredients.get(i);
|
Ingredient ingredient = ingredients.get(i);
|
||||||
|
|
||||||
NonNullList<ItemStack> newStacks = NonNullList.create();
|
DefaultedList<ItemStack> newStacks = DefaultedList.of();
|
||||||
|
|
||||||
boolean altered = false;
|
boolean altered = false;
|
||||||
|
|
||||||
ItemStack[] stacks = ingredient.getMatchingStacks();
|
ItemStack[] stacks = ingredient.getStackArray();
|
||||||
|
|
||||||
for (int k = 0; k < stacks.length; k++) {
|
for (int k = 0; k < stacks.length; k++) {
|
||||||
ItemStack stack = stacks[k];
|
ItemStack stack = stacks[k];
|
||||||
|
@ -59,7 +64,7 @@ public class OreReplacer {
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
replacements++;
|
replacements++;
|
||||||
ingredients.set(i, Ingredient.fromStacks(newStacks.stream().distinct().toArray(ItemStack[]::new)));
|
ingredients.set(i, Ingredient.ofStacks(newStacks.stream().distinct().toArray(ItemStack[]::new)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +111,7 @@ public class OreReplacer {
|
||||||
log.info("Replaced {} ingredients.", replacements);
|
log.info("Replaced {} ingredients.", replacements);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean replaceOre(ItemStack stack, NonNullList<ItemStack> newStacks) {
|
public boolean replaceOre(ItemStack stack, DefaultedList<ItemStack> newStacks) {
|
||||||
return ores.stream().filter(ore -> ore.matches(stack)).peek(ore ->
|
return ores.stream().filter(ore -> ore.matches(stack)).peek(ore ->
|
||||||
ore.getSubItems(stack, newStacks)
|
ore.getSubItems(stack, newStacks)
|
||||||
).findFirst().isPresent();
|
).findFirst().isPresent();
|
||||||
|
@ -114,22 +119,22 @@ public class OreReplacer {
|
||||||
|
|
||||||
public interface IIngredientRemapper {
|
public interface IIngredientRemapper {
|
||||||
|
|
||||||
boolean canRemap(IRecipe recipe);
|
boolean canRemap(Recipe<?> recipe);
|
||||||
|
|
||||||
int replaceIngredients(OreReplacer sender, IRecipe recipe);
|
int replaceIngredients(OreReplacer sender, Recipe<?> recipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface IOre {
|
public interface IOre {
|
||||||
boolean matches(ItemStack stack);
|
boolean matches(ItemStack stack);
|
||||||
|
|
||||||
default void getSubItems(ItemStack stack, NonNullList<ItemStack> newStacks) {
|
default void getSubItems(ItemStack stack, DefaultedList<ItemStack> newStacks) {
|
||||||
NonNullList<ItemStack> newList = NonNullList.create();
|
DefaultedList<ItemStack> newList = DefaultedList.of();
|
||||||
|
|
||||||
stack.getItem().getSubItems(CreativeTabs.SEARCH, newList);
|
stack.getItem().appendStacks(ItemGroup.SEARCH, newList);
|
||||||
|
|
||||||
if (stack.hasTagCompound()) {
|
if (stack.hasTag()) {
|
||||||
newList.forEach(i -> i.setTagCompound(stack.getTagCompound().copy()));
|
newList.forEach(i -> i.setTag((CompoundTag)stack.getTag().copy()));
|
||||||
}
|
}
|
||||||
|
|
||||||
newStacks.addAll(newList);
|
newStacks.addAll(newList);
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.forgebullshit;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.block.SnowBlock;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.util.math.Direction;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A fixed ItemSnow class
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public class UnFuckedItemSnow extends ItemSnow {
|
|
||||||
|
|
||||||
public UnFuckedItemSnow(Block block) {
|
|
||||||
super(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlaceBlockOnSide(World world, BlockPos pos, Direction side, PlayerEntity player, ItemStack stack) {
|
|
||||||
BlockState state = world.getBlockState(pos);
|
|
||||||
|
|
||||||
// Check explicitly for the maximum layers.
|
|
||||||
// Without this layered blocks get stuck on the second layer because of a change introduced with Forge's patches.
|
|
||||||
if (state.getBlock() instanceof SnowBlock && state.getValue(SnowBlock.LAYERS) < 8) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// return (state.getBlock() != net.minecraft.init.Blocks.SNOW_LAYER || ((Integer)state.getValue(BlockSnow.LAYERS)) > 7) ? super.canPlaceBlockOnSide(world, pos, side, player, stack) : true;
|
|
||||||
return super.canPlaceBlockOnSide(world, pos, side, player, stack);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -8,7 +8,6 @@ import javax.annotation.Nullable;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import com.minelittlepony.unicopia.InteractionManager;
|
import com.minelittlepony.unicopia.InteractionManager;
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.ducks.IItemEntity;
|
import com.minelittlepony.unicopia.ducks.IItemEntity;
|
||||||
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
|
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
|
||||||
import com.minelittlepony.unicopia.magic.Affinity;
|
import com.minelittlepony.unicopia.magic.Affinity;
|
||||||
|
|
|
@ -1,37 +1,29 @@
|
||||||
package com.minelittlepony.unicopia.item;
|
package com.minelittlepony.unicopia.item;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.ducks.IItemEntity;
|
import com.minelittlepony.unicopia.ducks.IItemEntity;
|
||||||
import com.minelittlepony.unicopia.entity.capabilities.ItemEntityCapabilities;
|
import com.minelittlepony.unicopia.entity.capabilities.ItemEntityCapabilities;
|
||||||
import com.minelittlepony.unicopia.item.consumables.IEdible;
|
import com.minelittlepony.unicopia.item.consumables.Toxic;
|
||||||
import com.minelittlepony.unicopia.item.consumables.Toxicity;
|
import com.minelittlepony.unicopia.item.consumables.Toxicity;
|
||||||
import com.minelittlepony.util.collection.Pool;
|
|
||||||
import com.minelittlepony.util.collection.Weighted;
|
|
||||||
|
|
||||||
import net.minecraft.client.item.TooltipContext;
|
import net.minecraft.client.item.TooltipContext;
|
||||||
import net.minecraft.entity.EntityType;
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.entity.ItemEntity;
|
import net.minecraft.entity.ItemEntity;
|
||||||
import net.minecraft.item.FoodComponent;
|
import net.minecraft.item.FoodComponent;
|
||||||
import net.minecraft.item.FoodComponents;
|
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemGroup;
|
import net.minecraft.item.ItemGroup;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.particle.ParticleTypes;
|
import net.minecraft.particle.ParticleTypes;
|
||||||
import net.minecraft.tag.BlockTags;
|
|
||||||
import net.minecraft.text.LiteralText;
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class AppleItem extends Item implements IEdible, ItemEntityCapabilities.TickableItem {
|
public class AppleItem extends Item implements Toxic, ItemEntityCapabilities.TickableItem {
|
||||||
|
|
||||||
private static final Pool<Object, Weighted<Supplier<ItemStack>>> typeVariantMap = Pool.of(PlanksBlock.Type.OAK,
|
// TODO: Move this to a datapack
|
||||||
|
/*private static final Pool<Object, Weighted<Supplier<ItemStack>>> TYPE_VARIANT_POOL = Pool.of(PlanksBlock.Type.OAK,
|
||||||
PlanksBlock.Type.OAK, new Weighted<Supplier<ItemStack>>()
|
PlanksBlock.Type.OAK, new Weighted<Supplier<ItemStack>>()
|
||||||
.put(1, () -> new ItemStack(UItems.rotten_apple))
|
.put(1, () -> new ItemStack(UItems.rotten_apple))
|
||||||
.put(2, () -> new ItemStack(UItems.green_apple))
|
.put(2, () -> new ItemStack(UItems.green_apple))
|
||||||
|
@ -58,13 +50,14 @@ public class AppleItem extends Item implements IEdible, ItemEntityCapabilities.T
|
||||||
.put(2, () -> new ItemStack(UItems.sweet_apple))
|
.put(2, () -> new ItemStack(UItems.sweet_apple))
|
||||||
.put(5, () -> new ItemStack(UItems.zap_apple)
|
.put(5, () -> new ItemStack(UItems.zap_apple)
|
||||||
)
|
)
|
||||||
);
|
);*/
|
||||||
|
|
||||||
public static ItemStack getRandomItemStack(Object variant) {
|
public static ItemStack getRandomItemStack(Object variant) {
|
||||||
return typeVariantMap.getOptional(variant)
|
return new ItemStack(UItems.VanillaOverrides.red_apple);
|
||||||
|
/*return TYPE_VARIANT_POOL.getOptional(variant)
|
||||||
.flatMap(Weighted::get)
|
.flatMap(Weighted::get)
|
||||||
.map(Supplier::get)
|
.map(Supplier::get)
|
||||||
.orElse(ItemStack.EMPTY);
|
.orElse(ItemStack.EMPTY);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public AppleItem(FoodComponent components) {
|
public AppleItem(FoodComponent components) {
|
||||||
|
@ -111,11 +104,11 @@ public class AppleItem extends Item implements IEdible, ItemEntityCapabilities.T
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void appendTooltip(ItemStack stack, @Nullable World worldIn, List<Text> tooltip, TooltipContext context) {
|
public void appendTooltip(ItemStack stack, @Nullable World worldIn, List<Text> tooltip, TooltipContext context) {
|
||||||
tooltip.add(getToxicityLevel(stack).getTooltip());
|
tooltip.add(getToxicity(stack).getTooltip());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
public Toxicity getToxicity(ItemStack stack) {
|
||||||
return Toxicity.SAFE;
|
return Toxicity.SAFE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.minelittlepony.unicopia.item;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.magic.items.IDispensable;
|
import com.minelittlepony.unicopia.magic.items.IDispensable;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.DispenserBlock;
|
import net.minecraft.block.DispenserBlock;
|
||||||
|
|
|
@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.item;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
import com.minelittlepony.unicopia.item.consumables.EdibleItem;
|
import com.minelittlepony.unicopia.item.consumables.ToxicItem;
|
||||||
import com.minelittlepony.unicopia.item.consumables.Toxicity;
|
import com.minelittlepony.unicopia.item.consumables.Toxicity;
|
||||||
import com.minelittlepony.util.collection.ReversableStateMapList;
|
import com.minelittlepony.util.collection.ReversableStateMapList;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
@ -14,10 +14,11 @@ import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.sound.SoundCategory;
|
import net.minecraft.sound.SoundCategory;
|
||||||
import net.minecraft.sound.SoundEvents;
|
import net.minecraft.sound.SoundEvents;
|
||||||
|
import net.minecraft.util.UseAction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class MossItem extends EdibleItem {
|
public class MossItem extends ToxicItem {
|
||||||
|
|
||||||
public static final ReversableStateMapList AFFECTED = new ReversableStateMapList();
|
public static final ReversableStateMapList AFFECTED = new ReversableStateMapList();
|
||||||
|
|
||||||
|
@ -35,7 +36,7 @@ public class MossItem extends EdibleItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
public MossItem(Item.Settings settings) {
|
public MossItem(Item.Settings settings) {
|
||||||
super(settings);
|
super(settings, 2, 1, UseAction.EAT, Toxicity.FAIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean tryConvert(World world, BlockState state, BlockPos pos, @Nullable PlayerEntity player) {
|
public boolean tryConvert(World world, BlockState state, BlockPos pos, @Nullable PlayerEntity player) {
|
||||||
|
@ -61,7 +62,7 @@ public class MossItem extends EdibleItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
public Toxicity getToxicity(ItemStack stack) {
|
||||||
return Toxicity.MILD;
|
return Toxicity.MILD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,71 +1,37 @@
|
||||||
package com.minelittlepony.unicopia;
|
package com.minelittlepony.unicopia.item;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.item.AlicornAmuletItem;
|
import com.minelittlepony.unicopia.item.consumables.DynamicToxicItem;
|
||||||
import com.minelittlepony.unicopia.item.SugaryItem;
|
import com.minelittlepony.unicopia.item.consumables.ToxicBlockItem;
|
||||||
import com.minelittlepony.unicopia.item.AppleItem;
|
import com.minelittlepony.unicopia.item.consumables.ToxicItem;
|
||||||
import com.minelittlepony.unicopia.item.CloudPlacerItem;
|
|
||||||
import com.minelittlepony.unicopia.item.ExtendedShearsItem;
|
|
||||||
import com.minelittlepony.unicopia.item.CursedMagicGemItem;
|
|
||||||
import com.minelittlepony.unicopia.item.EnchantedStaffItem;
|
|
||||||
import com.minelittlepony.unicopia.item.MossItem;
|
|
||||||
import com.minelittlepony.unicopia.item.BagOfHoldingItem;
|
|
||||||
import com.minelittlepony.unicopia.item.RottenAppleItem;
|
|
||||||
import com.minelittlepony.unicopia.item.RottenTomatoItem;
|
|
||||||
import com.minelittlepony.unicopia.item.SpearItem;
|
|
||||||
import com.minelittlepony.unicopia.item.MagicGemItem;
|
|
||||||
import com.minelittlepony.unicopia.item.SpellbookItem;
|
|
||||||
import com.minelittlepony.unicopia.item.StaffItem;
|
|
||||||
import com.minelittlepony.unicopia.item.TomatoItem;
|
|
||||||
import com.minelittlepony.unicopia.item.TomatoSeedsItem;
|
|
||||||
import com.minelittlepony.unicopia.item.ZapAppleItem;
|
|
||||||
import com.minelittlepony.unicopia.item.PredicatedBlockItem;
|
|
||||||
import com.minelittlepony.unicopia.item.StickItem;
|
|
||||||
import com.minelittlepony.unicopia.item.URecord;
|
|
||||||
import com.minelittlepony.unicopia.item.consumables.BushToxicityDeterminent;
|
|
||||||
import com.minelittlepony.unicopia.item.consumables.CookedToxicityDeterminent;
|
|
||||||
import com.minelittlepony.unicopia.item.consumables.FlowerToxicityDeterminent;
|
|
||||||
import com.minelittlepony.unicopia.item.consumables.DelegatedEdibleItem;
|
|
||||||
import com.minelittlepony.unicopia.item.consumables.Toxicity;
|
import com.minelittlepony.unicopia.item.consumables.Toxicity;
|
||||||
import com.minelittlepony.unicopia.item.consumables.DelegateFoodItem;
|
import com.minelittlepony.unicopia.item.consumables.Toxin;
|
||||||
|
import com.minelittlepony.unicopia.item.consumables.DynamicToxicBlockItem;
|
||||||
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
|
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
|
||||||
import com.minelittlepony.unicopia.magic.spells.SpellScorch;
|
import com.minelittlepony.unicopia.magic.spells.SpellScorch;
|
||||||
|
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemGroup;
|
import net.minecraft.item.ItemGroup;
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.color.item.ItemColors;
|
import net.minecraft.client.color.item.ItemColors;
|
||||||
|
import net.minecraft.item.AliasedBlockItem;
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.FoodComponent;
|
import net.minecraft.item.FoodComponent;
|
||||||
import net.minecraft.item.FoodComponents;
|
import net.minecraft.item.FoodComponents;
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
import net.minecraft.item.TallBlockItem;
|
import net.minecraft.item.TallBlockItem;
|
||||||
import net.minecraft.item.Item.Settings;
|
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.UseAction;
|
import net.minecraft.util.UseAction;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
|
|
||||||
import static com.minelittlepony.unicopia.EquinePredicates.*;
|
import static com.minelittlepony.unicopia.EquinePredicates.*;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.ServerInteractionManager;
|
import com.minelittlepony.unicopia.ServerInteractionManager;
|
||||||
import com.minelittlepony.unicopia.Unicopia;
|
import com.minelittlepony.unicopia.UBlocks;
|
||||||
import com.minelittlepony.unicopia.entity.ConstructionCloudEntity;
|
import com.minelittlepony.unicopia.UEntities;
|
||||||
import com.minelittlepony.unicopia.entity.RacingCloudEntity;
|
import com.minelittlepony.unicopia.USounds;
|
||||||
import com.minelittlepony.unicopia.entity.WildCloudEntity;
|
|
||||||
import com.minelittlepony.unicopia.forgebullshit.BuildInTexturesBakery;
|
|
||||||
import com.minelittlepony.unicopia.forgebullshit.OreReplacer;
|
|
||||||
import com.minelittlepony.unicopia.forgebullshit.UnFuckedItemSnow;
|
|
||||||
|
|
||||||
public class UItems {
|
public class UItems {
|
||||||
|
|
||||||
private static final StickItem stick = register(new StickItem(), "minecraft", "stick");
|
|
||||||
private static final ExtendedShearsItem shears = register(new ExtendedShearsItem(), "minecraft", "shears");
|
|
||||||
|
|
||||||
public static final AppleItem red_apple = register(new AppleItem(FoodComponents.APPLE), "minecraft", "apple");
|
|
||||||
public static final AppleItem green_apple = register(new AppleItem(FoodComponents.APPLE), "apple_green");
|
public static final AppleItem green_apple = register(new AppleItem(FoodComponents.APPLE), "apple_green");
|
||||||
public static final AppleItem sweet_apple = register(new AppleItem(FoodComponents.APPLE), "apple_sweet");
|
public static final AppleItem sweet_apple = register(new AppleItem(FoodComponents.APPLE), "apple_sweet");
|
||||||
public static final AppleItem sour_apple = register(new AppleItem(FoodComponents.APPLE), "apple_sour");
|
public static final AppleItem sour_apple = register(new AppleItem(FoodComponents.APPLE), "apple_sour");
|
||||||
|
@ -130,10 +96,12 @@ public class UItems {
|
||||||
|
|
||||||
public static final MossItem moss = register(new MossItem(new Item.Settings()), "moss");
|
public static final MossItem moss = register(new MossItem(new Item.Settings()), "moss");
|
||||||
|
|
||||||
public static final Item alfalfa_seeds = new ItemSeedFood(1, 4, UBlocks.alfalfa, Blocks.FARMLAND)
|
public static final Item alfalfa_seeds = register(new AliasedBlockItem(UBlocks.alfalfa, new Item.Settings()
|
||||||
.setTranslationKey("alfalfa_seeds")
|
.group(ItemGroup.MATERIALS)
|
||||||
.setRegistryName(Unicopia.MODID, "alfalfa_seeds")
|
.food(new FoodComponent.Builder()
|
||||||
.setCreativeTab(CreativeTabs.MATERIALS);
|
.hunger(1)
|
||||||
|
.saturationModifier(4)
|
||||||
|
.build())), "alfalfa_seeds");
|
||||||
|
|
||||||
public static final Item enchanted_torch = register(new BlockItem(UBlocks.enchanted_torch, new Item.Settings().group(ItemGroup.DECORATIONS)), "enchanted_torch");
|
public static final Item enchanted_torch = register(new BlockItem(UBlocks.enchanted_torch, new Item.Settings().group(ItemGroup.DECORATIONS)), "enchanted_torch");
|
||||||
|
|
||||||
|
@ -167,85 +135,36 @@ public class UItems {
|
||||||
public static final TomatoItem cloudsdale_tomato = register(new TomatoItem(16, 4), "cloudsdale_tomato");
|
public static final TomatoItem cloudsdale_tomato = register(new TomatoItem(16, 4), "cloudsdale_tomato");
|
||||||
public static final RottenTomatoItem rotten_cloudsdale_tomato = register(new RottenTomatoItem(5, 34), "rotten_cloudsdale_tomato");
|
public static final RottenTomatoItem rotten_cloudsdale_tomato = register(new RottenTomatoItem(5, 34), "rotten_cloudsdale_tomato");
|
||||||
|
|
||||||
public static final TomatoSeedsItem tomato_seeds = new TomatoSeedsItem(Unicopia.MODID, "tomato_seeds");
|
public static final TomatoSeedsItem tomato_seeds = register(new TomatoSeedsItem(), "tomato_seeds");
|
||||||
|
|
||||||
public static final Item apple_seeds = new UItemDecoration(UBlocks.apple_tree, Unicopia.MODID, "apple_seeds");
|
public static final Item apple_seeds = register(new BlockItem(UBlocks.apple_tree, new Item.Settings().group(ItemGroup.DECORATIONS)), "apple_seeds");
|
||||||
|
public static final Item apple_leaves = register(new BlockItem(UBlocks.apple_leaves, new Item.Settings().group(ItemGroup.DECORATIONS)), "apple_leaves");
|
||||||
|
|
||||||
public static final Item apple_leaves = new BlockItem(UBlocks.apple_leaves);
|
public static final Item daffodil_daisy_sandwich = register(new DynamicToxicItem(new Item.Settings(), 3, 2, UseAction.EAT, Toxicity::fromStack), "daffodil_daisy_sandwich");
|
||||||
|
public static final Item hay_burger = register(new DynamicToxicItem(new Item.Settings(), 3, 4, UseAction.EAT, Toxicity::fromStack), "hay_burger");
|
||||||
public static final Item double_plant = new DelegateFoodItem(Blocks.TALL_GRASS, stack ->
|
public static final Item hay_fries = register(new ToxicItem(new Item.Settings(), 1, 5, UseAction.EAT, Toxicity.SAFE), "hay_fries");
|
||||||
BlockDoublePlant.EnumPlantType.byMetadata(stack.getMetadata()).getTranslationKey()
|
public static final Item salad = register(new DynamicToxicItem(new Item.Settings().recipeRemainder(Items.BOWL), 4, 2, UseAction.EAT, Toxicity::fromStack), "salad");
|
||||||
).setFoodDelegate(new DelegatedEdibleItem(new BushToxicityDeterminent()))
|
|
||||||
.setTranslationKey("doublePlant");
|
|
||||||
|
|
||||||
public static final Item tall_grass = new DelegateFoodItem(Blocks.GRASS, stack -> {
|
|
||||||
switch (stack.getMetadata()) {
|
|
||||||
case 0: return "shrub";
|
|
||||||
case 1: return "grass";
|
|
||||||
case 2: return "fern";
|
|
||||||
default: return "";
|
|
||||||
}
|
|
||||||
}).setFoodDelegate(new DelegatedEdibleItem(stack -> {
|
|
||||||
switch (stack.getMetadata()) {
|
|
||||||
default:
|
|
||||||
case 0: return Toxicity.SAFE;
|
|
||||||
case 1: return Toxicity.SAFE;
|
|
||||||
case 2: return Toxicity.SEVERE;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
public static final Item yellow_flower = new DelegateFoodItem(Blocks.YELLOW_FLOWER, stack ->
|
|
||||||
BlockFlower.EnumFlowerType.getType(BlockFlower.EnumFlowerColor.YELLOW, stack.getMetadata()).getTranslationKey()
|
|
||||||
).setFoodDelegate(new DelegatedEdibleItem(new FlowerToxicityDeterminent(BlockFlower.EnumFlowerColor.YELLOW)))
|
|
||||||
.setTranslationKey("flower");
|
|
||||||
|
|
||||||
public static final Item red_flower = new DelegateFoodItem(Blocks.RED_FLOWER, stack ->
|
|
||||||
BlockFlower.EnumFlowerType.getType(BlockFlower.EnumFlowerColor.RED, stack.getMetadata()).getTranslationKey()
|
|
||||||
).setFoodDelegate(new DelegatedEdibleItem(new FlowerToxicityDeterminent(BlockFlower.EnumFlowerColor.RED)))
|
|
||||||
.setTranslationKey("rose");
|
|
||||||
|
|
||||||
public static final Item daffodil_daisy_sandwich = new DelegatedEdibleItem(Unicopia.MODID, "daffodil_daisy_sandwich", 3, 2, CookedToxicityDeterminent.instance)
|
|
||||||
.setHasSubtypes(true);
|
|
||||||
public static final Item hay_burger = new DelegatedEdibleItem(Unicopia.MODID, "hay_burger", 3, 4, CookedToxicityDeterminent.instance)
|
|
||||||
.setHasSubtypes(true);
|
|
||||||
public static final Item hay_fries = new DelegatedEdibleItem(Unicopia.MODID, "hay_fries", 1, 5, stack -> Toxicity.SAFE);
|
|
||||||
public static final Item salad = new DelegatedEdibleItem(Unicopia.MODID, "salad", 4, 2, CookedToxicityDeterminent.instance)
|
|
||||||
.setHasSubtypes(true)
|
|
||||||
.setContainerItem(Items.BOWL);
|
|
||||||
|
|
||||||
public static final Item wheat_worms = new DelegatedEdibleItem(Unicopia.MODID, "wheat_worms", 1, 0, stack -> Toxicity.SEVERE);
|
|
||||||
|
|
||||||
|
public static final Item wheat_worms = register(new ToxicItem(new Item.Settings(), 1, 0, UseAction.EAT, Toxicity.SEVERE), "wheat_worms");
|
||||||
public static final Item mug = register(new Item(new Item.Settings().group(ItemGroup.MATERIALS)), "mug");
|
public static final Item mug = register(new Item(new Item.Settings().group(ItemGroup.MATERIALS)), "mug");
|
||||||
public static final Item apple_cider = new DelegatedEdibleItem(Unicopia.MODID, "apple_cider", 4, 2, stack -> Toxicity.MILD)
|
public static final Item apple_cider = register(new ToxicItem(new Item.Settings().recipeRemainder(mug), 4, 2, UseAction.DRINK, Toxicity.MILD), "apple_cider");
|
||||||
.setUseAction(UseAction.DRINK)
|
public static final Item juice = register(new ToxicItem(new Item.Settings().recipeRemainder(Items.GLASS_BOTTLE), 2, 2, UseAction.DRINK, Toxicity.SAFE), "juice");
|
||||||
.setContainerItem(mug)
|
public static final Item burned_juice = register(new ToxicItem(new Item.Settings().recipeRemainder(Items.GLASS_BOTTLE), 3, 1, UseAction.DRINK, Toxicity.FAIR), "burned_juice");
|
||||||
.setFull3D();
|
|
||||||
public static final Item juice = new DelegatedEdibleItem(Unicopia.MODID, "juice", 2, 2, stack -> Toxicity.SAFE)
|
|
||||||
.setUseAction(UseAction.DRINK)
|
|
||||||
.setContainerItem(Items.GLASS_BOTTLE);
|
|
||||||
public static final Item burned_juice = new DelegatedEdibleItem(Unicopia.MODID, "burned_juice", 3, 1, stack -> Toxicity.FAIR)
|
|
||||||
.setUseAction(UseAction.DRINK)
|
|
||||||
.setContainerItem(Items.GLASS_BOTTLE);
|
|
||||||
|
|
||||||
private static <T extends Item> T register(T item, String namespace, String name) {
|
private static <T extends Item> T register(T newItem, Item oldItem) {
|
||||||
return Registry.ITEM.add(new Identifier(namespace, name), item);
|
return Registry.ITEM.add(Registry.ITEM.getId(oldItem), newItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static <T extends Item> T register(T item, String name) {
|
private static <T extends Item> T register(T item, String name) {
|
||||||
return register(item, name);
|
return register(item, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bootstrap() {
|
public static void bootstrap() {
|
||||||
RegistryLockSpinner.open(Item.REGISTRY, Items.class, r -> r
|
|
||||||
.replace(Items.APPLE, red_apple)
|
|
||||||
.replace(Item.getItemFromBlock(Blocks.TALLGRASS), tall_grass)
|
|
||||||
.replace(Item.getItemFromBlock(Blocks.DOUBLE_PLANT), double_plant)
|
|
||||||
.replace(Item.getItemFromBlock(Blocks.YELLOW_FLOWER), yellow_flower)
|
|
||||||
.replace(Item.getItemFromBlock(Blocks.RED_FLOWER), red_flower));
|
|
||||||
|
|
||||||
if (ServerInteractionManager.isClientSide()) {
|
if (ServerInteractionManager.isClientSide()) {
|
||||||
BuildInTexturesBakery.getBuiltInTextures().add(new Identifier(Unicopia.MODID, "items/empty_slot_gem"));
|
//BuildInTexturesBakery.getBuiltInTextures().add(new Identifier(Unicopia.MODID, "items/empty_slot_gem"));
|
||||||
|
|
||||||
ItemColors registry;
|
ItemColors registry = null;
|
||||||
registry.register((stack, tint) -> {
|
registry.register((stack, tint) -> {
|
||||||
if (MAGI.test(MinecraftClient.getInstance().player)) {
|
if (MAGI.test(MinecraftClient.getInstance().player)) {
|
||||||
return SpellRegistry.instance().getSpellTintFromStack(stack);
|
return SpellRegistry.instance().getSpellTintFromStack(stack);
|
||||||
|
@ -255,12 +174,36 @@ public class UItems {
|
||||||
}, spell, curse);
|
}, spell, curse);
|
||||||
}
|
}
|
||||||
|
|
||||||
FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(zap_apple), new ItemStack(cooked_zap_apple), 0.1F);
|
// FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(zap_apple), new ItemStack(cooked_zap_apple), 0.1F);
|
||||||
FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(juice), new ItemStack(burned_juice), 0);
|
// FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(juice), new ItemStack(burned_juice), 0);
|
||||||
FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(cuccoon), new ItemStack(chitin_shell), 0.3F);
|
// FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(cuccoon), new ItemStack(chitin_shell), 0.3F);
|
||||||
|
}
|
||||||
|
|
||||||
new OreReplacer()
|
static class VanillaOverrides {
|
||||||
.registerAll(stack -> stack.getItem().getRegistryName().equals(red_apple.getRegistryName()))
|
public static final StickItem stick = register(new StickItem(), Items.STICK);
|
||||||
.done();
|
public static final ExtendedShearsItem shears = register(new ExtendedShearsItem(), Items.SHEARS);
|
||||||
|
|
||||||
|
public static final AppleItem red_apple = register(new AppleItem(FoodComponents.APPLE), Items.APPLE);
|
||||||
|
|
||||||
|
public static final Item grass = register(new DynamicToxicBlockItem(Blocks.GRASS, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE, Toxin.NAUSEA), Items.GRASS);
|
||||||
|
public static final Item fern = register(new DynamicToxicBlockItem(Blocks.FERN, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SEVERE, Toxin.STRENGTH), Items.FERN);
|
||||||
|
public static final Item dead_bush = register(new DynamicToxicBlockItem(Blocks.DEAD_BUSH, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SEVERE, Toxin.NAUSEA), Items.DEAD_BUSH);
|
||||||
|
|
||||||
|
public static final Item dandelion = register(new ToxicBlockItem(Blocks.DANDELION, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE), Items.DANDELION);
|
||||||
|
public static final Item poppy = register(new ToxicBlockItem(Blocks.POPPY, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SEVERE), Items.POPPY);
|
||||||
|
public static final Item blue_orchid = register(new ToxicBlockItem(Blocks.BLUE_ORCHID, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE), Items.BLUE_ORCHID);
|
||||||
|
public static final Item allium = register(new ToxicBlockItem(Blocks.ALLIUM, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.FAIR), Items.ALLIUM);
|
||||||
|
public static final Item azure_bluet = register(new DynamicToxicBlockItem(Blocks.AZURE_BLUET, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE, Toxin.RADIOACTIVITY), Items.AZURE_BLUET);
|
||||||
|
public static final Item red_tulip = register(new ToxicBlockItem(Blocks.RED_TULIP, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE), Items.RED_TULIP);
|
||||||
|
public static final Item orange_tulip = register(new ToxicBlockItem(Blocks.ORANGE_TULIP, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE), Items.ORANGE_TULIP);
|
||||||
|
public static final Item white_tulip = register(new ToxicBlockItem(Blocks.WHITE_TULIP, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.FAIR), Items.WHITE_TULIP);
|
||||||
|
public static final Item pink_tulip = register(new ToxicBlockItem(Blocks.PINK_TULIP, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE), Items.PINK_TULIP);
|
||||||
|
public static final Item oxeye_daisy = register(new DynamicToxicBlockItem(Blocks.OXEYE_DAISY, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SEVERE, Toxin.BLINDNESS), Items.OXEYE_DAISY);
|
||||||
|
public static final Item cornflower = register(new ToxicBlockItem(Blocks.CORNFLOWER, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE), Items.CORNFLOWER);
|
||||||
|
|
||||||
|
public static final Item rose_bush = register(new DynamicToxicBlockItem(Blocks.ROSE_BUSH, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE, Toxin.DAMAGE), Items.ROSE_BUSH);
|
||||||
|
public static final Item peony = register(new ToxicBlockItem(Blocks.PEONY, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE), Items.PEONY);
|
||||||
|
public static final Item tall_grass = register(new ToxicBlockItem(Blocks.TALL_GRASS, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SAFE), Items.TALL_GRASS);
|
||||||
|
public static final Item large_fern = register(new DynamicToxicBlockItem(Blocks.LARGE_FERN, new Item.Settings().group(ItemGroup.DECORATIONS), 2, 1, UseAction.EAT, Toxicity.SEVERE, Toxin.DAMAGE), Items.LARGE_FERN);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,7 +4,6 @@ package com.minelittlepony.unicopia.item;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.item.consumables.Toxicity;
|
import com.minelittlepony.unicopia.item.consumables.Toxicity;
|
||||||
import com.minelittlepony.util.MagicalDamageSource;
|
import com.minelittlepony.util.MagicalDamageSource;
|
||||||
import com.minelittlepony.util.VecHelper;
|
import com.minelittlepony.util.VecHelper;
|
||||||
|
@ -120,7 +119,7 @@ public class ZapAppleItem extends AppleItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
public Toxicity getToxicity(ItemStack stack) {
|
||||||
return getAppearance(stack) == Items.AIR ? Toxicity.SEVERE : Toxicity.SAFE;
|
return getAppearance(stack) == Items.AIR ? Toxicity.SEVERE : Toxicity.SAFE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.item.consumables;
|
|
||||||
|
|
||||||
import net.minecraft.block.BlockDoublePlant;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
|
||||||
import net.minecraft.init.StatusEffects;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.potion.StatusEffectInstance;
|
|
||||||
|
|
||||||
import static net.minecraft.block.BlockDoublePlant.EnumPlantType.*;
|
|
||||||
|
|
||||||
public class BushToxicityDeterminent implements IEdible {
|
|
||||||
|
|
||||||
BlockDoublePlant.EnumPlantType getType(ItemStack stack) {
|
|
||||||
return byMetadata(stack.getMetadata());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
|
||||||
switch (getType(stack)) {
|
|
||||||
case SUNFLOWER:
|
|
||||||
case GRASS: return Toxicity.SAFE;
|
|
||||||
case PAEONIA:
|
|
||||||
case SYRINGA: return Toxicity.FAIR;
|
|
||||||
case FERN:
|
|
||||||
case ROSE: return Toxicity.SEVERE;
|
|
||||||
default: return Toxicity.SAFE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack) {
|
|
||||||
BlockDoublePlant.EnumPlantType type = getType(stack);
|
|
||||||
|
|
||||||
if ((type == ROSE || type == FERN)
|
|
||||||
&& player.world.rand.nextInt(30) == 0) {
|
|
||||||
player.addStatusEffectInstance(new StatusEffectInstance(StatusEffects.INSTANT_DAMAGE, 1, 1, false, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == GRASS) {
|
|
||||||
player.addStatusEffectInstance(new StatusEffectInstance(StatusEffects.NAUSEA, 30, 1, false, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == FERN) {
|
|
||||||
player.addStatusEffectInstance(new StatusEffectInstance(StatusEffects.STRENGTH, 30, 1, false, false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.item.consumables;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class CookedToxicityDeterminent implements IEdible {
|
|
||||||
public static final IEdible instance = new CookedToxicityDeterminent();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
|
||||||
return Toxicity.byMetadata(stack.getMetadata());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,62 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.item.consumables;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.entity.LivingEntity;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
|
||||||
import net.minecraft.item.Item;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.util.ActionResult;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
|
|
||||||
public class DelegateFoodItem extends Item implements IEdible {
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
private ItemFood foodItem = new ItemFood(0, 0, false);
|
|
||||||
|
|
||||||
public DelegateFoodItem(Block block, ItemMultiTexture.Mapper mapper) {
|
|
||||||
super(block, block, mapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DelegateFoodItem setFoodDelegate(@Nonnull ItemFood foodItem) {
|
|
||||||
this.foodItem = foodItem;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
|
|
||||||
foodItem.addInformation(stack, worldIn, tooltip, flagIn);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack onItemUseFinish(ItemStack stack, World worldIn, LivingEntity entityLiving) {
|
|
||||||
return foodItem.onItemUseFinish(stack, worldIn, entityLiving);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxItemUseDuration(ItemStack stack) {
|
|
||||||
return foodItem.getMaxItemUseDuration(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EnumAction getItemUseAction(ItemStack stack) {
|
|
||||||
return foodItem.getItemUseAction(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TypedActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, EnumHand handIn) {
|
|
||||||
return foodItem.onItemRightClick(worldIn, playerIn, handIn);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
|
||||||
if (foodItem instanceof IEdible) {
|
|
||||||
return ((IEdible)foodItem).getToxicityLevel(stack);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.item.consumables;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
|
||||||
import net.minecraft.item.Item;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.util.UseAction;
|
|
||||||
|
|
||||||
public class DelegatedEdibleItem extends EdibleItem {
|
|
||||||
|
|
||||||
private final IEdible toxicityDeterminant;
|
|
||||||
|
|
||||||
public DelegatedEdibleItem(Item.Settings settings, UseAction action, @Nonnull IEdible mapper) {
|
|
||||||
super(settings, action);
|
|
||||||
|
|
||||||
toxicityDeterminant = mapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack) {
|
|
||||||
super.addSecondaryEffects(player, toxicity, stack);
|
|
||||||
|
|
||||||
toxicityDeterminant.addSecondaryEffects(player, toxicity, stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
|
||||||
return toxicityDeterminant.getToxicityLevel(stack);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.minelittlepony.unicopia.item.consumables;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.UseAction;
|
||||||
|
|
||||||
|
public class DynamicToxicBlockItem extends ToxicBlockItem {
|
||||||
|
|
||||||
|
private final Toxin toxin;
|
||||||
|
|
||||||
|
public DynamicToxicBlockItem(Block block, Item.Settings settings, int hunger, float saturation, UseAction action, Toxicity toxicity, @Nonnull Toxin toxin) {
|
||||||
|
super(block, settings, hunger, saturation, action, toxicity);
|
||||||
|
|
||||||
|
this.toxin = toxin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack) {
|
||||||
|
super.addSecondaryEffects(player, toxicity, stack);
|
||||||
|
toxin.addSecondaryEffects(player, toxicity, stack);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.minelittlepony.unicopia.item.consumables;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.UseAction;
|
||||||
|
|
||||||
|
public class DynamicToxicItem extends ToxicItem {
|
||||||
|
|
||||||
|
private final Toxic toxic;
|
||||||
|
|
||||||
|
public DynamicToxicItem(Item.Settings settings, int hunger, float saturation, UseAction action, @Nonnull Toxic toxic) {
|
||||||
|
super(settings, hunger, saturation, action, Toxicity.SAFE);
|
||||||
|
this.toxic = toxic;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack) {
|
||||||
|
super.addSecondaryEffects(player, toxicity, stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Toxicity getToxicity(ItemStack stack) {
|
||||||
|
return toxic.getToxicity(stack);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,52 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.item.consumables;
|
|
||||||
|
|
||||||
import net.minecraft.block.BlockFlower;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
|
||||||
import net.minecraft.init.StatusEffects;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.potion.StatusEffectInstance;
|
|
||||||
|
|
||||||
import static net.minecraft.block.BlockFlower.EnumFlowerType.*;
|
|
||||||
|
|
||||||
public class FlowerToxicityDeterminent implements IEdible {
|
|
||||||
|
|
||||||
private final BlockFlower.EnumFlowerColor color;
|
|
||||||
|
|
||||||
public FlowerToxicityDeterminent(BlockFlower.EnumFlowerColor color) {
|
|
||||||
this.color = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockFlower.EnumFlowerType getType(ItemStack stack) {
|
|
||||||
return BlockFlower.EnumFlowerType.getType(color, stack.getMetadata());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
|
||||||
switch (getType(stack)) {
|
|
||||||
case DANDELION:
|
|
||||||
case PINK_TULIP:
|
|
||||||
case RED_TULIP:
|
|
||||||
case ORANGE_TULIP:
|
|
||||||
case HOUSTONIA: return Toxicity.SAFE;
|
|
||||||
case OXEYE_DAISY:
|
|
||||||
case POPPY: return Toxicity.SEVERE;
|
|
||||||
case BLUE_ORCHID:
|
|
||||||
case WHITE_TULIP:
|
|
||||||
case ALLIUM: return Toxicity.FAIR;
|
|
||||||
default: return Toxicity.SAFE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack) {
|
|
||||||
BlockFlower.EnumFlowerType type = getType(stack);
|
|
||||||
|
|
||||||
if (type == HOUSTONIA && player.world.rand.nextInt(30) == 0) {
|
|
||||||
player.addStatusEffectInstance(new StatusEffectInstance(StatusEffects.GLOWING, 10, 1, false, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == OXEYE_DAISY) {
|
|
||||||
player.addStatusEffectInstance(new StatusEffectInstance(StatusEffects.BLINDNESS, 30, 1, false, false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.item.consumables;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
@FunctionalInterface
|
|
||||||
public interface IEdible {
|
|
||||||
Toxicity getToxicityLevel(ItemStack stack);
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
default void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.minelittlepony.unicopia.item.consumables;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface Toxic {
|
||||||
|
Toxicity getToxicity(ItemStack stack);
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
package com.minelittlepony.unicopia.item.consumables;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.minelittlepony.unicopia.Race;
|
||||||
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
|
import com.minelittlepony.unicopia.UEffects;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.client.item.TooltipContext;
|
||||||
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||||
|
import net.minecraft.entity.effect.StatusEffects;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.BlockItem;
|
||||||
|
import net.minecraft.item.FoodComponent;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemGroup;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import net.minecraft.util.ActionResult;
|
||||||
|
import net.minecraft.util.Hand;
|
||||||
|
import net.minecraft.util.TypedActionResult;
|
||||||
|
import net.minecraft.util.UseAction;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class ToxicBlockItem extends BlockItem implements Toxic, Toxin {
|
||||||
|
|
||||||
|
private final UseAction action;
|
||||||
|
private final Toxicity toxicity;
|
||||||
|
|
||||||
|
public ToxicBlockItem(Block block, Item.Settings settings, int hunger, float saturation, UseAction action, Toxicity toxicity) {
|
||||||
|
super(block, settings
|
||||||
|
.group(ItemGroup.FOOD)
|
||||||
|
.food(new FoodComponent.Builder()
|
||||||
|
.hunger(hunger)
|
||||||
|
.saturationModifier(saturation)
|
||||||
|
.build()));
|
||||||
|
this.toxicity = toxicity;
|
||||||
|
this.action = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Toxicity getToxicity(ItemStack stack) {
|
||||||
|
return toxicity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UseAction getUseAction(ItemStack stack) {
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void appendTooltip(ItemStack stack, @Nullable World world, List<Text> tooltip, TooltipContext context) {
|
||||||
|
tooltip.add(getToxicity(stack).getTooltip());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack finishUsing(ItemStack stack, World world, LivingEntity entity) {
|
||||||
|
super.finishUsing(stack, world, entity);
|
||||||
|
|
||||||
|
if (entity instanceof PlayerEntity) {
|
||||||
|
Race race = SpeciesList.instance().getPlayer((PlayerEntity)entity).getSpecies();
|
||||||
|
Toxicity toxicity = (race.isDefault() || race == Race.CHANGELING) ? Toxicity.LETHAL : getToxicity(stack);
|
||||||
|
|
||||||
|
addSecondaryEffects((PlayerEntity)entity, toxicity, stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ItemStack(getRecipeRemainder());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
|
||||||
|
Race race = SpeciesList.instance().getPlayer(player).getSpecies();
|
||||||
|
|
||||||
|
if (race.isDefault() || race == Race.CHANGELING) {
|
||||||
|
return new TypedActionResult<>(ActionResult.FAIL, player.getStackInHand(hand));
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.use(world, player, hand);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack) {
|
||||||
|
|
||||||
|
if (toxicity.toxicWhenRaw()) {
|
||||||
|
player.addPotionEffect(toxicity.getPoisonEffect());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toxicity.isLethal()) {
|
||||||
|
player.addPotionEffect(new StatusEffectInstance(UEffects.FOOD_POISONING, 300, 7, false, false));
|
||||||
|
} else if (toxicity.toxicWhenCooked()) {
|
||||||
|
player.addPotionEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 3, 1, false, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,7 +13,9 @@ import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||||
import net.minecraft.entity.effect.StatusEffects;
|
import net.minecraft.entity.effect.StatusEffects;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.FoodComponent;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemGroup;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
|
@ -22,28 +24,35 @@ import net.minecraft.util.TypedActionResult;
|
||||||
import net.minecraft.util.UseAction;
|
import net.minecraft.util.UseAction;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class EdibleItem extends Item implements IEdible {
|
public class ToxicItem extends Item implements Toxic, Toxin {
|
||||||
|
|
||||||
|
private final UseAction action;
|
||||||
private final Toxicity toxicity;
|
private final Toxicity toxicity;
|
||||||
|
|
||||||
public EdibleItem(Item.Settings settings, Toxicity toxicity) {
|
public ToxicItem(Item.Settings settings, int hunger, float saturation, UseAction action, Toxicity toxicity) {
|
||||||
super(settings);
|
super(settings
|
||||||
|
.group(ItemGroup.FOOD)
|
||||||
|
.food(new FoodComponent.Builder()
|
||||||
|
.hunger(hunger)
|
||||||
|
.saturationModifier(saturation)
|
||||||
|
.build()));
|
||||||
this.toxicity = toxicity;
|
this.toxicity = toxicity;
|
||||||
|
this.action = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Toxicity getToxicityLevel(ItemStack stack) {
|
public Toxicity getToxicity(ItemStack stack) {
|
||||||
return toxicity;
|
return toxicity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UseAction getUseAction(ItemStack stack) {
|
public UseAction getUseAction(ItemStack stack) {
|
||||||
return UseAction.EAT;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void appendTooltip(ItemStack stack, @Nullable World world, List<Text> tooltip, TooltipContext context) {
|
public void appendTooltip(ItemStack stack, @Nullable World world, List<Text> tooltip, TooltipContext context) {
|
||||||
tooltip.add(getToxicityLevel(stack).getTooltip());
|
tooltip.add(getToxicity(stack).getTooltip());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -52,7 +61,7 @@ public class EdibleItem extends Item implements IEdible {
|
||||||
|
|
||||||
if (entity instanceof PlayerEntity) {
|
if (entity instanceof PlayerEntity) {
|
||||||
Race race = SpeciesList.instance().getPlayer((PlayerEntity)entity).getSpecies();
|
Race race = SpeciesList.instance().getPlayer((PlayerEntity)entity).getSpecies();
|
||||||
Toxicity toxicity = (race.isDefault() || race == Race.CHANGELING) ? Toxicity.LETHAL : getToxicityLevel(stack);
|
Toxicity toxicity = (race.isDefault() || race == Race.CHANGELING) ? Toxicity.LETHAL : getToxicity(stack);
|
||||||
|
|
||||||
addSecondaryEffects((PlayerEntity)entity, toxicity, stack);
|
addSecondaryEffects((PlayerEntity)entity, toxicity, stack);
|
||||||
}
|
}
|
|
@ -1,7 +1,14 @@
|
||||||
package com.minelittlepony.unicopia.item.consumables;
|
package com.minelittlepony.unicopia.item.consumables;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||||
import net.minecraft.entity.effect.StatusEffects;
|
import net.minecraft.entity.effect.StatusEffects;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.TranslatableText;
|
||||||
import net.minecraft.util.Formatting;
|
import net.minecraft.util.Formatting;
|
||||||
|
@ -16,6 +23,7 @@ public enum Toxicity {
|
||||||
private final int level;
|
private final int level;
|
||||||
private final int duration;
|
private final int duration;
|
||||||
|
|
||||||
|
private static final Map<String, Toxicity> REGISTRY;
|
||||||
private static final Toxicity[] values = values();
|
private static final Toxicity[] values = values();
|
||||||
|
|
||||||
Toxicity(int level, int duration) {
|
Toxicity(int level, int duration) {
|
||||||
|
@ -53,10 +61,22 @@ public enum Toxicity {
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Toxicity fromStack(ItemStack stack) {
|
||||||
|
if (stack.hasTag()) {
|
||||||
|
CompoundTag tag = stack.getSubTag("toxicity");
|
||||||
|
if (tag != null) {
|
||||||
|
return REGISTRY.getOrDefault(tag.asString(), SAFE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SAFE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static Toxicity byMetadata(int metadata) {
|
public static Toxicity byMetadata(int metadata) {
|
||||||
return values[metadata % values.length];
|
return values[metadata % values.length];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static String[] getVariants(String key) {
|
public static String[] getVariants(String key) {
|
||||||
String[] result = new String[values.length];
|
String[] result = new String[values.length];
|
||||||
|
|
||||||
|
@ -66,4 +86,8 @@ public enum Toxicity {
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
REGISTRY = Arrays.stream(values()).collect(Collectors.toMap(Toxicity::name, Function.identity()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.minelittlepony.unicopia.item.consumables;
|
||||||
|
|
||||||
|
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||||
|
import net.minecraft.entity.effect.StatusEffects;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface Toxin {
|
||||||
|
Toxin DAMAGE = (player, toxicity, stack) -> {
|
||||||
|
if (player.world.random.nextInt(30) == 0) {
|
||||||
|
player.addPotionEffect(new StatusEffectInstance(StatusEffects.INSTANT_DAMAGE, 1, 1, false, false));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Toxin RADIOACTIVITY = (player, toxicity, stack) -> {
|
||||||
|
if (player.world.random.nextInt(30) == 0) {
|
||||||
|
player.addPotionEffect(new StatusEffectInstance(StatusEffects.GLOWING, 10, 1, false, false));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Toxin NAUSEA = (player, toxicity, stack) -> {
|
||||||
|
player.addPotionEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 30, 1, false, false));
|
||||||
|
};
|
||||||
|
Toxin STRENGTH = (player, toxicity, stack) -> {
|
||||||
|
player.addPotionEffect(new StatusEffectInstance(StatusEffects.STRENGTH, 30, 1, false, false));
|
||||||
|
};
|
||||||
|
Toxin BLINDNESS = (player, toxicity, stack) -> {
|
||||||
|
player.addPotionEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, 30, 1, false, false));
|
||||||
|
};
|
||||||
|
|
||||||
|
void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack);
|
||||||
|
}
|
|
@ -2,8 +2,8 @@ package com.minelittlepony.unicopia.magic;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.entity.ProjectileEntity;
|
import com.minelittlepony.unicopia.entity.ProjectileEntity;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
|
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
|
||||||
import com.minelittlepony.unicopia.projectile.IAdvancedProjectile;
|
import com.minelittlepony.unicopia.projectile.IAdvancedProjectile;
|
||||||
import com.minelittlepony.unicopia.projectile.ITossable;
|
import com.minelittlepony.unicopia.projectile.ITossable;
|
||||||
|
|
|
@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.world;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.UBlocks;
|
import com.minelittlepony.unicopia.UBlocks;
|
||||||
import com.minelittlepony.unicopia.UItems;
|
|
||||||
import com.minelittlepony.unicopia.block.ITillable;
|
import com.minelittlepony.unicopia.block.ITillable;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
|
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
|
Loading…
Reference in a new issue