Skip to content

Commit

Permalink
Update to latest Json Things (#5078)
Browse files Browse the repository at this point in the history
Simplifies a lot of the logic, but unfortunately a breaking change so we now require a newer Json Things
  • Loading branch information
KnightMiner committed Feb 5, 2023
1 parent 08ac5ac commit 8da65fd
Show file tree
Hide file tree
Showing 12 changed files with 80 additions and 388 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,8 @@ def modsTomlSpec = copySpec{
'forge_range': forge_range,
'mantle_range': mantle_range,
'jei_range': jei_range,
'crt_range': crt_range
'crt_range': crt_range,
'json_things_range': json_things_range
}
}
// need to copy into each build directory, unfortunately does not seem easy to do this automatically
Expand Down
3 changes: 2 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ probe_version=5.1.0
crt_version=7.1.0.307
crt_range=[7.1.0.245,)
ie_version=8.0.0-146
json_things_version=0.4.2
json_things_version=0.4.6
json_things_range=[0.4.6,)
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package slimeknights.tconstruct.plugin.jsonthings;

import dev.gigaherz.jsonthings.things.IFlexItem;
import dev.gigaherz.jsonthings.things.serializers.FlexItemType;
import dev.gigaherz.jsonthings.things.serializers.IItemSerializer;
import dev.gigaherz.jsonthings.things.serializers.ItemType;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.util.GsonHelper;
Expand Down Expand Up @@ -46,81 +46,81 @@ private static <T> T add(List<? super T> list, T item) {
return item;
}

/** Register a tool part to create new tools */
public static final ItemType<FlexToolPartItem> TOOL_PART = register("tool_part", data -> {
MaterialStatsId statType = new MaterialStatsId(JsonHelper.getResourceLocation(data, "stat_type"));
return (props, builder) -> new FlexToolPartItem(props, statType);
});

/** Register an item that can be used to repair tools */
public static final ItemType<FlexRepairKitItem> REPAIR_KIT = register("repair_kit", data -> {
float repairAmount = GsonHelper.getAsFloat(data, "repair_amount");
return (props, builder) -> new FlexRepairKitItem(props, repairAmount);
});
/** Initializes the item types */
public static void init() {
/* Register a tool part to create new tools */
register("tool_part", data -> {
MaterialStatsId statType = new MaterialStatsId(JsonHelper.getResourceLocation(data, "stat_type"));
return (props, builder) -> new FlexToolPartItem(props, statType);
});

/** Register a modifiable tool instance for melee/harvest tools */
public static final ItemType<FlexModifiableItem> MODIFIABLE_TOOL = register("tool", data -> {
IToolStatProvider statProvider = ToolStatProviders.REGISTRY.deserialize(data, "stat_provider");
boolean breakBlocksInCreative = GsonHelper.getAsBoolean(data, "break_blocks_in_creative", true);
return (props, builder) -> add(TOOL_ITEMS, new FlexModifiableItem(props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), breakBlocksInCreative));
});
/* Register an item that can be used to repair tools */
register("repair_kit", data -> {
float repairAmount = GsonHelper.getAsFloat(data, "repair_amount");
return (props, builder) -> new FlexRepairKitItem(props, repairAmount);
});

/** Register a modifiable tool instance for melee/harvest tools */
public static final ItemType<FlexModifiableStaffItem> MODIFIABLE_STAFF = register("staff", data -> {
IToolStatProvider statProvider = ToolStatProviders.REGISTRY.deserialize(data, "stat_provider");
boolean breakBlocksInCreative = GsonHelper.getAsBoolean(data, "break_blocks_in_creative", true);
return (props, builder) -> add(TOOL_ITEMS, new FlexModifiableStaffItem(props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), breakBlocksInCreative));
});
/* Register a modifiable tool instance for melee/harvest tools */
register("tool", data -> {
IToolStatProvider statProvider = ToolStatProviders.REGISTRY.deserialize(data, "stat_provider");
boolean breakBlocksInCreative = GsonHelper.getAsBoolean(data, "break_blocks_in_creative", true);
return (props, builder) -> add(TOOL_ITEMS, new FlexModifiableItem(props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), breakBlocksInCreative));
});

