void setPrivateValue(Class super T> classToAccess, T instance, E value, String... fieldNames)
- {
- try
- {
- findField(classToAccess, fieldNames).set(instance, value);
- }
- catch (Exception e)
- {
- throw new UnableToAccessFieldException(fieldNames, e);
- }
- }
-
- @SuppressWarnings("unchecked")
- public static Class super Object> getClass(ClassLoader loader, String... classNames)
- {
- Exception err = null;
- for (String className : classNames)
- {
- try
- {
- return (Class super Object>) Class.forName(className, false, loader);
- }
- catch (Exception e)
- {
- err = e;
- }
- }
-
- throw new UnableToFindClassException(classNames, err);
- }
-
- /**
- * Finds a method with the specified name and parameters in the given class
- * and makes it accessible. Note: for performance, store the returned value
- * and avoid calling this repeatedly.
- *
- * Throws an exception if the method is not found.
- *
- * @param clazz
- * The class to find the method on.
- * @param methodName
- * The name of the method to find (used in developer
- * environments, i.e. "getLevelTime").
- * @param methodObfName
- * The obfuscated name of the method to find (used in obfuscated
- * environments, i.e. "getLevelTime"). If the name you are
- * looking for is on a class that is never obfuscated, this
- * should be null.
- * @param parameterTypes
- * The parameter types of the method to find.
- * @return The method with the specified name and parameters in the given
- * class.
- */
-
- /**
- * Finds a constructor in the specified class that has matching parameter
- * types.
- *
- * @param klass
- * The class to find the constructor in
- * @param parameterTypes
- * The parameter types of the constructor.
- * @param
- * The type
- * @return The constructor
- * @throws NullPointerException
- * if {@code klass} is null
- * @throws NullPointerException
- * if {@code parameterTypes} is null
- * @throws UnknownConstructorException
- * if the constructor could not be found
- */
- @Nonnull
- public static Constructor findConstructor(@Nonnull final Class klass, @Nonnull final Class>... parameterTypes)
- {
- Preconditions.checkNotNull(klass, "class");
- Preconditions.checkNotNull(parameterTypes, "parameter types");
-
- final Constructor constructor;
- try
- {
- constructor = klass.getDeclaredConstructor(parameterTypes);
- constructor.setAccessible(true);
- }
- catch (final NoSuchMethodException e)
- {
- final StringBuilder desc = new StringBuilder();
- desc.append(klass.getSimpleName()).append('(');
- for (int i = 0, length = parameterTypes.length; i < length; i++)
- {
- desc.append(parameterTypes[i].getName());
- if (i > length)
- {
- desc.append(',').append(' ');
- }
- }
- desc.append(')');
- throw new UnknownConstructorException("Could not find constructor '" + desc.toString() + "' in " + klass);
- }
- return constructor;
- }
-}
\ No newline at end of file
diff --git a/old/src/main/java/tschipp/carryon/common/helper/ReflectionUtil.java b/old/src/main/java/tschipp/carryon/common/helper/ReflectionUtil.java
deleted file mode 100644
index d53d31d..0000000
--- a/old/src/main/java/tschipp/carryon/common/helper/ReflectionUtil.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package tschipp.carryon.common.helper;
-
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import javax.annotation.Nullable;
-
-import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
-
-/**
- * Utility methods for reflection.
- *
- * @author Choonster
- */
-public class ReflectionUtil
-{
- /**
- * Get a {@link MethodHandle} for a method.
- *
- * @param clazz
- * The class
- * @param methodName
- * The possible names of the method
- * @param methodObfName
- * The obfuscated method name
- * @param parameterTypes
- * The argument types of the method
- * @return The MethodHandle
- */
- public static MethodHandle findMethod(final Class> clazz, final String methodName, @Nullable final String methodObfName, final Class>... parameterTypes)
- {
- final Method method = ObfuscationReflectionHelper.findMethod(clazz, methodName, parameterTypes);
- try
- {
- return MethodHandles.lookup().unreflect(method);
- }
- catch (IllegalAccessException e)
- {
- throw new ObfuscationReflectionHelper.UnableToFindMethodException(e);
- }
- }
-
- /**
- * Get a {@link MethodHandle} for a field's getter.
- *
- * @param clazz
- * The class
- * @param fieldNames
- * The possible names of the field
- * @return The MethodHandle
- */
- public static MethodHandle findFieldGetter(Class> clazz, String... fieldNames)
- {
- final Field field = ReflectionHelper.findField(clazz, fieldNames);
-
- try
- {
- return MethodHandles.lookup().unreflectGetter(field);
- }
- catch (IllegalAccessException e)
- {
- throw new ReflectionHelper.UnableToAccessFieldException(fieldNames, e);
- }
- }
-
- /**
- * Get a {@link MethodHandle} for a field's setter.
- *
- * @param clazz
- * The class
- * @param fieldNames
- * The possible names of the field
- * @return The MethodHandle
- */
- public static MethodHandle findFieldSetter(Class> clazz, String... fieldNames)
- {
- final Field field = ReflectionHelper.findField(clazz, fieldNames);
-
- try
- {
- return MethodHandles.lookup().unreflectSetter(field);
- }
- catch (IllegalAccessException e)
- {
- throw new ReflectionHelper.UnableToAccessFieldException(fieldNames, e);
- }
- }
-}
\ No newline at end of file
diff --git a/old/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java b/old/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java
deleted file mode 100644
index f08f2ad..0000000
--- a/old/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java
+++ /dev/null
@@ -1,355 +0,0 @@
-package tschipp.carryon.common.helper;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import net.minecraft.core.BlockPos;
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.nbt.Tag;
-import net.minecraft.world.effect.MobEffectInstance;
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.level.block.Block;
-import net.minecraft.world.level.material.Material;
-import net.minecraft.world.scores.Objective;
-import net.minecraft.world.scores.Score;
-import net.minecraft.world.scores.Scoreboard;
-import net.minecraftforge.registries.ForgeRegistries;
-
-public class ScriptParseHelper
-{
-
-
-
- public static boolean matches(double number, String cond)
- {
- if (cond == null || cond.isEmpty())
- return true;
-
- try
- {
- if (cond.contains("<="))
- {
- return number <= Double.parseDouble(cond.replace("<=", ""));
- }
- if (cond.contains(">="))
- {
- return number >= Double.parseDouble(cond.replace(">=", ""));
- }
- if (cond.contains("<"))
- {
- return number < Double.parseDouble(cond.replace("<", ""));
- }
- if (cond.contains(">"))
- {
- return number > Double.parseDouble(cond.replace(">", ""));
- }
- if (cond.contains("="))
- {
- return number == Double.parseDouble(cond.replace("=", ""));
- }
- else
- return number == Double.parseDouble(cond);
-
- }
- catch (Exception e)
- {
- new InvalidConfigException(e.getMessage()).printException();
- }
-
- return false;
- }
-
- public static boolean matches(Block block, String cond)
- {
- if (cond == null || cond.isEmpty())
- return true;
-
- Block toCheck = StringParser.getBlock(cond);
- if (toCheck != null)
- return block == toCheck;
-
- return false;
- }
-
- public static boolean matches(CompoundTag toCheck, CompoundTag toMatch)
- {
- if (toCheck == null || toMatch == null || toMatch.isEmpty())
- return true;
-
- boolean matching = true;
- for (String key : toMatch.getAllKeys())
- {
- Tag tag = toMatch.get(key);
- key = key.replace("\"", "");
- Tag tagToCheck = toCheck.get(key);
- if (!tag.equals(tagToCheck))
- matching = false;
- }
-
- return matching;
- }
-
- public static float[] getXYZArray(String s)
- {
- float[] d = new float[3];
- d[0] = getValueFromString(s, "x");
- d[1] = getValueFromString(s, "y");
- d[2] = getValueFromString(s, "z");
-
- return d;
- }
-
- public static float[] getScaled(String s)
- {
- float[] d = new float[3];
- d[0] = getScaledValueFromString(s, "x");
- d[1] = getScaledValueFromString(s, "y");
- d[2] = getScaledValueFromString(s, "z");
-
- return d;
- }
-
- public static float getScaledValueFromString(String toGetFrom, String key)
- {
- if (toGetFrom == null || toGetFrom.isEmpty())
- return 1;
-
- String[] s = toGetFrom.split(",");
- for (String string : s)
- {
- if (string.contains(key) && string.contains("="))
- {
- float numb = 1;
- string = string.replace(key + "=", "");
-
- try
- {
- numb = Float.parseFloat(string);
- }
- catch (Exception e)
- {
- }
-
- return numb;
- }
- }
-
- return 1;
- }
-
- public static boolean matchesScore(Player player, String cond)
- {
- if (cond == null || cond.isEmpty())
- return true;
-
- Scoreboard score = player.getScoreboard();
- String numb;
- String scorename;
- int iE = cond.indexOf("=");
- int iG = cond.indexOf(">");
- int iL = cond.indexOf("<");
-
- if (iG == -1 ? true : iE < iG && iL == -1 ? true : iE < iL && iE != -1)
- numb = cond.substring(iE);
- else if (iE == -1 ? true : iG < iE && iL == -1 ? true : iG < iL && iG != -1)
- numb = cond.substring(iG);
- else
- numb = cond.substring(iL);
-
- scorename = cond.replace(numb, "");
- Map o = score.getPlayerScores(player.getGameProfile().getName());
- if (o != null)
- {
- Score sc = o.get(score.getObjective(scorename));
- if (sc != null)
- {
- int points = sc.getScore();
-
- return matches(points, numb);
- }
- }
-
- return false;
- }
-
- public static boolean matches(BlockPos pos, String cond)
- {
- if (cond == null || cond.isEmpty())
- return true;
-
- BlockPos blockpos = new BlockPos(getValueFromString(cond, "x"), getValueFromString(cond, "y"), getValueFromString(cond, "z"));
- BlockPos expand = new BlockPos(getValueFromString(cond, "dx"), getValueFromString(cond, "dy"), getValueFromString(cond, "dz"));
- BlockPos expanded = blockpos.offset(expand);
-
- boolean x = pos.getX() >= blockpos.getX() && pos.getX() <= expanded.getX() || blockpos.getX() == 0;
- boolean y = pos.getY() >= blockpos.getY() && pos.getY() <= expanded.getY() || blockpos.getY() == 0;
- boolean z = pos.getZ() >= blockpos.getZ() && pos.getZ() <= expanded.getZ() || blockpos.getZ() == 0;
-
- return x && y && z;
- }
-
- public static float getValueFromString(String toGetFrom, String key)
- {
- if (toGetFrom == null || toGetFrom.isEmpty())
- return 0;
-
- String[] s = toGetFrom.split(",");
- for (String string : s)
- {
- if (string.contains(key) && string.contains("="))
- {
- float numb = 0;
- string = string.replace(key + "=", "");
-
- try
- {
- numb = Float.parseFloat(string);
- }
- catch (Exception e)
- {
- }
-
- return numb;
- }
- }
-
- return 0;
- }
-
- public static boolean hasEffects(Player player, String cond)
- {
- if (cond == null || cond.isEmpty())
- return true;
-
- Collection effects = player.getActiveEffects();
- String[] potions = cond.split(",");
-
- List names = new ArrayList<>();
- List levels = new ArrayList<>();
-
- for (String pot : potions)
- {
- if (pot.contains("#"))
- {
- String level = pot.substring(pot.indexOf("#"));
- String name = pot.substring(0, pot.indexOf("#"));
- level = level.replace("#", "");
- int lev = 0;
- try
- {
- lev = Integer.parseInt(level);
- }
- catch (Exception e)
- {
- }
-
- levels.add(lev);
- names.add(name);
- }
- else
- {
- levels.add(0);
- names.add(pot);
- }
- }
-
- int matches = 0;
- for (MobEffectInstance effect : effects)
- {
- int amp = effect.getAmplifier();
- String name = ForgeRegistries.MOB_EFFECTS.getKey(effect.getEffect()).toString();
-
- if (names.contains(name))
- {
- int idx = names.indexOf(name);
- int lev = levels.get(idx);
-
- if (lev == amp)
- matches++;
- }
- }
-
- return matches == potions.length;
- }
-
- public static boolean matches(Material material, String cond)
- {
- if (cond == null || cond.isEmpty())
- return true;
-
- switch (cond)
- {
- case "air":
- return material == Material.AIR;
- case "anvil":
- return material == Material.HEAVY_METAL;
- case "barrier":
- return material == Material.BARRIER;
- case "cactus":
- return material == Material.CACTUS;
- case "cake":
- return material == Material.CAKE;
- case "carpet":
- return material == Material.CLOTH_DECORATION;
- case "clay":
- return material == Material.CLAY;
- case "cloth":
- return material == Material.WOOL;
- case "dragon_egg":
- return material == Material.EGG;
- case "fire":
- return material == Material.FIRE;
- case "glass":
- return material == Material.GLASS;
- case "gourd":
- return material == Material.VEGETABLE;
- case "grass":
- return material == Material.GRASS;
- case "ground":
- return material == Material.GRASS;
- case "ice":
- return material == Material.ICE;
- case "iron":
- return material == Material.METAL;
- case "lava":
- return material == Material.LAVA;
- case "leaves":
- return material == Material.LEAVES;
- case "packed_ice":
- return material == Material.ICE_SOLID;
- case "piston":
- return material == Material.PISTON;
- case "plants":
- return material == Material.PLANT;
- case "portal":
- return material == Material.PORTAL;
- case "redstone_light":
- return material == Material.BUILDABLE_GLASS;
- case "rock":
- return material == Material.STONE;
- case "sand":
- return material == Material.SAND;
- case "snow":
- return material == Material.TOP_SNOW;
- case "sponge":
- return material == Material.SPONGE;
- case "structure_void":
- return material == Material.STRUCTURAL_AIR;
- case "tnt":
- return material == Material.EXPLOSIVE;
- case "vine":
- return material == Material.PLANT;
- case "water":
- return material == Material.WATER;
- case "web":
- return material == Material.WEB;
- case "wood":
- return material == Material.WOOD;
- default:
- return false;
- }
-
- }
-}
diff --git a/old/src/main/java/tschipp/carryon/common/helper/ScrollCallbackWrapper.java b/old/src/main/java/tschipp/carryon/common/helper/ScrollCallbackWrapper.java
deleted file mode 100644
index b71e8e9..0000000
--- a/old/src/main/java/tschipp/carryon/common/helper/ScrollCallbackWrapper.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package tschipp.carryon.common.helper;
-
-import org.lwjgl.glfw.GLFW;
-import org.lwjgl.glfw.GLFWScrollCallback;
-
-import net.minecraft.client.Minecraft;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.eventbus.api.Cancelable;
-import net.minecraftforge.eventbus.api.Event;
-
-//Thanks to gigaherz for the help!
-public class ScrollCallbackWrapper
-{
- GLFWScrollCallback oldCallback;
-
- public void setup(Minecraft mc)
- {
- this.oldCallback = GLFW.glfwSetScrollCallback(mc.getWindow().getWindow(), this::scrollCallback);
- }
-
- private void scrollCallback(long window, double xoffset, double yoffset)
- {
- MouseScrolledEvent event = new MouseScrolledEvent();
- MinecraftForge.EVENT_BUS.post(event);
-
- if (event.isCanceled())
- return;
-
- if (this.oldCallback != null)
- this.oldCallback.invoke(window, xoffset, yoffset);
- }
-
- @Cancelable
- public static class MouseScrolledEvent extends Event
- {
-
- }
-}
diff --git a/old/src/main/java/tschipp/carryon/common/helper/StringParser.java b/old/src/main/java/tschipp/carryon/common/helper/StringParser.java
deleted file mode 100644
index 668ffa7..0000000
--- a/old/src/main/java/tschipp/carryon/common/helper/StringParser.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package tschipp.carryon.common.helper;
-
-import javax.annotation.Nullable;
-
-import com.mojang.brigadier.StringReader;
-
-import net.minecraft.commands.arguments.blocks.BlockStateParser;
-import net.minecraft.commands.arguments.blocks.BlockStateParser.BlockResult;
-import net.minecraft.commands.arguments.item.ItemParser;
-import net.minecraft.commands.arguments.item.ItemParser.ItemResult;
-import net.minecraft.core.HolderLookup;
-import net.minecraft.core.Registry;
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.nbt.TagParser;
-import net.minecraft.world.item.Item;
-import net.minecraft.world.item.ItemStack;
-import net.minecraft.world.level.block.Block;
-import net.minecraft.world.level.block.state.BlockState;
-
-public class StringParser
-{
-
- @Nullable
- public static Block getBlock(String string)
- {
- BlockState state = getBlockState(string);
- if (state != null)
- return state.getBlock();
-
- return null;
- }
-
- @Nullable
- public static BlockState getBlockState(String string)
- {
- if (string == null)
- return null;
-
-
- try
- {
- BlockResult result = BlockStateParser.parseForBlock(HolderLookup.forRegistry(Registry.BLOCK), new StringReader(string), false);
- return result.blockState();
- }
- catch (Exception e)
- {
- new InvalidConfigException("Blockstate parsing Exception at: " + string + " : " + e.getMessage()).printException();
- return null;
- }
- }
-
- @Nullable
- public static Item getItem(String string)
- {
- if (string == null)
- return null;
-
-
- try
- {
- ItemResult res = ItemParser.parseForItem(HolderLookup.forRegistry(Registry.ITEM), new StringReader(string));
- return res.item().get();
- }
- catch (Exception e)
- {
- new InvalidConfigException("Item parsing Exception at: " + string + " : " + e.getMessage()).printException();
- return null;
- }
- }
-
- public static ItemStack getItemStack(String string)
- {
- if (string == null)
- return null;
-
-
- try
- {
- ItemResult res = ItemParser.parseForItem(HolderLookup.forRegistry(Registry.ITEM), new StringReader(string));
-
- Item item = res.item().get();
- CompoundTag nbt = res.nbt();
-
- ItemStack stack = new ItemStack(item, 1);
-
- if (nbt != null)
- {
- stack.setTag(nbt);
- }
-
- return stack;
- }
- catch (Exception e)
- {
- new InvalidConfigException("Item parsing Exception at: " + string + " : " + e.getMessage()).printException();
- return ItemStack.EMPTY;
-
- }
-
- }
-
- @Nullable
- public static CompoundTag getTagCompound(String string)
- {
- CompoundTag tag = null;
- if (string == null)
- return null;
-
- if (string.contains("{"))
- {
- if (!string.contains("}"))
- new InvalidConfigException("Missing } at : " + string).printException();
-
- String nbt = string.substring(string.indexOf("{"));
- string = string.replace(nbt, "");
- try
- {
- tag = TagParser.parseTag(nbt);
- }
- catch (Exception e)
- {
- new InvalidConfigException("Error while parsing NBT: " + e.getMessage()).printException();
- return null;
- }
-
- }
- else if (string.contains("}"))
- new InvalidConfigException("Missing { at : " + string).printException();
-
- return tag;
- }
-
-}
diff --git a/old/src/main/java/tschipp/carryon/common/item/ItemCarryonBlock.java b/old/src/main/java/tschipp/carryon/common/item/ItemCarryonBlock.java
deleted file mode 100644
index 356084e..0000000
--- a/old/src/main/java/tschipp/carryon/common/item/ItemCarryonBlock.java
+++ /dev/null
@@ -1,389 +0,0 @@
-package tschipp.carryon.common.item;
-
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-import com.google.common.base.CharMatcher;
-
-import net.minecraft.ChatFormatting;
-import net.minecraft.core.BlockPos;
-import net.minecraft.core.Direction;
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.network.chat.ClickEvent;
-import net.minecraft.network.chat.ClickEvent.Action;
-import net.minecraft.network.chat.Component;
-import net.minecraft.world.InteractionHand;
-import net.minecraft.world.InteractionResult;
-import net.minecraft.world.effect.MobEffectInstance;
-import net.minecraft.world.effect.MobEffects;
-import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.LivingEntity;
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.item.Item;
-import net.minecraft.world.item.ItemStack;
-import net.minecraft.world.item.context.BlockPlaceContext;
-import net.minecraft.world.item.context.UseOnContext;
-import net.minecraft.world.level.Level;
-import net.minecraft.world.level.block.Block;
-import net.minecraft.world.level.block.Blocks;
-import net.minecraft.world.level.block.entity.BlockEntity;
-import net.minecraft.world.level.block.state.BlockState;
-import net.minecraft.world.phys.Vec3;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.common.util.BlockSnapshot;
-import net.minecraftforge.event.level.BlockEvent.EntityPlaceEvent;
-import net.minecraftforge.fml.ModList;
-import net.minecraftforge.registries.ForgeRegistries;
-import tschipp.carryon.CarryOn;
-import tschipp.carryon.client.keybinds.CarryOnKeybinds;
-import tschipp.carryon.common.config.Configs.Settings;
-import tschipp.carryon.common.event.ItemEvents;
-import tschipp.carryon.common.handler.CustomPickupOverrideHandler;
-import tschipp.carryon.common.handler.ModelOverridesHandler;
-
-public class ItemCarryonBlock extends Item
-{
-
- public static final String TILE_DATA_KEY = "tileData";
- public static final String[] FACING_KEYS = { "rotation", "rot", "facing", "face", "direction", "dir", "front", "forward" };
-
- public ItemCarryonBlock()
- {
- super(new Item.Properties().stacksTo(1));
- }
-
- @Override
- public Component getName(ItemStack stack)
- {
- if (hasTileData(stack))
- {
- BlockState state = getBlockState(stack);
- CompoundTag nbt = getTileData(stack);
-
- if (ModelOverridesHandler.hasCustomOverrideModel(state, nbt))
- {
- Object override = ModelOverridesHandler.getOverrideObject(state, nbt);
- if (override instanceof ItemStack)
- return ((ItemStack) override).getHoverName();
- else
- {
- BlockState ostate = (BlockState) override;
- return ostate.getBlock().getName();
- }
- }
-
- return getItemStack(stack).getHoverName();
- }
-
- return Component.literal("");
- }
-
- @Override
- public InteractionResult useOn(UseOnContext context)
- {
- Direction facing = context.getClickedFace();
- Player player = context.getPlayer();
- Level level = context.getLevel();
- BlockPos pos = context.getClickedPos();
- ItemStack stack = context.getItemInHand();
-
- if (ModList.get().isLoaded("betterplacement") && CarryOnKeybinds.isKeyPressed(player))
- return InteractionResult.FAIL;
-
- if (hasTileData(stack))
- {
- try
- {
- Vec3 vec = player.getLookAngle();
- Direction facing2 = Direction.getNearest((float) vec.x, 0f, (float) vec.z);
- BlockPos pos2 = pos;
- Block containedblock = getBlock(stack);
- BlockState containedstate = getBlockState(stack);
- if (!level.getBlockState(pos2).canBeReplaced(new BlockPlaceContext(context)))
- {
- pos2 = pos.relative(facing);
- }
-
- if (level.getBlockState(pos2).canBeReplaced(new BlockPlaceContext(context)) && containedblock != null)
- {
- boolean canPlace = containedstate.canSurvive(level, pos2);
-
- if (canPlace && player.mayUseItemAt(pos, facing, stack) && level.mayInteract(player, pos2))
- {
-
- BlockState placementState = containedblock.getStateForPlacement(new BlockPlaceContext(context));
-
- BlockState actualState = placementState == null ? containedstate : placementState;
-
- // Attempted fix for #287
- // for (IProperty> prop :
- // placementState.getValues().keySet())
- // {
- // if (prop instanceof DirectionProperty)
- // actualState = actualState.with((DirectionProperty)
- // prop, placementState.get((DirectionProperty) prop));
- // else if (prop == BlockStateProperties.WATERLOGGED)
- // actualState = actualState.with((BooleanProperty)
- // prop, placementState.get((BooleanProperty) prop));
- // else if(prop instanceof EnumProperty>)
- // {
- // Object value = placementState.get(prop);
- // if(value instanceof Direction.Axis)
- // {
- // actualState = actualState.with((EnumProperty)prop,
- // (Direction.Axis)value);
- // }
- // }
- // }
-
- BlockSnapshot snapshot = BlockSnapshot.create(level.dimension(), level, pos2);
- EntityPlaceEvent event = new EntityPlaceEvent(snapshot, level.getBlockState(pos), player);
- MinecraftForge.EVENT_BUS.post(event);
-
- if (!event.isCanceled())
- {
- level.setBlockAndUpdate(pos2, actualState);
-
- // If the blockstate doesn't handle rotation,
- // try to
- // change rotation via NBT
- if (!getTileData(stack).isEmpty())
- {
- CompoundTag tag = getTileData(stack);
- Set keys = tag.getAllKeys();
- keytester: for (String key : keys)
- {
- for (String facingKey : FACING_KEYS)
- {
- if (key.toLowerCase().equals(facingKey))
- {
- byte type = tag.getTagType(key);
- switch (type)
- {
- case 8:
- tag.putString(key, CharMatcher.javaUpperCase().matchesAllOf(tag.getString(key)) ? facing2.getOpposite().getName().toUpperCase() : facing2.getOpposite().getName());
- break;
- case 3:
- tag.putInt(key, facing2.getOpposite().get3DDataValue());
- break;
- case 1:
- tag.putByte(key, (byte) facing2.getOpposite().get3DDataValue());
- break;
- default:
- break;
- }
-
- break keytester;
- }
- }
- }
- }
-
- BlockEntity tile = level.getBlockEntity(pos2);
- if (tile != null)
- {
- CompoundTag data = getTileData(stack);
- updateTileLocation(data, pos2);
- tile.load(data);
- }
- clearTileData(stack);
- player.playSound(actualState.getSoundType(level, pos2, player).getPlaceSound(), 1.0f, 0.5f);
- player.setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY);
- player.getPersistentData().remove("overrideKey");
- ItemEvents.sendPacket(player, 9, 0);
- return InteractionResult.SUCCESS;
-
- }
- }
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
-
- if (level != null && level.isClientSide)
- {
- CarryOn.LOGGER.info("Block: " + ItemCarryonBlock.getBlock(stack));
- CarryOn.LOGGER.info("BlockState: " + ItemCarryonBlock.getBlockState(stack));
- // CarryOn.LOGGER.info("Meta: " + itemTile.get().getMeta(stack));
- CarryOn.LOGGER.info("ItemStack: " + ItemCarryonBlock.getItemStack(stack));
-
- if (ModelOverridesHandler.hasCustomOverrideModel(ItemCarryonBlock.getBlockState(stack), ItemCarryonBlock.getTileData(stack)))
- CarryOn.LOGGER.info("Override Model: " + ModelOverridesHandler.getOverrideObject(ItemCarryonBlock.getBlockState(stack), ItemCarryonBlock.getTileData(stack)));
-
- if (CustomPickupOverrideHandler.hasSpecialPickupConditions(ItemCarryonBlock.getBlockState(stack)))
- CarryOn.LOGGER.info("Custom Pickup Condition: " + CustomPickupOverrideHandler.getPickupCondition(ItemCarryonBlock.getBlockState(stack)));
-
- player.displayClientMessage(Component.literal(ChatFormatting.RED + "Error detected. Cannot place block. Execute \"/carryon clear\" to remove the item"), false);
- Component s = Component.literal(ChatFormatting.GOLD + "here");
- s.getStyle().withClickEvent(new ClickEvent(Action.OPEN_URL, "https://github.com/Tschipp/CarryOn/issues"));
- player.displayClientMessage(Component.literal(ChatFormatting.RED + "Please report this error ").append(s), false);
-
- }
- }
-
- }
-
- return InteractionResult.FAIL;
- }
-
- @Override
- public void inventoryTick(ItemStack stack, Level level, Entity entity, int itemSlot, boolean isSelected)
- {
- if (hasTileData(stack))
- {
- if (entity instanceof LivingEntity)
- {
- if (entity instanceof Player && Settings.slownessInCreative.get() ? false : ((Player) entity).isCreative())
- return;
-
- ((LivingEntity) entity).addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 1, potionLevel(stack), false, false));
- }
- }
- else
- {
- stack = ItemStack.EMPTY;
- }
- }
-
- public static boolean hasTileData(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- return tag.contains(TILE_DATA_KEY) && tag.contains("block") && tag.contains("stateid");
- }
- return false;
- }
-
- public static boolean storeTileData(@Nullable BlockEntity tile, Level level, BlockPos pos, BlockState state, ItemStack stack)
- {
- if (stack.isEmpty())
- return false;
-
- CompoundTag tileTag = new CompoundTag();
- if (tile != null)
- tileTag = tile.saveWithId();
-
- CompoundTag tag = stack.hasTag() ? stack.getTag() : new CompoundTag();
- if (tag.contains(TILE_DATA_KEY))
- return false;
-
- tag.put(TILE_DATA_KEY, tileTag);
-
- // ItemStack drop = new ItemStack(state.getBlock().getItemDropped(state,
- // itemRand, 0), 1, state.getBlock().damageDropped(state));
-
- tag.putString("block", ForgeRegistries.BLOCKS.getKey(state.getBlock()).toString());
- // Item item = Item.getItemFromBlock(state.getBlock());
- // tag.setInt("meta", drop.getItemDamage());
- tag.putInt("stateid", Block.getId(state));
- stack.setTag(tag);
- return true;
- }
-
- public static void updateTileLocation(CompoundTag tag, BlockPos pos)
- {
- tag.putInt("x", pos.getX());
- tag.putInt("y", pos.getY());
- tag.putInt("z", pos.getZ());
- }
-
- public static void clearTileData(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- tag.remove(TILE_DATA_KEY);
- tag.remove("block");
- tag.remove("stateid");
- }
- }
-
- public static CompoundTag getTileData(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- return tag.getCompound(TILE_DATA_KEY);
- }
- return null;
- }
-
- public static Block getBlock(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- int id = tag.getInt("stateid");
- return Block.stateById(id).getBlock();
- }
- return Blocks.AIR;
- }
-
- // public static int getMeta(ItemStack stack)
- // {
- // if (stack.hasTag())
- // {
- // CompoundTag tag = stack.getTag();
- // int meta = tag.getInt("meta");
- // return meta;
- // }
- // return 0;
- // }
-
- public static ItemStack getItemStack(ItemStack stack)
- {
- return new ItemStack(getBlock(stack), 1);
- }
-
- public static BlockState getBlockState(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- int id = tag.getInt("stateid");
- return Block.stateById(id);
- }
- return Blocks.AIR.defaultBlockState();
- }
-
- public static boolean isLocked(BlockPos pos, Level level)
- {
- BlockEntity te = level.getBlockEntity(pos);
- if (te != null)
- {
- CompoundTag tag = new CompoundTag();
- te.saveWithId();
- return tag.contains("Lock") ? !tag.getString("Lock").equals("") : false;
- }
-
- return false;
- }
-
- // private boolean equal(Object[] a, Object[] b)
- // {
- // if (a.length != b.length)
- // return false;
- //
- // List lA = Arrays.asList(a);
- // List lB = Arrays.asList(b);
- //
- // return lA.containsAll(lB);
- // }
-
- private int potionLevel(ItemStack stack)
- {
- String nbt = getTileData(stack).toString();
- int i = nbt.length() / 500;
-
- if (i > 4)
- i = 4;
-
- if (!Settings.heavyTiles.get())
- i = 1;
-
- return (int) (i * Settings.blockSlownessMultiplier.get());
- }
-}
diff --git a/old/src/main/java/tschipp/carryon/common/item/ItemCarryonEntity.java b/old/src/main/java/tschipp/carryon/common/item/ItemCarryonEntity.java
deleted file mode 100644
index 531d217..0000000
--- a/old/src/main/java/tschipp/carryon/common/item/ItemCarryonEntity.java
+++ /dev/null
@@ -1,280 +0,0 @@
-package tschipp.carryon.common.item;
-
-import java.lang.reflect.Method;
-import java.util.Optional;
-
-import javax.annotation.Nonnull;
-
-import net.minecraft.core.BlockPos;
-import net.minecraft.core.Direction;
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.network.chat.Component;
-import net.minecraft.world.InteractionHand;
-import net.minecraft.world.InteractionResult;
-import net.minecraft.world.effect.MobEffectInstance;
-import net.minecraft.world.effect.MobEffects;
-import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.EntityType;
-import net.minecraft.world.entity.LivingEntity;
-import net.minecraft.world.entity.Mob;
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.item.Item;
-import net.minecraft.world.item.ItemStack;
-import net.minecraft.world.item.context.BlockPlaceContext;
-import net.minecraft.world.item.context.UseOnContext;
-import net.minecraft.world.level.Level;
-import net.minecraft.world.level.block.state.BlockState;
-import net.minecraftforge.fml.ModList;
-import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
-import tschipp.carryon.client.keybinds.CarryOnKeybinds;
-import tschipp.carryon.common.config.Configs.Settings;
-import tschipp.carryon.common.event.ItemEvents;
-
-public class ItemCarryonEntity extends Item
-{
-
- private static final Method initGoals;
-
- static
- {
- initGoals = ObfuscationReflectionHelper.findMethod(Mob.class, "m_8099_");
- initGoals.setAccessible(true);
- }
-
- public static final String ENTITY_DATA_KEY = "entityData";
-
- public ItemCarryonEntity()
- {
- super(new Item.Properties().stacksTo(1));
- }
-
- @Override
- public Component getName(ItemStack stack)
- {
- if (hasEntityData(stack))
- {
-
- return Component.translatable(getEntityType(stack).getDescriptionId());
- }
-
- return Component.literal("");
- }
-
- public static boolean hasEntityData(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- return tag.contains(ENTITY_DATA_KEY) && tag.contains("entity");
- }
- return false;
- }
-
- public static boolean storeEntityData(@Nonnull Entity entity, Level level, ItemStack stack)
- {
- if (entity == null || stack.isEmpty())
- return false;
-
- CompoundTag entityData = new CompoundTag();
- entity.saveWithoutId(entityData);
-
- String name = EntityType.getKey(entity.getType()).toString();
-
- CompoundTag tag = stack.hasTag() ? stack.getTag() : new CompoundTag();
- if (tag.contains(ENTITY_DATA_KEY))
- return false;
-
- tag.put(ENTITY_DATA_KEY, entityData);
- tag.putString("entity", name);
- stack.setTag(tag);
- return true;
- }
-
- @Override
- public InteractionResult useOn(UseOnContext context)
- {
- Player player = context.getPlayer();
- Level level = context.getLevel();
- BlockPos pos = context.getClickedPos();
- Direction facing = context.getClickedFace();
-
- ItemStack stack = context.getItemInHand();
-
- BlockState state = level.getBlockState(pos);
-
- if (ModList.get().isLoaded("betterplacement") && CarryOnKeybinds.isKeyPressed(player))
- return InteractionResult.FAIL;
-
- if (hasEntityData(stack))
- {
- BlockPos finalPos = pos;
-
- if (!state.canBeReplaced(new BlockPlaceContext(context)))
- {
- finalPos = pos.relative(facing);
- }
-
- Entity entity = getEntity(stack, level);
- if (entity != null)
- {
- if (!level.isClientSide)
- {
- entity.absMoveTo(finalPos.getX() + 0.5, finalPos.getY(), finalPos.getZ() + 0.5, 180 + player.yHeadRot, 0.0f);
- level.addFreshEntity(entity);
- if (entity instanceof Mob)
- {
- ((Mob) entity).playAmbientSound();
- }
- clearEntityData(stack);
- player.setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY);
- ItemEvents.sendPacket(player, 9, 0);
-
- }
- player.getPersistentData().remove("overrideKey");
- return InteractionResult.SUCCESS;
- }
- }
-
- return InteractionResult.FAIL;
- }
-
- @Override
- public void inventoryTick(ItemStack stack, Level level, Entity entity, int itemSlot, boolean isSelected)
- {
- if (hasEntityData(stack))
- {
- if (getEntity(stack, level) == null)
- stack = ItemStack.EMPTY;
-
- if (entity instanceof LivingEntity)
- {
- if (entity instanceof Player && Settings.slownessInCreative.get() ? false : ((Player) entity).isCreative())
- return;
-
- ((LivingEntity) entity).addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 1, this.potionLevel(stack, level), false, false));
- }
-
- }
- else
- {
- stack = ItemStack.EMPTY;
- }
- }
-
- public static void clearEntityData(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- tag.remove(ENTITY_DATA_KEY);
- tag.remove("entity");
- }
- }
-
- public static CompoundTag getPersistentData(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- return tag.getCompound(ENTITY_DATA_KEY);
- }
- return null;
- }
-
- public static Entity getEntity(ItemStack stack, Level level)
- {
- if (level == null)
- return null;
-
- String name = getEntityName(stack);
-
- CompoundTag e = getPersistentData(stack);
- Optional> type = EntityType.byString(name);
- Entity entity = null;
-
- if (type.isPresent())
- {
- entity = type.get().create(level);
- }
-
- if (entity != null)
- {
- try
- {
- if (entity instanceof Mob)
- initGoals.invoke(entity);
- entity.deserializeNBT(e);
- }
- catch (Exception e1)
- {
- try
- {
- entity.deserializeNBT(e);
- }
- catch (Exception e2)
- {
- }
- }
- }
-
- return entity;
- }
-
- public static String getEntityName(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- return tag.getString("entity");
- }
- return null;
- }
-
- public static String getCustomName(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- if (tag.contains("CustomName") && !tag.getString("CustomName").isEmpty())
- {
- return tag.toString();
- }
- else
- {
- return tag.toString();
- }
- }
- return null;
- }
-
- public static EntityType> getEntityType(ItemStack stack)
- {
- if (stack.hasTag())
- {
- CompoundTag tag = stack.getTag();
- String name = tag.getString("entity");
- Optional> type = EntityType.byString(name);
- if (type.isPresent())
- return type.get();
- }
- return null;
- }
-
- private int potionLevel(ItemStack stack, Level level)
- {
- Entity e = getEntity(stack, level);
- if (e == null)
- return 1;
-
- int i = (int) (e.getBbHeight() * e.getBbWidth());
- if (i > 4)
- i = 4;
-
- if (!Settings.heavyEntities.get())
- i = 1;
-
- double multiplier = Settings.entitySlownessMultiplier.get();
-
- return (int) (multiplier * i);
- }
-}
diff --git a/old/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java b/old/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java
deleted file mode 100644
index 511119b..0000000
--- a/old/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java
+++ /dev/null
@@ -1,767 +0,0 @@
-package tschipp.carryon.common.scripting;
-
-import java.util.Objects;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.nbt.TagParser;
-import net.minecraft.network.FriendlyByteBuf;
-import net.minecraft.resources.ResourceLocation;
-import tschipp.carryon.common.helper.InvalidConfigException;
-
-public class CarryOnOverride
-{
- // BLOCKS
- private CompoundTag typeBlockTag = new CompoundTag();
- private String typeNameBlock = "";
- private String typeMaterial = "";
- private String typeHardness = "";
- private String typeResistance = "";
-
- // ENTITIES
- private CompoundTag typeEntityTag;
- private String typeNameEntity = "";
- private String typeHeight = "";
- private String typeWidth = "";
- private String typeHealth = "";
-
- // CONDITIONS
- private String conditionGamestage = "";
- private String conditionAchievement = "";
- private String conditionXp = "";
- private String conditionGamemode = "";
- private String conditionScoreboard = "";
- private String conditionPosition = "";
- private String conditionEffects = "";
-
- // RENDER
- private String renderNameBlock = "";
- private String renderNameEntity = "";
- private CompoundTag renderNBT = new CompoundTag();
- private String renderTranslation = "";
- private String renderRotation = "";
- private String renderscaled = "";
- private String renderRotationLeftArm = "";
- private String renderRotationRightArm = "";
- private boolean renderLeftArm = true;
- private boolean renderRightArm = true;
-
- // EFFECTS
- private String commandInit = "";
- private String commandLoop = "";
- private String commandPlace = "";
-
- private boolean isBlock;
- private boolean isEntity;
- private String resourceLocation = "";
- public boolean isInvalid = false;
-
- public CarryOnOverride(String path)
- {
- this.resourceLocation = path;
- }
-
- public CarryOnOverride(JsonElement jsonElem, ResourceLocation loc)
- {
- boolean errored = false;
- this.resourceLocation = loc.toString();
-
- if (jsonElem != null && jsonElem.isJsonObject())
- {
- try
- {
- JsonObject json = jsonElem.getAsJsonObject();
- JsonObject object = (JsonObject) json.get("object");
- JsonObject conditions = (JsonObject) json.get("conditions");
- JsonObject render = (JsonObject) json.get("render");
- JsonObject effects = (JsonObject) json.get("effects");
-
- if (object != null && (conditions != null || render != null || effects != null))
- {
- JsonObject block = (JsonObject) object.get("block");
- JsonObject entity = (JsonObject) object.get("entity");
-
- if (block == null && entity == null || block != null && entity != null)
- errored = true;
-
- if (!errored)
- {
- if (block != null)
- {
- this.setBlock(true);
- JsonElement name = block.get("name");
- JsonElement material = block.get("material");
- JsonElement hardness = block.get("hardness");
- JsonElement resistance = block.get("resistance");
- JsonObject nbt = (JsonObject) block.get("nbt");
-
- if (name != null)
- this.setTypeNameBlock(name.getAsString());
- if (material != null)
- this.setTypeMaterial(material.getAsString());
- if (hardness != null)
- this.setTypeHardness(hardness.getAsString());
- if (resistance != null)
- this.setTypeResistance(resistance.getAsString());
- if (nbt != null)
- this.setTypeBlockTag(TagParser.parseTag(nbt.toString()));
- }
- else
- {
- this.setEntity(true);
- JsonElement name = entity.get("name");
- JsonElement health = entity.get("health");
- JsonElement height = entity.get("height");
- JsonElement width = entity.get("width");
- JsonObject nbt = (JsonObject) entity.get("nbt");
-
- if (name != null)
- this.setTypeNameEntity(name.getAsString());
- if (health != null)
- this.setTypeHealth(health.getAsString());
- if (height != null)
- this.setTypeHeight(height.getAsString());
- if (width != null)
- this.setTypeWidth(width.getAsString());
- if (nbt != null)
- this.setTypeEntityTag(TagParser.parseTag(nbt.toString()));
- }
-
- if (conditions != null)
- {
- JsonElement gamestage = conditions.get("gamestage");
- JsonElement achievement = conditions.get("advancement");
- JsonElement xp = conditions.get("xp");
- JsonElement gamemode = conditions.get("gamemode");
- JsonElement scoreboard = conditions.get("scoreboard");
- JsonElement position = conditions.get("position");
- JsonElement potionEffects = conditions.get("effects");
-
- if (gamestage != null)
- this.setConditionGamestage(gamestage.getAsString());
- if (achievement != null)
- this.setConditionAchievement(achievement.getAsString());
- if (xp != null)
- this.setConditionXp(xp.getAsString());
- if (gamemode != null)
- this.setConditionGamemode(gamemode.getAsString());
- if (scoreboard != null)
- this.setConditionScoreboard(scoreboard.getAsString());
- if (position != null)
- this.setConditionPosition(position.getAsString());
- if (potionEffects != null)
- this.setConditionEffects(potionEffects.getAsString());
- }
-
- if (render != null)
- {
- JsonElement name_block = render.get("name_block");
- JsonElement name_entity = render.get("name_entity");
- JsonObject nbt = (JsonObject) render.get("nbt");
- JsonElement translation = render.get("translation");
- JsonElement rotation = render.get("rotation");
- JsonElement scaled = render.get("scale");
- JsonElement rotationLeftArm = render.get("rotation_left_arm");
- JsonElement rotationRightArm = render.get("rotation_right_arm");
- JsonElement renderLeftArm = render.get("render_left_arm");
- JsonElement renderRightArm = render.get("render_right_arm");
-
- if (name_block != null)
- this.setRenderNameBlock(name_block.getAsString());
- if (name_entity != null)
- this.setRenderNameEntity(name_entity.getAsString());
- if (translation != null)
- this.setRenderTranslation(translation.getAsString());
- if (rotation != null)
- this.setRenderRotation(rotation.getAsString());
- if (scaled != null)
- this.setRenderscaled(scaled.getAsString());
- if (nbt != null)
- this.setRenderNBT(TagParser.parseTag(nbt.toString()));
- if (rotationLeftArm != null)
- this.setRenderRotationLeftArm(rotationLeftArm.getAsString());
- if (rotationRightArm != null)
- this.setRenderRotationRightArm(rotationRightArm.getAsString());
- if (renderLeftArm != null)
- this.setRenderLeftArm(renderLeftArm.getAsBoolean());
- if (renderRightArm != null)
- this.setRenderRightArm(renderRightArm.getAsBoolean());
- }
-
- if (effects != null)
- {
- JsonElement commandInit = effects.get("commandPickup");
- JsonElement commandLoop = effects.get("commandLoop");
- JsonElement commandPlace = effects.get("commandPlace");
-
- if (commandInit != null)
- this.setCommandInit(commandInit.getAsString());
- if (commandLoop != null)
- this.setCommandLoop(commandLoop.getAsString());
- if (commandPlace != null)
- this.setCommandPlace(commandPlace.getAsString());
- }
- }
- else
- this.isInvalid = true;
- }
- }
- catch (Exception e)
- {
- this.isInvalid = true;
- }
- }
- else
- this.isInvalid = true;
-
- if (!this.isBlock && !this.isEntity)
- this.isInvalid = true;
-
- if (this.isInvalid)
- new InvalidConfigException("The script parsing for " + this.resourceLocation + " has failed! Please double check!").printException();
- }
-
- public String getCommandInit()
- {
- return this.commandInit;
- }
-
- public void setCommandInit(String commandInit)
- {
- this.commandInit = commandInit;
- }
-
- public String getCommandLoop()
- {
- return this.commandLoop;
- }
-
- public void setCommandLoop(String commandLoop)
- {
- this.commandLoop = commandLoop;
- }
-
- public String getConditionEffects()
- {
- return this.conditionEffects;
- }
-
- public void setConditionEffects(String conditionEffects)
- {
- this.conditionEffects = conditionEffects;
- }
-
- public String getRenderRotationLeftArm()
- {
- return this.renderRotationLeftArm;
- }
-
- public void setRenderRotationLeftArm(String renderRotationLeftArm)
- {
- this.renderRotationLeftArm = renderRotationLeftArm;
- }
-
- public String getRenderRotationRightArm()
- {
- return this.renderRotationRightArm;
- }
-
- public void setRenderRotationRightArm(String renderRotationRightArm)
- {
- this.renderRotationRightArm = renderRotationRightArm;
- }
-
- public boolean isRenderLeftArm()
- {
- return this.renderLeftArm;
- }
-
- public void setRenderLeftArm(boolean renderLeftArm)
- {
- this.renderLeftArm = renderLeftArm;
- }
-
- public boolean isRenderRightArm()
- {
- return this.renderRightArm;
- }
-
- public void setRenderRightArm(boolean renderRightArm)
- {
- this.renderRightArm = renderRightArm;
- }
-
- @Override
- public int hashCode()
- {
- final int prime = 31;
- int result = 1;
- return prime * result + (this.resourceLocation == null ? 0 : this.resourceLocation.hashCode());
- }
-
- @Override
- public String toString()
- {
- return "Code: " + this.hashCode();
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (obj == null || this.getClass() != obj.getClass())
- return false;
- CarryOnOverride other = (CarryOnOverride) obj;
- if (!Objects.equals(this.commandInit, other.commandInit) || !Objects.equals(this.commandLoop, other.commandLoop) || !Objects.equals(this.commandPlace, other.commandPlace) || !Objects.equals(this.conditionAchievement, other.conditionAchievement))
- {
- return false;
- }
- if (!Objects.equals(this.conditionEffects, other.conditionEffects) || !Objects.equals(this.conditionGamemode, other.conditionGamemode) || !Objects.equals(this.conditionGamestage, other.conditionGamestage) || !Objects.equals(this.conditionPosition, other.conditionPosition))
- {
- return false;
- }
- if (!Objects.equals(this.conditionScoreboard, other.conditionScoreboard))
- {
- return false;
- }
- if (!Objects.equals(this.conditionXp, other.conditionXp))
- {
- return false;
- }
- if (this.isBlock != other.isBlock)
- return false;
- if (this.isEntity != other.isEntity)
- return false;
- if (!Objects.equals(this.resourceLocation, other.resourceLocation))
- {
- return false;
- }
- if (this.renderLeftArm != other.renderLeftArm)
- return false;
- if (!Objects.equals(this.renderNBT, other.renderNBT))
- {
- return false;
- }
- if (!Objects.equals(this.renderNameBlock, other.renderNameBlock))
- {
- return false;
- }
- if (!Objects.equals(this.renderNameEntity, other.renderNameEntity))
- {
- return false;
- }
- if (this.renderRightArm != other.renderRightArm)
- return false;
- if (!Objects.equals(this.renderRotation, other.renderRotation))
- {
- return false;
- }
- if (!Objects.equals(this.renderRotationLeftArm, other.renderRotationLeftArm))
- {
- return false;
- }
- if (!Objects.equals(this.renderRotationRightArm, other.renderRotationRightArm))
- {
- return false;
- }
- if (!Objects.equals(this.renderscaled, other.renderscaled))
- {
- return false;
- }
- if (!Objects.equals(this.renderTranslation, other.renderTranslation))
- {
- return false;
- }
- if (!Objects.equals(this.typeBlockTag, other.typeBlockTag))
- {
- return false;
- }
- if (!Objects.equals(this.typeEntityTag, other.typeEntityTag))
- {
- return false;
- }
- if (!Objects.equals(this.typeHardness, other.typeHardness))
- {
- return false;
- }
- if (!Objects.equals(this.typeHealth, other.typeHealth))
- {
- return false;
- }
- if (!Objects.equals(this.typeHeight, other.typeHeight))
- {
- return false;
- }
- if (!Objects.equals(this.typeMaterial, other.typeMaterial))
- {
- return false;
- }
- if (!Objects.equals(this.typeNameBlock, other.typeNameBlock))
- {
- return false;
- }
- if (!Objects.equals(this.typeNameEntity, other.typeNameEntity))
- {
- return false;
- }
- if (!Objects.equals(this.typeResistance, other.typeResistance))
- {
- return false;
- }
- if (!Objects.equals(this.typeWidth, other.typeWidth))
- {
- return false;
- }
- return true;
- }
-
- public boolean isBlock()
- {
- return this.isBlock;
- }
-
- public void setBlock(boolean isBlock)
- {
- this.isBlock = isBlock;
- }
-
- public boolean isEntity()
- {
- return this.isEntity;
- }
-
- public void setEntity(boolean isEntity)
- {
- this.isEntity = isEntity;
- }
-
- public CompoundTag getTypeBlockTag()
- {
- return this.typeBlockTag;
- }
-
- public String getTypeNameBlock()
- {
- return this.typeNameBlock;
- }
-
- public String getTypeMaterial()
- {
- return this.typeMaterial;
- }
-
- public String getTypeHardness()
- {
- return this.typeHardness;
- }
-
- public String getTypeResistance()
- {
- return this.typeResistance;
- }
-
- public CompoundTag getTypeEntityTag()
- {
- return this.typeEntityTag;
- }
-
- public String getTypeNameEntity()
- {
- return this.typeNameEntity;
- }
-
- public String getTypeHeight()
- {
- return this.typeHeight;
- }
-
- public String getTypeWidth()
- {
- return this.typeWidth;
- }
-
- public String getTypeHealth()
- {
- return this.typeHealth;
- }
-
- public String getConditionGamestage()
- {
- return this.conditionGamestage;
- }
-
- public String getConditionAchievement()
- {
- return this.conditionAchievement;
- }
-
- public String getConditionXp()
- {
- return this.conditionXp;
- }
-
- public String getConditionGamemode()
- {
- return this.conditionGamemode;
- }
-
- public String getConditionScoreboard()
- {
- return this.conditionScoreboard;
- }
-
- public String getConditionPosition()
- {
- return this.conditionPosition;
- }
-
- public String getRenderNameBlock()
- {
- return this.renderNameBlock;
- }
-
- public String getRenderNameEntity()
- {
- return this.renderNameEntity;
- }
-
- public CompoundTag getRenderNBT()
- {
- return this.renderNBT;
- }
-
- public String getRenderTranslation()
- {
- return this.renderTranslation;
- }
-
- public String getRenderRotation()
- {
- return this.renderRotation;
- }
-
- public String getRenderScaled()
- {
- return this.renderscaled;
- }
-
- public void setTypeBlockTag(CompoundTag typeBlockTag)
- {
- this.typeBlockTag = typeBlockTag;
- }
-
- public void setTypeNameBlock(String typeNameBlock)
- {
- this.typeNameBlock = typeNameBlock;
- }
-
- public void setTypeMaterial(String typeMaterial)
- {
- this.typeMaterial = typeMaterial;
- }
-
- public void setTypeHardness(String typeHardness)
- {
- this.typeHardness = typeHardness;
- }
-
- public void setTypeResistance(String typeResistance)
- {
- this.typeResistance = typeResistance;
- }
-
- public void setTypeEntityTag(CompoundTag typeEntityTag)
- {
- this.typeEntityTag = typeEntityTag;
- }
-
- public void setTypeNameEntity(String typeNameEntity)
- {
- this.typeNameEntity = typeNameEntity;
- }
-
- public void setTypeHeight(String typeHeight)
- {
- this.typeHeight = typeHeight;
- }
-
- public void setTypeWidth(String typeWidth)
- {
- this.typeWidth = typeWidth;
- }
-
- public void setTypeHealth(String typeHealth)
- {
- this.typeHealth = typeHealth;
- }
-
- public void setConditionGamestage(String conditionGamestage)
- {
- this.conditionGamestage = conditionGamestage;
- }
-
- public void setConditionAchievement(String conditionAchievement)
- {
- this.conditionAchievement = conditionAchievement;
- }
-
- public void setConditionXp(String conditionXp)
- {
- this.conditionXp = conditionXp;
- }
-
- public void setConditionGamemode(String conditionGamemode)
- {
- this.conditionGamemode = conditionGamemode;
- }
-
- public void setConditionScoreboard(String conditionScoreboard)
- {
- this.conditionScoreboard = conditionScoreboard;
- }
-
- public void setConditionPosition(String conditionPosition)
- {
- this.conditionPosition = conditionPosition;
- }
-
- public void setRenderNameBlock(String renderNameBlock)
- {
- this.renderNameBlock = renderNameBlock;
- }
-
- public void setRenderNameEntity(String renderNameEntity)
- {
- this.renderNameEntity = renderNameEntity;
- }
-
- public void setRenderNBT(CompoundTag renderNBT)
- {
- this.renderNBT = renderNBT;
- }
-
- public void setRenderTranslation(String renderTranslation)
- {
- this.renderTranslation = renderTranslation;
- }
-
- public void setRenderRotation(String renderRotation)
- {
- this.renderRotation = renderRotation;
- }
-
- public void setRenderscaled(String renderscaled)
- {
- this.renderscaled = renderscaled;
- }
-
- public String getCommandPlace()
- {
- return this.commandPlace;
- }
-
- public void setCommandPlace(String commandPlace)
- {
- this.commandPlace = commandPlace;
- }
-
- public void serialize(FriendlyByteBuf buf)
- {
- // BLOCKS
- buf.writeNbt(this.typeBlockTag);
- buf.writeUtf(this.typeNameBlock);
- buf.writeUtf(this.typeMaterial);
- buf.writeUtf(this.typeHardness);
- buf.writeUtf(this.typeResistance);
-
- // ENTITIES
- buf.writeNbt(this.typeEntityTag);
- buf.writeUtf(this.typeNameEntity);
- buf.writeUtf(this.typeHeight);
- buf.writeUtf(this.typeWidth);
- buf.writeUtf(this.typeHealth);
-
- // CONDITIONS
- buf.writeUtf(this.conditionGamestage);
- buf.writeUtf(this.conditionAchievement);
- buf.writeUtf(this.conditionXp);
- buf.writeUtf(this.conditionGamemode);
- buf.writeUtf(this.conditionScoreboard);
- buf.writeUtf(this.conditionPosition);
- buf.writeUtf(this.conditionEffects);
-
- // RENDER
- buf.writeUtf(this.renderNameBlock);
- buf.writeUtf(this.renderNameEntity);
- buf.writeNbt(this.renderNBT);
- buf.writeUtf(this.renderTranslation);
- buf.writeUtf(this.renderRotation);
- buf.writeUtf(this.renderscaled);
- buf.writeUtf(this.renderRotationLeftArm);
- buf.writeUtf(this.renderRotationRightArm);
- buf.writeBoolean(this.renderLeftArm);
- buf.writeBoolean(this.renderRightArm);
-
- // EFFECTS
- buf.writeUtf(this.commandInit);
- buf.writeUtf(this.commandLoop);
- buf.writeUtf(this.commandPlace);
-
- buf.writeBoolean(this.isBlock);
- buf.writeBoolean(this.isEntity);
- buf.writeUtf(this.resourceLocation);
- }
-
- public static CarryOnOverride deserialize(FriendlyByteBuf buf)
- {
- CarryOnOverride override = new CarryOnOverride("");
- override.typeBlockTag = buf.readNbt();
- override.typeNameBlock = buf.readUtf();
- override.typeMaterial = buf.readUtf();
- override.typeHardness = buf.readUtf();
- override.typeResistance = buf.readUtf();
-
- // ENTITIES
- override.typeEntityTag = buf.readNbt();
- override.typeNameEntity = buf.readUtf();
- override.typeHeight = buf.readUtf();
- override.typeWidth = buf.readUtf();
- override.typeHealth = buf.readUtf();
-
- // CONDITIONS
- override.conditionGamestage = buf.readUtf();
- override.conditionAchievement = buf.readUtf();
- override.conditionXp = buf.readUtf();
- override.conditionGamemode = buf.readUtf();
- override.conditionScoreboard = buf.readUtf();
- override.conditionPosition = buf.readUtf();
- override.conditionEffects = buf.readUtf();
-
- // RENDER
- override.renderNameBlock = buf.readUtf();
- override.renderNameEntity = buf.readUtf();
- override.renderNBT = buf.readNbt();
- override.renderTranslation = buf.readUtf();
- override.renderRotation = buf.readUtf();
- override.renderscaled = buf.readUtf();
- override.renderRotationLeftArm = buf.readUtf();
- override.renderRotationRightArm = buf.readUtf();
- override.renderLeftArm = buf.readBoolean();
- override.renderRightArm = buf.readBoolean();
-
- // EFFECTS
- override.commandInit = buf.readUtf();
- override.commandLoop = buf.readUtf();
- override.commandPlace = buf.readUtf();
-
- override.isBlock = buf.readBoolean();
- override.isEntity = buf.readBoolean();
- override.resourceLocation = buf.readUtf();
-
- return override;
- }
-
-}
diff --git a/old/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java b/old/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java
deleted file mode 100644
index 9095910..0000000
--- a/old/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package tschipp.carryon.common.scripting;
-
-import java.lang.reflect.Method;
-
-import javax.annotation.Nullable;
-
-import net.minecraft.advancements.Advancement;
-import net.minecraft.core.BlockPos;
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.resources.ResourceLocation;
-import net.minecraft.server.ServerAdvancementManager;
-import net.minecraft.server.level.ServerPlayer;
-import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.LivingEntity;
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.level.Level;
-import net.minecraft.world.level.block.Block;
-import net.minecraft.world.level.block.state.BlockState;
-import net.minecraft.world.level.material.Material;
-import net.minecraftforge.fml.ModList;
-import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
-import net.minecraftforge.registries.ForgeRegistries;
-import tschipp.carryon.common.config.Configs.Settings;
-import tschipp.carryon.common.handler.ListHandler;
-import tschipp.carryon.common.helper.ScriptParseHelper;
-
-public class ScriptChecker
-{
- @Nullable
- public static CarryOnOverride inspectBlock(BlockState state, Level level, BlockPos pos, @Nullable CompoundTag tag)
- {
- if (!Settings.useScripts.get())
- return null;
-
- Block block = state.getBlock();
- Material material = state.getMaterial();
- float hardness = state.getDestroySpeed(level, pos);
- @SuppressWarnings("deprecation")
- float resistance = block.getExplosionResistance();
- CompoundTag nbt = tag;
-
- boolean isAllowed = Settings.useWhitelistBlocks.get() ? ListHandler.isAllowed(block) : !ListHandler.isForbidden(block);
-
- if (isAllowed)
- {
- for (CarryOnOverride override : ScriptReader.OVERRIDES.values())
- {
- if (override.isBlock() && matchesAll(override, block, material, hardness, resistance, nbt))
- return override;
- }
- }
-
- return null;
- }
-
- @Nullable
- public static CarryOnOverride inspectEntity(Entity entity)
- {
- if (!Settings.useScripts.get())
- return null;
-
- String name = ForgeRegistries.ENTITY_TYPES.getKey(entity.getType()).toString();
- float height = entity.getBbHeight();
- float width = entity.getBbWidth();
- float health = entity instanceof LivingEntity ? ((LivingEntity) entity).getHealth() : 0.0f;
- CompoundTag tag = entity.serializeNBT();
-
- boolean isAllowed = Settings.useWhitelistEntities.get() ? ListHandler.isAllowed(entity) : !ListHandler.isForbidden(entity);
-
- if (isAllowed)
- {
- for (CarryOnOverride override : ScriptReader.OVERRIDES.values())
- {
- if (override.isEntity() && matchesAll(override, name, height, width, health, tag))
- return override;
- }
- }
-
- return null;
- }
-
- public static boolean matchesAll(CarryOnOverride override, String name, float height, float width, float health, CompoundTag tag)
- {
- boolean matchname = override.getTypeNameEntity().isEmpty() ? true : name.equals(override.getTypeNameEntity());
- boolean matchheight = ScriptParseHelper.matches(height, override.getTypeHeight());
- boolean matchwidth = ScriptParseHelper.matches(width, override.getTypeWidth());
- boolean matchhealth = ScriptParseHelper.matches(health, override.getTypeHealth());
- boolean matchnbt = ScriptParseHelper.matches(tag, override.getTypeEntityTag());
-
- return matchname && matchheight && matchwidth && matchhealth && matchnbt;
- }
-
- public static boolean matchesAll(CarryOnOverride override, Block block, Material material, float hardness, float resistance, CompoundTag nbt)
- {
- boolean matchnbt = ScriptParseHelper.matches(nbt, override.getTypeBlockTag());
- boolean matchblock = ScriptParseHelper.matches(block, override.getTypeNameBlock());
- boolean matchmaterial = ScriptParseHelper.matches(material, override.getTypeMaterial());
- boolean matchhardness = ScriptParseHelper.matches(hardness, override.getTypeHardness());
- boolean matchresistance = ScriptParseHelper.matches(resistance, override.getTypeResistance());
-
- return matchnbt && matchblock && matchmaterial && matchhardness && matchresistance;
- }
-
- public static boolean fulfillsConditions(CarryOnOverride override, Player player)
- {
- ServerAdvancementManager manager = ((ServerPlayer) player).server.getAdvancements();
- Advancement adv = manager.getAdvancement(new ResourceLocation(override.getConditionAchievement().isEmpty() ? "" : override.getConditionAchievement()));
-
- boolean achievement = adv == null ? true : ((ServerPlayer) player).getAdvancements().getOrStartProgress(adv).isDone();
- boolean gamemode = ScriptParseHelper.matches(((ServerPlayer) player).gameMode.getGameModeForPlayer().getId(), override.getConditionGamemode());
- boolean gamestage = true;
- if (ModList.get().isLoaded("gamestages") && !override.getConditionGamestage().isEmpty())
- {
- try
- {
- Class> gameStageHelper = Class.forName("net.darkhax.gamestages.GameStageHelper");
- Class> iStageData = Class.forName("net.darkhax.gamestages.data.IStageData");
-
- Method getPlayerData = ObfuscationReflectionHelper.findMethod(gameStageHelper, "getPlayerData", Player.class);
- Method hasStage = ObfuscationReflectionHelper.findMethod(iStageData, "hasStage", String.class);
-
- Object stageData = getPlayerData.invoke(null, player);
- String condition = override.getConditionGamestage();
- gamestage = (boolean) hasStage.invoke(stageData, condition);
- }
- catch (Exception e)
- {
- try
- {
- Class> playerDataHandler = Class.forName("net.darkhax.gamestages.capabilities.PlayerDataHandler");
- Class> iStageData = Class.forName("net.darkhax.gamestages.capabilities.PlayerDataHandler$IStageData");
-
- Method getStageData = ObfuscationReflectionHelper.findMethod(playerDataHandler, "getStageData", Player.class);
- Method hasUnlockedStage = ObfuscationReflectionHelper.findMethod(iStageData, "hasUnlockedStage", String.class);
-
- Object stageData = getStageData.invoke(null, player);
- String condition = override.getConditionGamestage();
- gamestage = (boolean) hasUnlockedStage.invoke(stageData, condition);
-
- }
- catch (Exception ex)
- {
- }
- }
-
- }
-
- boolean position = ScriptParseHelper.matches(player.blockPosition(), override.getConditionPosition());
- boolean xp = ScriptParseHelper.matches(player.experienceLevel, override.getConditionXp());
- boolean scoreboard = ScriptParseHelper.matchesScore(player, override.getConditionScoreboard());
- boolean effects = ScriptParseHelper.hasEffects(player, override.getConditionEffects());
-
- return achievement && gamemode && gamestage && position && xp && scoreboard && effects;
- }
-
- @Nullable
- public static CarryOnOverride getOverride(Player player)
- {
- CompoundTag tag = player.getPersistentData();
-
- if (tag != null && tag.contains("overrideKey"))
- {
- int key = tag.getInt("overrideKey");
-
- return ScriptReader.OVERRIDES.get(key);
- }
-
- return null;
- }
-
- public static void setCarryOnOverride(Player player, int i)
- {
- CompoundTag tag = player.getPersistentData();
-
- if (tag != null)
- tag.putInt("overrideKey", i);
- }
-
-}
diff --git a/old/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java b/old/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java
deleted file mode 100644
index 9d68dbd..0000000
--- a/old/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java
+++ /dev/null
@@ -1,191 +0,0 @@
-package tschipp.carryon.common.scripting;
-
-import java.util.HashMap;
-
-public class ScriptReader
-{
- public static HashMap OVERRIDES = new HashMap<>();
-
- // public static HashSet OVERRIDES = new
- // HashSet();
-
- // public static void preInit()
- // {
- // scripts.clear();
- //
- // CarryOn.CONFIGURATION_FILE = new
- // File(FMLPaths.CONFIGDIR.get().toString(), "/carryon-scripts/");
- //
- // if (!CarryOn.CONFIGURATION_FILE.exists())
- // CarryOn.CONFIGURATION_FILE.mkdir();
- //
- // for (File file : CarryOn.CONFIGURATION_FILE.listFiles())
- // {
- // if (file.getName().endsWith(".json"))
- // scripts.add(file);
- // }
- //
- // }
-
- // public static void parseScripts()
- // {
- // OVERRIDES.clear();
- //
- // try
- // {
- // if (!Settings.useScripts.get())
- // return;
- //
- // for (File file : scripts)
- // {
- // boolean errored = false;
- // JsonParser parser = new JsonParser();
- // JsonObject json = (JsonObject) parser.parse(new
- // FileReader(file.getAbsolutePath()));
- //
- // JsonObject object = (JsonObject) json.get("object");
- // JsonObject conditions = (JsonObject) json.get("conditions");
- // JsonObject render = (JsonObject) json.get("render");
- // JsonObject effects = (JsonObject) json.get("effects");
- //
- // if ((object != null && conditions != null) || (object != null && render
- // != null) || (object != null && effects != null))
- // {
- // JsonObject block = (JsonObject) object.get("block");
- // JsonObject entity = (JsonObject) object.get("entity");
- //
- // if ((block == null && entity == null) || (block != null && entity !=
- // null))
- // errored = true;
- //
- // if (!errored)
- // {
- // CarryOnOverride override = new CarryOnOverride(file.getAbsolutePath());
- //
- // if (block != null)
- // {
- // override.setBlock(true);
- // JsonElement name = block.get("name");
- // JsonElement material = block.get("material");
- // JsonElement hardness = block.get("hardness");
- // JsonElement resistance = block.get("resistance");
- // JsonObject nbt = (JsonObject) block.get("nbt");
- //
- // if (name != null)
- // override.setTypeNameBlock(name.getAsString());
- // if (material != null)
- // override.setTypeMaterial(material.getAsString());
- // if (hardness != null)
- // override.setTypeHardness(hardness.getAsString());
- // if (resistance != null)
- // override.setTypeResistance(resistance.getAsString());
- // if (nbt != null)
- // override.setTypeBlockTag(JsonToNBT.getTagFromJson(nbt.toString()));
- // } else
- // {
- // override.setEntity(true);
- // JsonElement name = entity.get("name");
- // JsonElement health = entity.get("health");
- // JsonElement height = entity.get("height");
- // JsonElement width = entity.get("width");
- // JsonObject nbt = (JsonObject) entity.get("nbt");
- //
- // if (name != null)
- // override.setTypeNameEntity(name.getAsString());
- // if (health != null)
- // override.setTypeHealth(health.getAsString());
- // if (height != null)
- // override.setTypeHeight(height.getAsString());
- // if (width != null)
- // override.setTypeWidth(width.getAsString());
- // if (nbt != null)
- // override.setTypeEntityTag(JsonToNBT.getTagFromJson(nbt.toString()));
- // }
- //
- // if (conditions != null)
- // {
- // JsonElement gamestage = conditions.get("gamestage");
- // JsonElement achievement = conditions.get("advancement");
- // JsonElement xp = conditions.get("xp");
- // JsonElement gamemode = conditions.get("gamemode");
- // JsonElement scoreboard = conditions.get("scoreboard");
- // JsonElement position = conditions.get("position");
- // JsonElement potionEffects = conditions.get("effects");
- //
- // if (gamestage != null)
- // override.setConditionGamestage(gamestage.getAsString());
- // if (achievement != null)
- // override.setConditionAchievement(achievement.getAsString());
- // if (xp != null)
- // override.setConditionXp(xp.getAsString());
- // if (gamemode != null)
- // override.setConditionGamemode(gamemode.getAsString());
- // if (scoreboard != null)
- // override.setConditionScoreboard(scoreboard.getAsString());
- // if (position != null)
- // override.setConditionPosition(position.getAsString());
- // if (potionEffects != null)
- // override.setConditionEffects(potionEffects.getAsString());
- // }
- //
- // if (render != null)
- // {
- // JsonElement name_block = render.get("name_block");
- // JsonElement name_entity = render.get("name_entity");
- // JsonObject nbt = (JsonObject) render.get("nbt");
- // JsonElement translation = render.get("translation");
- // JsonElement rotation = render.get("rotation");
- // JsonElement scaled = render.get("scale");
- // JsonElement rotationLeftArm = render.get("rotation_left_arm");
- // JsonElement rotationRightArm = render.get("rotation_right_arm");
- // JsonElement renderLeftArm = render.get("render_left_arm");
- // JsonElement renderRightArm = render.get("render_right_arm");
- //
- // if (name_block != null)
- // override.setRenderNameBlock(name_block.getAsString());
- // if (name_entity != null)
- // override.setRenderNameEntity(name_entity.getAsString());
- // if (translation != null)
- // override.setRenderTranslation(translation.getAsString());
- // if (rotation != null)
- // override.setRenderRotation(rotation.getAsString());
- // if (scaled != null)
- // override.setRenderscaled(scaled.getAsString());
- // if (nbt != null)
- // override.setRenderNBT(JsonToNBT.getTagFromJson(nbt.toString()));
- // if (rotationLeftArm != null)
- // override.setRenderRotationLeftArm(rotationLeftArm.getAsString());
- // if (rotationRightArm != null)
- // override.setRenderRotationRightArm(rotationRightArm.getAsString());
- // if (renderLeftArm != null)
- // override.setRenderLeftArm(renderLeftArm.getAsBoolean());
- // if (renderRightArm != null)
- // override.setRenderRightArm(renderRightArm.getAsBoolean());
- // }
- //
- // if (effects != null)
- // {
- // JsonElement commandInit = effects.get("commandPickup");
- // JsonElement commandLoop = effects.get("commandLoop");
- // JsonElement commandPlace = effects.get("commandPlace");
- //
- // if (commandInit != null)
- // override.setCommandInit(commandInit.getAsString());
- // if (commandLoop != null)
- // override.setCommandLoop(commandLoop.getAsString());
- // if (commandPlace != null)
- // override.setCommandPlace(commandPlace.getAsString());
- // }
- //
- // OVERRIDES.put(override.hashCode(), override);
- // }
- // }
- // }
- //
- // System.out.println("Successfully parsed scripts!");
- // } catch (Exception e)
- // {
- // CarryOn.LOGGER.error(e);
- // }
- // }
-}
diff --git a/old/src/main/java/tschipp/carryon/common/scripting/ScriptReloadListener.java b/old/src/main/java/tschipp/carryon/common/scripting/ScriptReloadListener.java
deleted file mode 100644
index 3a16dbf..0000000
--- a/old/src/main/java/tschipp/carryon/common/scripting/ScriptReloadListener.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package tschipp.carryon.common.scripting;
-
-import java.util.Map;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-
-import net.minecraft.resources.ResourceLocation;
-import net.minecraft.server.packs.resources.ResourceManager;
-import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener;
-import net.minecraft.util.profiling.ProfilerFiller;
-import net.minecraftforge.event.AddReloadListenerEvent;
-import net.minecraftforge.eventbus.api.SubscribeEvent;
-import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
-import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
-import net.minecraftforge.fml.util.thread.EffectiveSide;
-import net.minecraftforge.network.PacketDistributor;
-import net.minecraftforge.server.ServerLifecycleHooks;
-import tschipp.carryon.CarryOn;
-import tschipp.carryon.network.client.ScriptReloadPacket;
-
-@EventBusSubscriber(modid = CarryOn.MODID, bus = Bus.FORGE)
-public class ScriptReloadListener extends SimpleJsonResourceReloadListener
-{
- private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
-
- public ScriptReloadListener()
- {
- super(GSON, "carryon/scripts");
- }
-
- @Override
- protected void apply(Map objects, ResourceManager manager, ProfilerFiller profiler)
- {
- ScriptReader.OVERRIDES.clear();
-
- objects.forEach((path, jsonElem) -> {
- CarryOnOverride override = new CarryOnOverride(jsonElem, path);
- if (!override.isInvalid)
- ScriptReader.OVERRIDES.put(override.hashCode(), override);
- });
-
- if (EffectiveSide.get().isServer() && ServerLifecycleHooks.getCurrentServer() != null)
- {
- CarryOn.network.send(PacketDistributor.ALL.noArg(), new ScriptReloadPacket(ScriptReader.OVERRIDES.values()));
- }
- }
-
- @SubscribeEvent
- public static void onDatapackRegister(AddReloadListenerEvent event)
- {
- event.addListener(new ScriptReloadListener());
- }
-}
diff --git a/old/src/main/java/tschipp/carryon/compat/obfuscate/ObfuscateEvents.java b/old/src/main/java/tschipp/carryon/compat/obfuscate/ObfuscateEvents.java
deleted file mode 100644
index 0974ac7..0000000
--- a/old/src/main/java/tschipp/carryon/compat/obfuscate/ObfuscateEvents.java
+++ /dev/null
@@ -1,125 +0,0 @@
-// package tschipp.carryon.compat.obfuscate;
-//
-// import com.mrcrayfish.obfuscate.client.event.PlayerModelEvent;
-//
-// import net.minecraft.client.model.PlayerModel;
-// import net.minecraft.client.renderer.model.ModelRenderer;
-// import net.minecraft.entity.player.PlayerEntity;
-// import net.minecraft.world.item.ItemStack;
-// import net.minecraftforge.api.distmarker.Dist;
-// import net.minecraftforge.api.distmarker.OnlyIn;
-// import net.minecraftforge.eventbus.api.SubscribeEvent;
-// import tschipp.carryon.common.config.Configs.Settings;
-// import tschipp.carryon.common.handler.RegistrationHandler;
-// import tschipp.carryon.common.helper.ScriptParseHelper;
-// import tschipp.carryon.common.item.ItemCarryonBlock;
-// import tschipp.carryon.common.item.ItemCarryonEntity;
-// import tschipp.carryon.common.scripting.CarryOnOverride;
-// import tschipp.carryon.common.scripting.ScriptChecker;
-//
-// public class ObfuscateEvents
-// {
-//
-// @SubscribeEvent
-// public void preModelPlayerEvent(PlayerModelEvent.SetupAngles.Post event)
-// {
-// if(!Settings.renderArms.get())
-// return;
-//
-// PlayerEntity player = event.getPlayer();
-//
-// Pose pose = player.getPose();
-// if (pose == Pose.SWIMMING || pose == Pose.FALL_FLYING)
-// return;
-//
-// PlayerModel> model = event.getModelPlayer();
-// ItemStack stack = player.getMainHandItem();
-// if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile.get() &&
-// ItemCarryonBlock.hasTileData(stack) || stack.getItem() ==
-// RegistrationHandler.itemEntity.get() && ItemCarryonEntity.hasEntityData(stack))
-// {
-//
-// float rotation = 0;
-//
-// CarryOnOverride overrider = ScriptChecker.getOverride(player);
-// if (overrider != null)
-// {
-// float[] rotLeft = null;
-// float[] rotRight = null;
-// if (overrider.getRenderRotationLeftArm() != null)
-// rotLeft =
-// ScriptParseHelper.getXYZArray(overrider.getRenderRotationLeftArm());
-// if (overrider.getRenderRotationRightArm() != null)
-// rotRight =
-// ScriptParseHelper.getXYZArray(overrider.getRenderRotationRightArm());
-//
-// boolean renderRight = overrider.isRenderRightArm();
-// boolean renderLeft = overrider.isRenderLeftArm();
-//
-// if (renderLeft && rotLeft != null)
-// {
-// renderArmPre(model.leftArm, (float) rotLeft[0], (float) rotLeft[2],
-// rotation);
-// renderArmPre(model.leftSleeve, (float) rotLeft[0], (float) rotLeft[2],
-// rotation);
-// }
-// else if (renderLeft)
-// {
-// renderArmPre(model.leftArm, 0.8F + (player.isShiftKeyDown() ? 0.2f : 0f) -
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.2f : 0),
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? 0.15f : 0), rotation);
-// renderArmPre(model.leftSleeve, 0.8F + (player.isShiftKeyDown() ? 0.2f : 0f) -
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.2f : 0),
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? 0.15f : 0), rotation);
-// }
-//
-// if (renderRight && rotRight != null)
-// {
-// renderArmPre(model.rightArm, (float) rotRight[0], (float) rotRight[2],
-// rotation);
-// renderArmPre(model.rightSleeve, (float) rotRight[0], (float) rotRight[2],
-// rotation);
-// }
-// else if (renderRight)
-// {
-// renderArmPre(model.rightArm, 0.8F + (player.isShiftKeyDown() ? 0.2f : 0f) -
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.2f : 0),
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.15f : 0), rotation);
-// renderArmPre(model.rightSleeve, 0.8F + (player.isShiftKeyDown() ? 0.2f : 0f)
-// - (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.2f : 0),
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.15f : 0), rotation);
-// }
-//
-// }
-// else
-// {
-// renderArmPre(model.rightArm, 0.8F + (player.isShiftKeyDown() ? 0.2f : 0f) -
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.2f : 0),
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.15f : 0), rotation);
-// renderArmPre(model.rightSleeve, 0.8F + (player.isShiftKeyDown() ? 0.2f : 0f)
-// - (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.2f : 0),
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.15f : 0), rotation);
-// renderArmPre(model.leftArm, 0.8F + (player.isShiftKeyDown() ? 0.2f : 0f) -
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.2f : 0),
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? 0.15f : 0), rotation);
-// renderArmPre(model.leftSleeve, 0.8F + (player.isShiftKeyDown() ? 0.2f : 0f) -
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? -0.2f : 0),
-// (stack.getItem() == RegistrationHandler.itemEntity.get() ? 0.15f : 0), rotation);
-// }
-//
-// }
-//
-// }
-//
-//
-// @OnlyIn(Dist.CLIENT)
-// private void renderArmPre(ModelRenderer arm, float x, float z, float
-// rotation)
-// {
-// arm.xRot = (float) -x;
-// arm.yRot = (float) -Math.toRadians(rotation);
-// arm.zRot = (float) z;
-// }
-//
-//
-// }
diff --git a/old/src/main/java/tschipp/carryon/network/client/CarrySlotPacket.java b/old/src/main/java/tschipp/carryon/network/client/CarrySlotPacket.java
deleted file mode 100644
index ed15dce..0000000
--- a/old/src/main/java/tschipp/carryon/network/client/CarrySlotPacket.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package tschipp.carryon.network.client;
-
-import java.util.function.Supplier;
-
-import io.netty.buffer.ByteBuf;
-import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.level.Level;
-import net.minecraftforge.network.NetworkEvent;
-import tschipp.carryon.CarryOn;
-import tschipp.carryon.common.scripting.ScriptChecker;
-
-public class CarrySlotPacket
-{
- public int slot;
- public int carryOverride = 0;
- public int entityid;
-
- public CarrySlotPacket(ByteBuf buf)
- {
- this.slot = buf.readInt();
- this.carryOverride = buf.readInt();
- this.entityid = buf.readInt();
- }
-
- public CarrySlotPacket(int slot, int entityid)
- {
- this.slot = slot;
- this.entityid = entityid;
- }
-
- public CarrySlotPacket(int slot, int entityid, int carryOverride)
- {
- this.slot = slot;
- this.carryOverride = carryOverride;
- this.entityid = entityid;
- }
-
- public void toBytes(ByteBuf buf)
- {
- buf.writeInt(this.slot);
- buf.writeInt(this.carryOverride);
- buf.writeInt(this.entityid);
- }
-
- public boolean handle(Supplier ctx)
- {
- if (ctx.get().getDirection().getReceptionSide().isClient())
- {
- ctx.get().setPacketHandled(true);
-
- ctx.get().enqueueWork(() -> {
-
- Level level = CarryOn.proxy.getLevel();
- ctx.get().setPacketHandled(true);
-
- if (level != null)
- {
- Entity e = level.getEntity(this.entityid);
-
- if (e instanceof Player player)
- {
-
-
- if (this.slot >= 9)
- {
- player.getPersistentData().remove("carrySlot");
- player.getPersistentData().remove("overrideKey");
- }
- else
- {
-
- player.getPersistentData().putInt("carrySlot", this.slot);
- if (this.carryOverride != 0)
- ScriptChecker.setCarryOnOverride(player, this.carryOverride);
- }
- }
-
- }
- });
- }
-
- return true;
- }
-
-}
diff --git a/old/src/main/java/tschipp/carryon/network/client/ScriptReloadPacket.java b/old/src/main/java/tschipp/carryon/network/client/ScriptReloadPacket.java
deleted file mode 100644
index a3bfc62..0000000
--- a/old/src/main/java/tschipp/carryon/network/client/ScriptReloadPacket.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package tschipp.carryon.network.client;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.function.Supplier;
-
-import net.minecraft.network.FriendlyByteBuf;
-import net.minecraftforge.network.NetworkEvent;
-import tschipp.carryon.common.scripting.CarryOnOverride;
-import tschipp.carryon.common.scripting.ScriptReader;
-
-public class ScriptReloadPacket
-{
- private List overrides = new ArrayList<>();
-
-// public ScriptReloadPacket()
-// {
-// }
-
- public ScriptReloadPacket(Collection collection)
- {
- this.overrides.addAll(collection);
- }
-
- public ScriptReloadPacket(FriendlyByteBuf buf)
- {
- int size = buf.readInt();
- for (int i = 0; i < size; i++)
- {
- this.overrides.add(CarryOnOverride.deserialize(buf));
- }
- }
-
- public void toBytes(FriendlyByteBuf buf)
- {
- buf.writeInt(this.overrides.size());
- this.overrides.forEach(override -> override.serialize(buf));
- }
-
- public boolean handle(Supplier ctx)
- {
- if (ctx.get().getDirection().getReceptionSide().isClient())
- {
- ctx.get().setPacketHandled(true);
- ctx.get().enqueueWork(() -> {
-
- ScriptReader.OVERRIDES.clear();
-
- this.overrides.forEach(override -> {
- ScriptReader.OVERRIDES.put(override.hashCode(), override);
- });
-
- });
- }
-
- return true;
-
- }
-}
diff --git a/old/src/main/java/tschipp/carryon/network/server/SyncKeybindPacket.java b/old/src/main/java/tschipp/carryon/network/server/SyncKeybindPacket.java
deleted file mode 100644
index 90b0367..0000000
--- a/old/src/main/java/tschipp/carryon/network/server/SyncKeybindPacket.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package tschipp.carryon.network.server;
-
-import java.util.function.Supplier;
-
-import io.netty.buffer.ByteBuf;
-import net.minecraft.server.level.ServerPlayer;
-import net.minecraftforge.network.NetworkEvent;
-import tschipp.carryon.client.keybinds.CarryOnKeybinds;
-
-public class SyncKeybindPacket
-{
- public boolean pressed;
-
- public SyncKeybindPacket(ByteBuf buf)
- {
- this.pressed = buf.readBoolean();
- }
-
- public SyncKeybindPacket(boolean pressed)
- {
- this.pressed = pressed;
- }
-
- public void toBytes(ByteBuf buf)
- {
- buf.writeBoolean(this.pressed);
- }
-
- public boolean handle(Supplier ctx)
- {
- if (ctx.get().getDirection().getReceptionSide().isServer())
- {
- ctx.get().setPacketHandled(true);
- ctx.get().enqueueWork(() -> {
-
- ServerPlayer player = ctx.get().getSender();
-
- CarryOnKeybinds.setKeyPressed(player, this.pressed);
-
- });
- }
-
- return true;
- }
-
-}
diff --git a/old/src/main/java/tschipp/carryon/proxy/ClientProxy.java b/old/src/main/java/tschipp/carryon/proxy/ClientProxy.java
deleted file mode 100644
index 9de6241..0000000
--- a/old/src/main/java/tschipp/carryon/proxy/ClientProxy.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package tschipp.carryon.proxy;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.level.Level;
-import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
-import tschipp.carryon.client.keybinds.CarryOnKeybinds;
-import tschipp.carryon.common.handler.RegistrationHandler;
-import tschipp.carryon.common.helper.KeyboardCallbackWrapper;
-import tschipp.carryon.common.helper.ScrollCallbackWrapper;
-
-public class ClientProxy implements IProxy
-{
-
- @Override
- public void setup(FMLCommonSetupEvent event)
- {
- RegistrationHandler.regClientEvents();
-
- new ScrollCallbackWrapper().setup(Minecraft.getInstance());
- new KeyboardCallbackWrapper().setup(Minecraft.getInstance());
- }
-
- @Override
- public Player getPlayer()
- {
-
- return Minecraft.getInstance().player;
- }
-
- @Override
- public Level getLevel()
- {
- return Minecraft.getInstance().level;
- }
-}
diff --git a/old/src/main/java/tschipp/carryon/proxy/IProxy.java b/old/src/main/java/tschipp/carryon/proxy/IProxy.java
deleted file mode 100644
index 7125387..0000000
--- a/old/src/main/java/tschipp/carryon/proxy/IProxy.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package tschipp.carryon.proxy;
-
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.level.Level;
-import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
-
-public interface IProxy
-{
-
- public void setup(final FMLCommonSetupEvent event);
-
- public Player getPlayer();
-
- public Level getLevel();
-}
diff --git a/old/src/main/java/tschipp/carryon/proxy/ServerProxy.java b/old/src/main/java/tschipp/carryon/proxy/ServerProxy.java
deleted file mode 100644
index 2f8e1c8..0000000
--- a/old/src/main/java/tschipp/carryon/proxy/ServerProxy.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package tschipp.carryon.proxy;
-
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.level.Level;
-import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
-
-public class ServerProxy implements IProxy
-{
-
- @Override
- public void setup(FMLCommonSetupEvent event)
- {
-
- }
-
- @Override
- public Player getPlayer()
- {
- return null;
- }
-
- @Override
- public Level getLevel()
- {
- return null;
- }
-
-}
diff --git a/old/src/main/resources/META-INF/mods.toml b/old/src/main/resources/META-INF/mods.toml
deleted file mode 100644
index 46c77ae..0000000
--- a/old/src/main/resources/META-INF/mods.toml
+++ /dev/null
@@ -1,32 +0,0 @@
-modLoader="javafml"
-loaderVersion="[41,)"
-issueTrackerURL="https://github.com/Tschipp/CarryOn/issues"
-logoFile="logo.png"
-license="GNU LGPLv3"
-
-[[mods]]
- modId="carryon"
- version="${file.jarVersion}"
- displayName="Carry On"
- description='''Carry On is a simple mod that improves game interaction by allowing players to pick up, carry, and place single block Tile Entities using only their empty hands.'''
- authors="Tschipp, Purplicious_Cow, cy4n" #mandatory
- displayURL="https://minecraft.curseforge.com/projects/carry-on" #mandatory
-
-[[dependencies.carryon]] #optional
- # the modid of the dependency
- modId="forge" #mandatory
- # Does this dependency have to exist - if not, ordering below must be specified
- mandatory=true #mandatory
- # The version range of the dependency
- versionRange="[41,)" #mandatory
- # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
- ordering="NONE"
- # Side this dependency is applied on - BOTH, CLIENT or SERVER
- side="BOTH"
-
-[[dependencies.carryon]]
- modId="minecraft"
- mandatory=true
- versionRange="[1.19,1.20)"
- ordering="NONE"
- side="BOTH"
diff --git a/old/src/main/resources/assets/carryon/lang/en_ud.json b/old/src/main/resources/assets/carryon/lang/en_ud.json
deleted file mode 100644
index 77a6461..0000000
--- a/old/src/main/resources/assets/carryon/lang/en_ud.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "carryon.category.settings": "sᵷuᴉʇʇǝS",
- "carryon.category.blacklist": "ʇsᴉꞁʞɔɐꞁᗺ",
- "carryon.category.modeloverrides": "(pǝɔuɐʌpⱯ) sǝpᴉɹɹǝʌO ꞁǝpoW",
- "carryon.category.custompickupconditions": "(pǝɔuɐʌpⱯ) suoᴉʇᴉpuoƆ dnʞɔᴉԀ ɯoʇsnƆ",
- "carryon.category.whitelist": "ʇsᴉꞁǝʇᴉɥM",
-
- "carryon.general.modeloverrides.modeloverrides": "sǝpᴉɹɹǝʌO ꞁǝpoW",
- "carryon.general.blacklist.forbiddenentities": "dn ʞɔᴉd ʇouuɐɔ ɹǝʎɐꞁԀ ǝɥʇ ʇɐɥʇ sǝᴉʇᴉʇuƎ",
- "carryon.general.blacklist.forbiddentiles": "dn ʞɔᴉd ʇouuɐɔ ɹǝʎɐꞁԀ ǝɥʇ ʇɐɥʇ sʞɔoꞁᗺ",
- "carryon.category.custompickupconditions.custompickupconditionsblocks": "suoᴉʇᴉpuoƆ dnʞɔᴉԀ ʞɔoꞁᗺ ɯoʇsnƆ",
- "carryon.category.custompickupconditions.custompickupconditionsentities": "suoᴉʇᴉpuoƆ dnʞɔᴉԀ ʎʇᴉʇuƎ ɯoʇsnƆ",
-
- "key.carry.desc": "ʎɹɹɐƆ",
- "key.carry.category": "uO ʎɹɹɐƆ"
-}
\ No newline at end of file
diff --git a/old/src/main/resources/assets/carryon/lang/en_us.json b/old/src/main/resources/assets/carryon/lang/en_us.json
deleted file mode 100644
index 8cea73d..0000000
--- a/old/src/main/resources/assets/carryon/lang/en_us.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "carryon.category.settings": "Settings",
- "carryon.category.blacklist": "Blacklist",
- "carryon.category.modeloverrides": "Model Overrides (Advanced)",
- "carryon.category.custompickupconditions": "Custom Pickup Conditions (Advanced)",
- "carryon.category.whitelist": "Whitelist",
-
- "carryon.general.modeloverrides.modeloverrides": "Model Overrides",
- "carryon.general.blacklist.forbiddenentities": "Entities that the Player cannot pick up",
- "carryon.general.blacklist.forbiddentiles": "Blocks that the Player cannot pick up",
- "carryon.category.custompickupconditions.custompickupconditionsblocks": "Custom Block Pickup Conditions",
- "carryon.category.custompickupconditions.custompickupconditionsentities": "Custom Entity Pickup Conditions",
-
- "key.carry.desc": "Carry",
- "key.carry.category": "Carry On"
-}
\ No newline at end of file
diff --git a/old/src/main/resources/assets/carryon/lang/es_es.json b/old/src/main/resources/assets/carryon/lang/es_es.json
deleted file mode 100644
index b652a9f..0000000
--- a/old/src/main/resources/assets/carryon/lang/es_es.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "carryon.category.settings": "Configuración",
- "carryon.category.blacklist": "Lista negra",
- "carryon.category.modeloverrides": "Reescribir modelo (Avanzado)",
- "carryon.category.custompickupconditions": "Customizar condiciones de recoger (Avanzado)",
- "carryon.category.whitelist": "Lista blanca",
-
- "carryon.general.modeloverrides.modeloverrides": "Reescribir modelo",
- "carryon.general.blacklist.forbiddenentities": "Entidades que el jugador no puede recoger",
- "carryon.general.blacklist.forbiddentiles": "Bloques que el jugador no puede recoger",
- "carryon.category.custompickupconditions.custompickupconditionsblocks": "Customizar condiciones para recoger bloques",
- "carryon.category.custompickupconditions.custompickupconditionsentities": "Customizar condiciones para recoger entidades",
-
- "key.carry.desc": "Agarrar",
- "key.carry.category": "Carry On"
-}
\ No newline at end of file
diff --git a/old/src/main/resources/assets/carryon/lang/it_it.json b/old/src/main/resources/assets/carryon/lang/it_it.json
deleted file mode 100644
index 5402e38..0000000
--- a/old/src/main/resources/assets/carryon/lang/it_it.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "carryon.category.settings": "Inpostazioni",
- "carryon.category.blacklist": "Blacklist",
- "carryon.category.modeloverrides": "Sostituzioni modello (avanzate)",
- "carryon.category.custompickupconditions": "Condizioni di prelievo personalizzate (avanzate)",
- "carryon.category.whitelist": "Whitelist",
-
- "carryon.general.modeloverrides.modeloverrides": "Sostituzioni modello",
- "carryon.general.blacklist.forbiddenentities": "Entità che il giocatore non può raccogliere",
- "carryon.general.blacklist.forbiddentiles": "Blocchi che il giocatore non può raccogliere",
- "carryon.category.custompickupconditions.custompickupconditionsblocks": "Condizioni di prelievo blocco personalizzate",
- "carryon.category.custompickupconditions.custompickupconditionsentities": "Condizioni di prelievo entità personalizzate",
-
- "key.carry.desc": "Afferra",
- "key.carry.category": "Carry On Mod"
-}
\ No newline at end of file
diff --git a/old/src/main/resources/assets/carryon/lang/ko_kr.json b/old/src/main/resources/assets/carryon/lang/ko_kr.json
deleted file mode 100644
index 90f8d90..0000000
--- a/old/src/main/resources/assets/carryon/lang/ko_kr.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "carryon.category.settings": "설정",
- "carryon.category.blacklist": "블랙리스트",
- "carryon.category.modeloverrides": "모델 오버라이딩 (고급)",
- "carryon.category.custompickupconditions": "커스텀 들기 컨디션 (고급)",
- "carryon.category.whitelist": "화이트리스트",
-
- "carryon.general.modeloverrides.modeloverrides": "모델 오버라이딩",
- "carryon.general.blacklist.forbiddenentities": "플레이어가 들 수 없는 엔티티",
- "carryon.general.blacklist.forbiddentiles": "플레이어가 들 수 없는 블록",
- "carryon.category.custompickupconditions.custompickupconditionsblocks": "커스텀 블록 들기 컨디션",
- "carryon.category.custompickupconditions.custompickupconditionsentities": "커스텀 엔티티 들기 컨디션",
-
- "key.carry.desc": "들고 나르기",
- "key.carry.category": "Carry On"
-}
\ No newline at end of file
diff --git a/old/src/main/resources/assets/carryon/lang/ru_ru.json b/old/src/main/resources/assets/carryon/lang/ru_ru.json
deleted file mode 100644
index 36257f0..0000000
--- a/old/src/main/resources/assets/carryon/lang/ru_ru.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "carryon.category.settings": "Настройки",
- "carryon.category.blacklist": "Чёрный список",
- "carryon.category.modeloverrides": "Переопределения модели (Улучшенное)",
- "carryon.category.custompickupconditions": "Индивидуальные условия поднятия (Улучшенное)",
- "carryon.category.whitelist": "Белый список",
-
- "carryon.general.modeloverrides.modeloverrides": "Переопределения модели",
- "carryon.general.blacklist.forbiddenentities": "Сущности, которых игрок не может поднять",
- "carryon.general.blacklist.forbiddentiles": "Блоки, которые игрок не может поднять",
- "carryon.category.custompickupconditions.custompickupconditionsblocks": "Пользовательские условия поднятия блока",
- "carryon.category.custompickupconditions.custompickupconditionsentities": "Пользовательские условия поднятия сущности",
-
- "key.carry.desc": "Поднять",
- "key.carry.category": "Carry On"
-}
\ No newline at end of file
diff --git a/old/src/main/resources/assets/carryon/models/item/entity_item.json b/old/src/main/resources/assets/carryon/models/item/entity_item.json
deleted file mode 100644
index 3480261..0000000
--- a/old/src/main/resources/assets/carryon/models/item/entity_item.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "parent": "item/generated",
- "textures": {
- "layer0": "carryon:item/tile"
- }
-}
diff --git a/old/src/main/resources/assets/carryon/models/item/tile_item.json b/old/src/main/resources/assets/carryon/models/item/tile_item.json
deleted file mode 100644
index 3480261..0000000
--- a/old/src/main/resources/assets/carryon/models/item/tile_item.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "parent": "item/generated",
- "textures": {
- "layer0": "carryon:item/tile"
- }
-}
diff --git a/old/src/main/resources/assets/carryon/textures/item/tile.png b/old/src/main/resources/assets/carryon/textures/item/tile.png
deleted file mode 100644
index 8241ee753f473bfcf609b90f253a94d177b53454..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 198
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85l(WfH0%H`Q}!jpk#?_L`iUdT1k0gQ7S`0VrE{6US4X6f{C7i
zo}rmb=K8NdMP{BZjv*HQOHXVRWKdvWR{S1srRVT)J}YnfZSk~&Ix|=|Cy1SCiZtLx
eaDL`JXF9s}ul$R?)9-*LFnGH9xvX}@M
diff --git a/old/src/main/resources/data/carryon/tags/blocks/block_blacklist.json b/old/src/main/resources/data/carryon/tags/blocks/block_blacklist.json
deleted file mode 100644
index a22514f..0000000
--- a/old/src/main/resources/data/carryon/tags/blocks/block_blacklist.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "replace": false,
- "values": [
- ]
-}
\ No newline at end of file
diff --git a/old/src/main/resources/data/carryon/tags/blocks/block_whitelist.json b/old/src/main/resources/data/carryon/tags/blocks/block_whitelist.json
deleted file mode 100644
index a22514f..0000000
--- a/old/src/main/resources/data/carryon/tags/blocks/block_whitelist.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "replace": false,
- "values": [
- ]
-}
\ No newline at end of file
diff --git a/old/src/main/resources/data/carryon/tags/entity_types/entity_blacklist.json b/old/src/main/resources/data/carryon/tags/entity_types/entity_blacklist.json
deleted file mode 100644
index a22514f..0000000
--- a/old/src/main/resources/data/carryon/tags/entity_types/entity_blacklist.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "replace": false,
- "values": [
- ]
-}
\ No newline at end of file
diff --git a/old/src/main/resources/data/carryon/tags/entity_types/entity_whitelist.json b/old/src/main/resources/data/carryon/tags/entity_types/entity_whitelist.json
deleted file mode 100644
index a22514f..0000000
--- a/old/src/main/resources/data/carryon/tags/entity_types/entity_whitelist.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "replace": false,
- "values": [
- ]
-}
\ No newline at end of file
diff --git a/old/src/main/resources/data/carryon/tags/entity_types/stacking_blacklist.json b/old/src/main/resources/data/carryon/tags/entity_types/stacking_blacklist.json
deleted file mode 100644
index a22514f..0000000
--- a/old/src/main/resources/data/carryon/tags/entity_types/stacking_blacklist.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "replace": false,
- "values": [
- ]
-}
\ No newline at end of file
diff --git a/old/src/main/resources/data/carryon/tags/entity_types/stacking_whitelist.json b/old/src/main/resources/data/carryon/tags/entity_types/stacking_whitelist.json
deleted file mode 100644
index a22514f..0000000
--- a/old/src/main/resources/data/carryon/tags/entity_types/stacking_whitelist.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "replace": false,
- "values": [
- ]
-}
\ No newline at end of file
diff --git a/old/src/main/resources/logo.png b/old/src/main/resources/logo.png
deleted file mode 100644
index 1b9a97859cd4353dd102e0580fbbf74e7773c4e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 173666
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