/** Register a modifiable tool instance for bow like items (release on finish) */
public static final ItemType<FlexModifiableBowItem> BOW = register("bow", data -> {
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.RANGED;
return (props, builder) -> add(BOW_ITEMS, new FlexModifiableBowItem(props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build()));
});
/* Register a modifiable tool instance for melee/harvest tools */
register("staff", data -> {
IToolStatProvider statProvider = ToolStatProviders.REGISTRY.deserialize(data, "stat_provider");
boolean breakBlocksInCreative = GsonHelper.getAsBoolean(data, "break_blocks_in_creative", true);
return (props, builder) -> add(TOOL_ITEMS, new FlexModifiableStaffItem(props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), breakBlocksInCreative));
});

/** Register a modifiable tool instance for crossbow like items (load on finish) */
public static final ItemType<FlexModifiableCrossbowItem> CROSSBOW = register("crossbow", data -> {
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.RANGED;
boolean allowFireworks = GsonHelper.getAsBoolean(data, "allow_fireworks");
return (props, builder) -> add(CROSSBOW_ITEMS, new FlexModifiableCrossbowItem(props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), allowFireworks));
});
/* Register a modifiable tool instance for bow like items (release on finish) */
register("bow", data -> {
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.RANGED;
return (props, builder) -> add(BOW_ITEMS, new FlexModifiableBowItem(props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build()));
});

/** Register a modifiable tool instance for crossbow like items (load on finish) */
public static final ItemType<FlexBasicArmorItem> BASIC_ARMOR = register("basic_armor", data -> {
ResourceLocation name = JsonHelper.getResourceLocation(data, "texture_name");
boolean dyeable = GsonHelper.getAsBoolean(data, "dyeable", false);
boolean hasGolden = GsonHelper.getAsBoolean(data, "has_golden", true);
ArmorSlotType slot = JsonHelper.getAsEnum(data, "slot", ArmorSlotType.class);
SoundEvent equipSound = JsonHelper.getAsEntry(ForgeRegistries.SOUND_EVENTS, data, "equip_sound");
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.NO_PARTS;
return (props, builder) -> new FlexBasicArmorItem(new DummyArmorMaterial(name, equipSound), slot.getEquipmentSlot(), props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), name, dyeable, hasGolden);
});
/* Register a modifiable tool instance for crossbow like items (load on finish) */
register("crossbow", data -> {
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.RANGED;
boolean allowFireworks = GsonHelper.getAsBoolean(data, "allow_fireworks");
return (props, builder) -> add(CROSSBOW_ITEMS, new FlexModifiableCrossbowItem(props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), allowFireworks));
});

/** Register a modifiable armor part that supports embellishments */
public static final ItemType<FlexLayeredEmbellishedArmor> LAYERED_EMBELLISHED_ARMOR = register("layered_embellished_armor", data -> {
ResourceLocation name = JsonHelper.getResourceLocation(data, "texture_name");
ArmorSlotType slot = JsonHelper.getAsEnum(data, "slot", ArmorSlotType.class);
SoundEvent equipSound = JsonHelper.getAsEntry(ForgeRegistries.SOUND_EVENTS, data, "equip_sound");
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.NO_PARTS;
return (props, builder) -> new FlexLayeredEmbellishedArmor(new DummyArmorMaterial(name, equipSound), slot.getEquipmentSlot(), props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), name);
});
/* Register a modifiable tool instance for crossbow like items (load on finish) */
register("basic_armor", data -> {
ResourceLocation name = JsonHelper.getResourceLocation(data, "texture_name");
boolean dyeable = GsonHelper.getAsBoolean(data, "dyeable", false);
boolean hasGolden = GsonHelper.getAsBoolean(data, "has_golden", true);
ArmorSlotType slot = JsonHelper.getAsEnum(data, "slot", ArmorSlotType.class);
SoundEvent equipSound = JsonHelper.getAsEntry(ForgeRegistries.SOUND_EVENTS, data, "equip_sound");
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.NO_PARTS;
return (props, builder) -> new FlexBasicArmorItem(new DummyArmorMaterial(name, equipSound), slot.getEquipmentSlot(), props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), name, dyeable, hasGolden);
});

/** Register a modifiable tool instance for crossbow like items (load on finish) */
public static final ItemType<FlexFlatEmbellishedArmor> FLAT_EMBELLISHED_ARMOR = register("flat_embellished_armor", data -> {
ResourceLocation name = JsonHelper.getResourceLocation(data, "texture_name");
MaterialId defaultMaterial = new MaterialId(JsonHelper.getResourceLocation(data, "default_material"));
boolean dyeable = GsonHelper.getAsBoolean(data, "dyeable", false);
ArmorSlotType slot = JsonHelper.getAsEnum(data, "slot", ArmorSlotType.class);
SoundEvent equipSound = JsonHelper.getAsEntry(ForgeRegistries.SOUND_EVENTS, data, "equip_sound");
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.NO_PARTS;
return (props, builder) -> new FlexFlatEmbellishedArmor(new DummyArmorMaterial(name, equipSound), slot.getEquipmentSlot(), props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), name, defaultMaterial, dyeable);
});
/* Register a modifiable armor part that supports embellishments */
register("layered_embellished_armor", data -> {
ResourceLocation name = JsonHelper.getResourceLocation(data, "texture_name");
ArmorSlotType slot = JsonHelper.getAsEnum(data, "slot", ArmorSlotType.class);
SoundEvent equipSound = JsonHelper.getAsEntry(ForgeRegistries.SOUND_EVENTS, data, "equip_sound");
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.NO_PARTS;
return (props, builder) -> new FlexLayeredEmbellishedArmor(new DummyArmorMaterial(name, equipSound), slot.getEquipmentSlot(), props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), name);
});

/** Initializes the item types */
public static void init() {}
/* Register a modifiable tool instance for crossbow like items (load on finish) */
register("flat_embellished_armor", data -> {
ResourceLocation name = JsonHelper.getResourceLocation(data, "texture_name");
MaterialId defaultMaterial = new MaterialId(JsonHelper.getResourceLocation(data, "default_material"));
boolean dyeable = GsonHelper.getAsBoolean(data, "dyeable", false);
ArmorSlotType slot = JsonHelper.getAsEnum(data, "slot", ArmorSlotType.class);
SoundEvent equipSound = JsonHelper.getAsEntry(ForgeRegistries.SOUND_EVENTS, data, "equip_sound");
IToolStatProvider statProvider = data.has("stat_provider") ? ToolStatProviders.REGISTRY.deserialize(data, "stat_provider") : ToolStatProviders.NO_PARTS;
return (props, builder) -> new FlexFlatEmbellishedArmor(new DummyArmorMaterial(name, equipSound), slot.getEquipmentSlot(), props, ToolDefinition.builder(builder.getRegistryName()).setStatsProvider(statProvider).build(), name, defaultMaterial, dyeable);
});
}

/** Local helper to register our stuff */
private static <T extends Item & IFlexItem> ItemType<T> register(String name, IItemSerializer<T> factory) {
return ItemType.register(TConstruct.resourceString(name), factory);
private static <T extends Item & IFlexItem> void register(String name, IItemSerializer<T> factory) {
FlexItemType.register(TConstruct.resourceString(name), factory);
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
package slimeknights.tconstruct.plugin.jsonthings.item;

import dev.gigaherz.jsonthings.things.CompletionMode;
import dev.gigaherz.jsonthings.things.IFlexItem;
import dev.gigaherz.jsonthings.things.StackContext;
import dev.gigaherz.jsonthings.things.events.FlexEventHandler;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.Model;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.UseAnim;
import net.minecraftforge.client.IItemRenderProperties;
import slimeknights.tconstruct.library.tools.definition.ToolDefinition;
import slimeknights.tconstruct.library.tools.helper.ModifierUtil;
Expand All @@ -28,7 +23,6 @@
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
Expand Down Expand Up @@ -103,37 +97,4 @@ public void addEventHandler(String name, FlexEventHandler flexEventHandler) {
public FlexEventHandler getEventHandler(String name) {
return this.eventHandlers.get(name);
}


/* All of these things are handled via modifiers/JSON already, so no-op them */

@Override
public void setUseAction(UseAnim useAnim) {}

@Override
public UseAnim getUseAction() {
return UseAnim.NONE;
}

@Override
public void setUseTime(int i) {}

@Override
public int getUseTime() {
return 0;
}

@Override
public void setUseFinishMode(CompletionMode completionMode) {}

@Override
public CompletionMode getUseFinishMode() {
return CompletionMode.USE_ITEM;
}

@Override
public void addAttributeModifier(@Nullable EquipmentSlot equipmentSlot, Attribute attribute, AttributeModifier attributeModifier) {}

@Override
public void setLore(List<MutableComponent> list) {}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
package slimeknights.tconstruct.plugin.jsonthings.item;

import dev.gigaherz.jsonthings.things.CompletionMode;
import dev.gigaherz.jsonthings.things.IFlexItem;
import dev.gigaherz.jsonthings.things.StackContext;
import dev.gigaherz.jsonthings.things.events.FlexEventHandler;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.Model;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.UseAnim;
import net.minecraftforge.client.IItemRenderProperties;
import slimeknights.tconstruct.library.materials.definition.MaterialId;
import slimeknights.tconstruct.library.tools.definition.ToolDefinition;
Expand All @@ -30,7 +25,6 @@
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
Expand Down Expand Up @@ -132,37 +126,4 @@ public void addEventHandler(String name, FlexEventHandler flexEventHandler) {
public FlexEventHandler getEventHandler(String name) {
return this.eventHandlers.get(name);
}


/* All of these things are handled via modifiers/JSON already, so no-op them */

@Override
public void setUseAction(UseAnim useAnim) {}

@Override
public UseAnim getUseAction() {
return UseAnim.NONE;
}

@Override
public void setUseTime(int i) {}

@Override
public int getUseTime() {
return 0;
}

@Override
public void setUseFinishMode(CompletionMode completionMode) {}

@Override
public CompletionMode getUseFinishMode() {
return CompletionMode.USE_ITEM;
}

@Override
public void addAttributeModifier(@Nullable EquipmentSlot equipmentSlot, Attribute attribute, AttributeModifier attributeModifier) {}

@Override
public void setLore(List<MutableComponent> list) {}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
package slimeknights.tconstruct.plugin.jsonthings.item;

import dev.gigaherz.jsonthings.things.CompletionMode;
import dev.gigaherz.jsonthings.things.IFlexItem;
import dev.gigaherz.jsonthings.things.StackContext;
import dev.gigaherz.jsonthings.things.events.FlexEventHandler;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.Model;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.UseAnim;
import net.minecraftforge.client.IItemRenderProperties;
import slimeknights.tconstruct.library.tools.definition.ToolDefinition;
import slimeknights.tconstruct.library.tools.item.ModifiableArmorItem;
Expand All @@ -25,7 +20,6 @@
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
Expand Down Expand Up @@ -79,37 +73,4 @@ public void addEventHandler(String name, FlexEventHandler flexEventHandler) {
public FlexEventHandler getEventHandler(String name) {
return this.eventHandlers.get(name);
}


/* All of these things are handled via modifiers/JSON already, so no-op them */

@Override
public void setUseAction(UseAnim useAnim) {}

@Override
public UseAnim getUseAction() {
return UseAnim.NONE;
}

@Override
public void setUseTime(int i) {}

@Override
public int getUseTime() {
return 0;
}

@Override
public void setUseFinishMode(CompletionMode completionMode) {}

@Override
public CompletionMode getUseFinishMode() {
return CompletionMode.USE_ITEM;
}

@Override
public void addAttributeModifier(@Nullable EquipmentSlot equipmentSlot, Attribute attribute, AttributeModifier attributeModifier) {}

@Override
public void setLore(List<MutableComponent> list) {}
}

0 comments on commit 8da65fd

Please sign in to comment.