diff --git a/endercore/src/main/java/com/enderio/core/client/item/EnergyBarDecorator.java b/endercore/src/main/java/com/enderio/core/client/item/EnergyBarDecorator.java index 4f1da7af05..e728b61f56 100644 --- a/endercore/src/main/java/com/enderio/core/client/item/EnergyBarDecorator.java +++ b/endercore/src/main/java/com/enderio/core/client/item/EnergyBarDecorator.java @@ -10,7 +10,8 @@ public class EnergyBarDecorator implements IItemDecorator { public static final EnergyBarDecorator INSTANCE = new EnergyBarDecorator(); // TODO: This color is difficult to see - public static final int BAR_COLOR = 0x00B168E4; + public static final int BAR_COLOR = 0xB168E4; + public static final int BAR_COLOR_ARGB = 0xFFB168E4; @Override public boolean render(GuiGraphics guiGraphics, Font font, ItemStack stack, int xOffset, int yOffset) { diff --git a/enderio-armory/src/generated/resources/assets/enderio/lang/en_us.json b/enderio-armory/src/generated/resources/assets/enderio/lang/en_us.json index 5249ba2b2a..dc814a9704 100644 --- a/enderio-armory/src/generated/resources/assets/enderio/lang/en_us.json +++ b/enderio-armory/src/generated/resources/assets/enderio/lang/en_us.json @@ -1,9 +1,14 @@ { + "darksteel.keybind.category": "Ender IO Dark Steel", + "darksteel.upgrade.flight.keybind": "Toggles Glider/Elytra Upgrade", "info.enderio.darksteel.upgrade.activate": "Right Click to Activate", "info.enderio.darksteel.upgrade.available": "Available Upgrades", + "info.enderio.darksteel.upgrade.boots_snow": "Can walk on powdered snow", "info.enderio.darksteel.upgrade.cost": "Costs %s Levels", "info.enderio.darksteel.upgrade.direct": "Direct", "info.enderio.darksteel.upgrade.direct.description": "Teleports harvested items directly into your inventory", + "info.enderio.darksteel.upgrade.elytra": "Elytra", + "info.enderio.darksteel.upgrade.elytra.description": "Wings anyone?", "info.enderio.darksteel.upgrade.empowered.absorption": "%s%% damage absorbed by µI", "info.enderio.darksteel.upgrade.empowered.description": "Infuse the steel with the power of Micro Infinity", "info.enderio.darksteel.upgrade.empowered.efficiency": "Efficiency +%s when powered", @@ -19,12 +24,59 @@ "info.enderio.darksteel.upgrade.explosive_penetration.description": "Makes dirt and rock behind the mined block go splodey", "info.enderio.darksteel.upgrade.explosive_penetration_l1": "Explosive Penetration I", "info.enderio.darksteel.upgrade.explosive_penetration_l2": "Explosive Penetration II", + "info.enderio.darksteel.upgrade.flight.disabled": "Flight Disabled", + "info.enderio.darksteel.upgrade.flight.enabled": "Flight Enabled", "info.enderio.darksteel.upgrade.fork": "Fork", "info.enderio.darksteel.upgrade.fork.description": "Who needs a hoe when you have a fork?", + "info.enderio.darksteel.upgrade.glider": "Glider", + "info.enderio.darksteel.upgrade.glider.description": "Wings anyone?", + "info.enderio.darksteel.upgrade.invalid_upgrade": "Invalid upgrade for equipped item", + "info.enderio.darksteel.upgrade.jump.description_l1": "Enables double jump", + "info.enderio.darksteel.upgrade.jump.description_l2": "Enables triple jump", + "info.enderio.darksteel.upgrade.jump_l1": "Jump I", + "info.enderio.darksteel.upgrade.jump_l2": "Jump II", + "info.enderio.darksteel.upgrade.no_target": "No Dark Steel Item in Off-Hand", "info.enderio.darksteel.upgrade.no_xp": "Not enough XP", + "info.enderio.darksteel.upgrade.speed.description": "Increases movement speed", + "info.enderio.darksteel.upgrade.speed_l1": "Speed I", + "info.enderio.darksteel.upgrade.speed_l2": "Speed II", + "info.enderio.darksteel.upgrade.speed_l3": "Speed III", "info.enderio.darksteel.upgrade.spoon": "Spoon", "info.enderio.darksteel.upgrade.spoon.description": "Who needs a shovel when you have a spoon?", + "info.enderio.darksteel.upgrade.step_assist": "Step Assist", + "info.enderio.darksteel.upgrade.step_assist.description": "Step just a little higher", + "info.enderio.darksteel.upgrade.travel": "Travel", + "info.enderio.darksteel.upgrade.travel.description": "Integrated Travel Staff", "info.enderio.durability.amount": "Durability %s", - "info.enderio.headchance": "%s%% chance to drop a mob head", - "item.enderio.dark_steel_sword": "The Ender" + "info.enderio.ender.blockteleport": "Stops Enderman teleporting", + "info.enderio.ender.headchance": "%s%% chance to drop a mob head", + "info.enderio.ender.headinfo": "Cuts off mob heads once Empowered", + "item.enderio.dark_steel_axe": "Dark Axe", + "item.enderio.dark_steel_boots": "Dark Boots", + "item.enderio.dark_steel_chestplate": "Dark Chestplate", + "item.enderio.dark_steel_helmet": "Dark Helmet", + "item.enderio.dark_steel_leggings": "Dark Leggings", + "item.enderio.dark_steel_pickaxe": "Dark Pickaxe", + "item.enderio.dark_steel_sword": "The Ender", + "item.enderio.dark_steel_upgrade_blank": "Blank Upgrade", + "item.enderio.dark_steel_upgrade_direct": "Direct Upgrade", + "item.enderio.dark_steel_upgrade_elytra": "Elytra Upgrade", + "item.enderio.dark_steel_upgrade_empowered_1": "Empowered Upgrade", + "item.enderio.dark_steel_upgrade_empowered_2": "Empowered II Upgrade", + "item.enderio.dark_steel_upgrade_empowered_3": "Empowered III Upgrade", + "item.enderio.dark_steel_upgrade_empowered_4": "Empowered IV Upgrade", + "item.enderio.dark_steel_upgrade_fork": "Fork Upgrade", + "item.enderio.dark_steel_upgrade_glider": "Glider Upgrade", + "item.enderio.dark_steel_upgrade_jump_1": "Jump Upgrade", + "item.enderio.dark_steel_upgrade_jump_2": "Jump II Upgrade", + "item.enderio.dark_steel_upgrade_penetration_1": "EExplosive Penetration I Upgrade", + "item.enderio.dark_steel_upgrade_penetration_2": "EExplosive Penetration II Upgrade", + "item.enderio.dark_steel_upgrade_speedboost1": "Speed Upgrade", + "item.enderio.dark_steel_upgrade_speedboost2": "Speed II Upgrade", + "item.enderio.dark_steel_upgrade_speedboost3": "Speed III Upgrade", + "item.enderio.dark_steel_upgrade_spoon": "Spoon Upgrade", + "item.enderio.dark_steel_upgrade_step_assist": "Step Assist Upgrade", + "item.enderio.dark_steel_upgrade_tnt": "Explosive I Upgrade", + "item.enderio.dark_steel_upgrade_tnt2": "Explosive II Upgrade", + "item.enderio.dark_steel_upgrade_travel": "Travel Upgrade" } \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_axe.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_axe.json new file mode 100644 index 0000000000..e794cc0003 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_axe" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_boots.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_boots.json new file mode 100644 index 0000000000..a3437f18b5 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_boots" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_chestplate.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_chestplate.json new file mode 100644 index 0000000000..34ec51e3a0 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_chestplate" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_helmet.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_helmet.json new file mode 100644 index 0000000000..cce3167323 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_helmet" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_leggings.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_leggings.json new file mode 100644 index 0000000000..2fccec92a4 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_leggings" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_pickaxe.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_pickaxe.json new file mode 100644 index 0000000000..8ea1d9d343 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_pickaxe" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_blank.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_blank.json new file mode 100644 index 0000000000..7077fb4e4c --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_blank.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_blank" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_direct.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_direct.json new file mode 100644 index 0000000000..1053b82210 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_direct.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_direct" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_elytra.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_elytra.json new file mode 100644 index 0000000000..cea440b9c3 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_elytra.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_elytra" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_1.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_1.json new file mode 100644 index 0000000000..dc8db37d23 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_empowered_1" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_2.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_2.json new file mode 100644 index 0000000000..6f1d7dda20 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_empowered_2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_3.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_3.json new file mode 100644 index 0000000000..3ae14914f4 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_empowered_3" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_4.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_4.json new file mode 100644 index 0000000000..ef545c6100 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_empowered_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_empowered_4" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_fork.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_fork.json new file mode 100644 index 0000000000..1e501edce5 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_fork.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_fork" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_glider.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_glider.json new file mode 100644 index 0000000000..05c40a2a43 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_glider.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_glider" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_jump_1.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_jump_1.json new file mode 100644 index 0000000000..ff41f06501 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_jump_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_jump_1" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_jump_2.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_jump_2.json new file mode 100644 index 0000000000..3b3cd7958d --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_jump_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_jump_2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_penetration_1.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_penetration_1.json new file mode 100644 index 0000000000..7b4a339ba8 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_penetration_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_penetration_1" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_penetration_2.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_penetration_2.json new file mode 100644 index 0000000000..618fb11338 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_penetration_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_penetration_2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost1.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost1.json new file mode 100644 index 0000000000..3a74c42155 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_speedboost1" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost2.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost2.json new file mode 100644 index 0000000000..e515647586 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_speedboost2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost3.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost3.json new file mode 100644 index 0000000000..6e9bd2ca78 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_speedboost3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_speedboost3" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_spoon.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_spoon.json new file mode 100644 index 0000000000..c055c61e73 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_spoon.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_spoon" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_step_assist.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_step_assist.json new file mode 100644 index 0000000000..5d54911384 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_step_assist.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_step_assist" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_tnt.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_tnt.json new file mode 100644 index 0000000000..f0015b3cb1 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_tnt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_tnt" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_tnt2.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_tnt2.json new file mode 100644 index 0000000000..0bb275ac68 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_tnt2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_tnt2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_travel.json b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_travel.json new file mode 100644 index 0000000000..0eb63d7292 --- /dev/null +++ b/enderio-armory/src/generated/resources/assets/enderio/models/item/dark_steel_upgrade_travel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "enderio:item/dark_steel_upgrade_travel" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_boots.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_boots.json new file mode 100644 index 0000000000..0729576e39 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_boots.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_boots" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_chestplate.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_chestplate.json new file mode 100644 index 0000000000..45fdf87135 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_chestplate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_chestplate" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_helmet.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_helmet.json new file mode 100644 index 0000000000..b9e351d146 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_helmet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_helmet" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_leggings.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_leggings.json new file mode 100644 index 0000000000..f9e15181a9 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_leggings.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_leggings" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/tools/dark_steel_sword.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_sword.json similarity index 100% rename from enderio-armory/src/generated/resources/data/enderio/advancement/recipes/tools/dark_steel_sword.json rename to enderio-armory/src/generated/resources/data/enderio/advancement/recipes/combat/dark_steel_sword.json diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_direct.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_direct.json new file mode 100644 index 0000000000..1c4bab7f2d --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_direct.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_direct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_direct" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_elytra.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_elytra.json new file mode 100644 index 0000000000..83e7c3f6b0 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_elytra.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_elytra" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_elytra" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_1.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_1.json new file mode 100644 index 0000000000..6e6c914651 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_1.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_empowered_1" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_empowered_1" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_2.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_2.json new file mode 100644 index 0000000000..866371cd3a --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_2.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_empowered_2" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_empowered_2" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_3.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_3.json new file mode 100644 index 0000000000..a49b8827ad --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_3.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_empowered_3" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_empowered_3" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_4.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_4.json new file mode 100644 index 0000000000..837a02aa8f --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_empowered_4.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_empowered_4" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_empowered_4" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_fork.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_fork.json new file mode 100644 index 0000000000..b1187b595e --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_fork.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_fork" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_fork" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_glider.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_glider.json new file mode 100644 index 0000000000..6009f40254 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_glider.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_glider" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_glider" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_jump_1.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_jump_1.json new file mode 100644 index 0000000000..ba1c687b85 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_jump_1.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_jump_1" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_jump_1" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_jump_2.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_jump_2.json new file mode 100644 index 0000000000..99419ec9c3 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_jump_2.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_jump_2" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_jump_2" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_penetration_1.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_penetration_1.json new file mode 100644 index 0000000000..7b200805ba --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_penetration_1.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_penetration_1" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_penetration_1" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_penetration_2.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_penetration_2.json new file mode 100644 index 0000000000..0cb6ec7a3f --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_penetration_2.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_penetration_2" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_penetration_2" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost1.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost1.json new file mode 100644 index 0000000000..f8b39857e1 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost1.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_speedboost1" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_speedboost1" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost2.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost2.json new file mode 100644 index 0000000000..0669a3be0b --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost2.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_speedboost2" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_speedboost2" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost3.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost3.json new file mode 100644 index 0000000000..c0bbd0c08c --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_speedboost3.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_speedboost3" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_speedboost3" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_spoon.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_spoon.json new file mode 100644 index 0000000000..827434dbb4 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_spoon.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_spoon" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_spoon" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_step_assist.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_step_assist.json new file mode 100644 index 0000000000..e450cf42e7 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_step_assist.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_step_assist" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_step_assist" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_tnt.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_tnt.json new file mode 100644 index 0000000000..7209dbc53d --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_tnt.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_tnt" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_tnt" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_tnt2.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_tnt2.json new file mode 100644 index 0000000000..6292d35fc5 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_tnt2.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_tnt2" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_tnt2" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_travel.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_travel.json new file mode 100644 index 0000000000..e70f642ad2 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/misc/dark_steel_upgrade_travel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_upgrade_blank" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_upgrade_travel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_upgrade_travel" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/tools/dark_steel_axe.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/tools/dark_steel_axe.json new file mode 100644 index 0000000000..fafc451af9 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/tools/dark_steel_axe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_axe" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/tools/dark_steel_pickaxe.json b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/tools/dark_steel_pickaxe.json new file mode 100644 index 0000000000..3d93d61f7a --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/advancement/recipes/tools/dark_steel_pickaxe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": "enderio:dark_steel_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "enderio:dark_steel_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "enderio:dark_steel_pickaxe" + ] + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_axe.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_axe.json new file mode 100644 index 0000000000..bf8b2f545a --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_axe.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "I": { + "tag": "c:ingots/dark_steel" + }, + "S": { + "tag": "c:rods/wooden" + } + }, + "pattern": [ + "II", + "IS", + " S" + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_axe" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_boots.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_boots.json new file mode 100644 index 0000000000..f6e7a5dca3 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_boots.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "I": { + "tag": "c:ingots/dark_steel" + } + }, + "pattern": [ + "I I", + "I I" + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_boots" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_chestplate.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_chestplate.json new file mode 100644 index 0000000000..2643842cdc --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_chestplate.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "I": { + "tag": "c:ingots/dark_steel" + } + }, + "pattern": [ + "I I", + "III", + "III" + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_chestplate" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_helmet.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_helmet.json new file mode 100644 index 0000000000..cd0af3fa22 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "I": { + "tag": "c:ingots/dark_steel" + } + }, + "pattern": [ + "III", + "I I" + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_helmet" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_leggings.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_leggings.json new file mode 100644 index 0000000000..d265dd2e2c --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_leggings.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "I": { + "tag": "c:ingots/dark_steel" + } + }, + "pattern": [ + "III", + "I I", + "I I" + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_leggings" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_pickaxe.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_pickaxe.json new file mode 100644 index 0000000000..e1a672842d --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_pickaxe.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "I": { + "tag": "c:ingots/dark_steel" + }, + "S": { + "tag": "c:rods/wooden" + } + }, + "pattern": [ + "III", + " S ", + " S " + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_pickaxe" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_direct.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_direct.json new file mode 100644 index 0000000000..a9ee942538 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_direct.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "enderio:dark_steel_upgrade_blank" + }, + "E": { + "tag": "c:ender_pearls" + }, + "I": { + "item": "enderio:vibrant_alloy_ingot" + }, + "N": { + "item": "enderio:vibrant_alloy_nugget" + } + }, + "pattern": [ + "NIN", + "IEI", + "NBN" + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_direct" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_elytra.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_elytra.json new file mode 100644 index 0000000000..c94b636a85 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_elytra.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "minecraft:elytra" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_elytra" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_1.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_1.json new file mode 100644 index 0000000000..1a7b0e7d67 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_1.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:vibrant_crystal" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_empowered_1" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_2.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_2.json new file mode 100644 index 0000000000..78d005ffbe --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_2.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:basic_capacitor" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_empowered_2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_3.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_3.json new file mode 100644 index 0000000000..218dee4921 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_3.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:double_layer_capacitor" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_empowered_3" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_4.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_4.json new file mode 100644 index 0000000000..348ae10cb6 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_empowered_4.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:octadic_capacitor" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_empowered_4" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_fork.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_fork.json new file mode 100644 index 0000000000..622c84c496 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_fork.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "minecraft:diamond_hoe" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_fork" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_glider.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_glider.json new file mode 100644 index 0000000000..bbb16eeb3b --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_glider.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:glider" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_glider" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_jump_1.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_jump_1.json new file mode 100644 index 0000000000..2ce6fb3b9a --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_jump_1.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:iron_gear" + }, + { + "item": "minecraft:piston" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_jump_1" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_jump_2.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_jump_2.json new file mode 100644 index 0000000000..9d11997699 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_jump_2.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:energized_gear" + }, + { + "item": "minecraft:piston" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_jump_2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_penetration_1.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_penetration_1.json new file mode 100644 index 0000000000..bfd3d62512 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_penetration_1.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "minecraft:gunpowder" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_penetration_1" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_penetration_2.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_penetration_2.json new file mode 100644 index 0000000000..0038c4f878 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_penetration_2.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "minecraft:creeper_head" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_penetration_2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost1.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost1.json new file mode 100644 index 0000000000..4b38f64459 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost1.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:iron_gear" + }, + { + "item": "minecraft:sugar" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_speedboost1" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost2.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost2.json new file mode 100644 index 0000000000..384bffa35b --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost2.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:energized_gear" + }, + { + "item": "minecraft:sugar" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_speedboost2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost3.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost3.json new file mode 100644 index 0000000000..a3923bf337 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_speedboost3.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:vibrant_gear" + }, + { + "item": "minecraft:sugar" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_speedboost3" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_spoon.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_spoon.json new file mode 100644 index 0000000000..0e0b81e79a --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_spoon.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "minecraft:diamond_shovel" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_spoon" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_step_assist.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_step_assist.json new file mode 100644 index 0000000000..e727d7d47d --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_step_assist.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "enderio:dark_steel_upgrade_blank" + }, + "I": { + "item": "minecraft:brick" + } + }, + "pattern": [ + " I", + " II", + "IIB" + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_step_assist" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_tnt.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_tnt.json new file mode 100644 index 0000000000..c32f61cb24 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_tnt.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "minecraft:tnt" + }, + { + "tag": "c:gears/wood" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_tnt" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_tnt2.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_tnt2.json new file mode 100644 index 0000000000..e157699566 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_tnt2.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "minecraft:tnt" + }, + { + "tag": "c:gears/stone" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_tnt2" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_travel.json b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_travel.json new file mode 100644 index 0000000000..29fb1e1ef1 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/recipe/dark_steel_upgrade_travel.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "enderio:dark_steel_upgrade_blank" + }, + { + "item": "enderio:staff_of_travelling" + } + ], + "result": { + "count": 1, + "id": "enderio:dark_steel_upgrade_travel" + } +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_axe.json b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_axe.json new file mode 100644 index 0000000000..024fce0d1f --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_axe.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_axe" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_boots.json b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_boots.json new file mode 100644 index 0000000000..5e16778608 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_boots.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_boots" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_chestplate.json b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_chestplate.json new file mode 100644 index 0000000000..f25dc6704c --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_chestplate.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_chestplate" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_helmet.json b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_helmet.json new file mode 100644 index 0000000000..9cb71c6e86 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_helmet.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_helmet" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_leggings.json b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_leggings.json new file mode 100644 index 0000000000..a6a5b79899 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_leggings.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_leggings" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_pickaxe.json b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_pickaxe.json new file mode 100644 index 0000000000..f050039608 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_pickaxe.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_pickaxe" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_sword.json b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_sword.json new file mode 100644 index 0000000000..8d897dab8f --- /dev/null +++ b/enderio-armory/src/generated/resources/data/enderio/tags/item/dark_steel_upgradeable_sword.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_sword" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/minecraft/tags/item/axes.json b/enderio-armory/src/generated/resources/data/minecraft/tags/item/axes.json new file mode 100644 index 0000000000..024fce0d1f --- /dev/null +++ b/enderio-armory/src/generated/resources/data/minecraft/tags/item/axes.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_axe" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/chest_armor.json b/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/chest_armor.json new file mode 100644 index 0000000000..f25dc6704c --- /dev/null +++ b/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/chest_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_chestplate" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/foot_armor.json b/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/foot_armor.json new file mode 100644 index 0000000000..5e16778608 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/foot_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_boots" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/head_armor.json b/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/head_armor.json new file mode 100644 index 0000000000..9cb71c6e86 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/head_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_helmet" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/leg_armor.json b/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/leg_armor.json new file mode 100644 index 0000000000..a6a5b79899 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/minecraft/tags/item/enchantable/leg_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_leggings" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/minecraft/tags/item/pickaxes.json b/enderio-armory/src/generated/resources/data/minecraft/tags/item/pickaxes.json new file mode 100644 index 0000000000..f050039608 --- /dev/null +++ b/enderio-armory/src/generated/resources/data/minecraft/tags/item/pickaxes.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_pickaxe" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/generated/resources/data/minecraft/tags/item/swords.json b/enderio-armory/src/generated/resources/data/minecraft/tags/item/swords.json new file mode 100644 index 0000000000..8d897dab8f --- /dev/null +++ b/enderio-armory/src/generated/resources/data/minecraft/tags/item/swords.json @@ -0,0 +1,5 @@ +{ + "values": [ + "enderio:dark_steel_sword" + ] +} \ No newline at end of file diff --git a/enderio-armory/src/main/java/com/enderio/armory/EnderIOArmory.java b/enderio-armory/src/main/java/com/enderio/armory/EnderIOArmory.java index a89cc7dbd8..27af6d9eaf 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/EnderIOArmory.java +++ b/enderio-armory/src/main/java/com/enderio/armory/EnderIOArmory.java @@ -1,20 +1,28 @@ package com.enderio.armory; import com.enderio.armory.common.config.ArmoryConfig; +import com.enderio.armory.common.init.ArmoryDataComponents; import com.enderio.armory.common.init.ArmoryItems; import com.enderio.armory.common.init.ArmoryLootModifiers; import com.enderio.armory.common.init.ArmoryRecipes; +import com.enderio.armory.common.item.darksteel.AnvilRecipeHandler; +import com.enderio.armory.common.item.darksteel.DarkSteelSwordItem; +import com.enderio.armory.common.item.darksteel.upgrades.JumpUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.StepAssistUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.flight.GliderIntegration; +import com.enderio.armory.common.item.darksteel.upgrades.speed.SpeedUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.travel.TravelUpgrade; import com.enderio.armory.common.lang.ArmoryLang; import com.enderio.armory.common.tag.ArmoryTags; import com.enderio.armory.data.loot.ArmoryLootModifiersProvider; import com.enderio.armory.data.recipe.ItemRecipeProvider; import com.enderio.armory.data.tags.ArmoryBlockTagsProvider; import com.enderio.base.api.EnderIO; +import com.enderio.base.api.integration.IntegrationManager; import com.enderio.base.data.EIODataProvider; import com.enderio.regilite.Regilite; import java.util.concurrent.CompletableFuture; import net.minecraft.core.HolderLookup; -import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.SubscribeEvent; @@ -22,6 +30,7 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; +import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.data.event.GatherDataEvent; @@ -43,15 +52,27 @@ public EnderIOArmory(IEventBus modEventBus, ModContainer modContainer) { ArmoryItems.register(modEventBus); ArmoryRecipes.register(modEventBus); ArmoryLootModifiers.register(modEventBus); + ArmoryDataComponents.register(modEventBus); ArmoryTags.register(); ArmoryLang.register(); REGILITE.register(modEventBus); + + // Specific event listeners + NeoForge.EVENT_BUS.addListener(DarkSteelSwordItem::onEntityTeleport); + NeoForge.EVENT_BUS.addListener(TravelUpgrade::checkShiftStatus); + NeoForge.EVENT_BUS.addListener(DarkSteelSwordItem::applyAttackModifiers); + NeoForge.EVENT_BUS.addListener(StepAssistUpgrade::applyStepHeightModifiers); + NeoForge.EVENT_BUS.addListener(SpeedUpgrade::applySpeedModifiers); + NeoForge.EVENT_BUS.addListener(SpeedUpgrade::onPlayerTick); + NeoForge.EVENT_BUS.addListener(JumpUpgrade::doExtraJumps); + NeoForge.EVENT_BUS.addListener(AnvilRecipeHandler::handleAnvilRecipe); + + IntegrationManager.addIntegration(GliderIntegration.INSTANCE); } @SubscribeEvent public static void onGatherData(GatherDataEvent event) { - DataGenerator generator = event.getGenerator(); PackOutput packOutput = event.getGenerator().getPackOutput(); CompletableFuture lookupProvider = event.getLookupProvider(); ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); diff --git a/enderio-armory/src/main/java/com/enderio/armory/api/capability/IDarkSteelUpgradable.java b/enderio-armory/src/main/java/com/enderio/armory/api/capability/IDarkSteelUpgradable.java deleted file mode 100644 index ef0ab91f83..0000000000 --- a/enderio-armory/src/main/java/com/enderio/armory/api/capability/IDarkSteelUpgradable.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.enderio.armory.api.capability; - -import java.util.Collection; -import java.util.Optional; - -public interface IDarkSteelUpgradable { - - /** - * Note that this will blindly apply the upgrade regardless of validity, call - * {@link #canApplyUpgrade(IDarkSteelUpgrade)} first - * @param upgrade the upgrade to add - */ - void addUpgrade(IDarkSteelUpgrade upgrade); - - void removeUpgrade(String name); - - /** - * Returns the upgrades currently applied to the upgradable - * @return the upgrades currently applied to the upgradable - */ - Collection getUpgrades(); - - /** - * Performs validity checks to see if the specified upgrade can be applied based on the current state of the upgradable - * @param upgrade the upgrade to be checked - * @return true is can be applied - */ - boolean canApplyUpgrade(IDarkSteelUpgrade upgrade); - - boolean hasUpgrade(String upgradeName); - - Optional getUpgrade(String upgradeName); - - default Optional getUpgradeAs(String upgradeName, Class as) { - return getUpgrade(upgradeName).filter(as::isInstance).map(as::cast); - } - - /** - * Returns the list of upgrades that will return true from {@link #canApplyUpgrade(IDarkSteelUpgrade)} - * @return the upgrades that can be applied - */ - Collection getUpgradesApplicable(); - - /** - * Returns all upgrades that can ever be applied to this upgradable - * @return res - */ - Collection getAllPossibleUpgrades(); -} diff --git a/enderio-armory/src/main/java/com/enderio/armory/api/capability/IDarkSteelUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/api/capability/IDarkSteelUpgrade.java index 7b196a793c..422376a7e8 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/api/capability/IDarkSteelUpgrade.java +++ b/enderio-armory/src/main/java/com/enderio/armory/api/capability/IDarkSteelUpgrade.java @@ -1,15 +1,14 @@ package com.enderio.armory.api.capability; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.StringTag; -import net.minecraft.nbt.Tag; -import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.common.util.INBTSerializable; - +import com.enderio.armory.common.item.darksteel.upgrades.IUpgradeTier; import java.util.Collection; import java.util.Optional; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; -public interface IDarkSteelUpgrade extends INBTSerializable { +public interface IDarkSteelUpgrade {// extends INBTSerializable { Component getDisplayName(); @@ -42,6 +41,14 @@ default Optional getNextTier() { return Optional.empty(); } + /** + * If this upgrade has multiple tiers (eg, level 1, 2, 3 etc) return the current tier. + * @return the current tier + */ + default Optional getTier() { + return Optional.empty(); + } + /** * If an upgrade has multiple tiers, checks that the current upgrade can be replaced by the supplied upgrade * @param upgrade the upgrade to be checked @@ -51,13 +58,16 @@ default boolean isValidUpgrade(IDarkSteelUpgrade upgrade) { return false; } - @Override - default Tag serializeNBT(HolderLookup.Provider provider) { - return StringTag.valueOf(getName()); + default CompoundTag serializeNBT() { + return new CompoundTag(); } - @Override - default void deserializeNBT(HolderLookup.Provider provider, Tag nbt) { + default void deserializeNBT(Tag nbt) { } + default void onAddedToItem(ItemStack stack) { + } + + default void onRemovedFromItem(ItemStack stack) { + } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/client/ClientModEvents.java b/enderio-armory/src/main/java/com/enderio/armory/client/ClientModEvents.java new file mode 100644 index 0000000000..45a847d238 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/client/ClientModEvents.java @@ -0,0 +1,24 @@ +package com.enderio.armory.client; + +import com.enderio.armory.EnderIOArmory; +import com.enderio.armory.common.init.ArmoryItems; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RegisterItemDecorationsEvent; + +@EventBusSubscriber(modid = EnderIOArmory.MODULE_MOD_ID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) +public class ClientModEvents { + + @SubscribeEvent + public static void registerItemDecorations(RegisterItemDecorationsEvent event) { + event.register(ArmoryItems.DARK_STEEL_SWORD, MultiEnergyBarDecorator.INSTANCE); + event.register(ArmoryItems.DARK_STEEL_AXE, MultiEnergyBarDecorator.INSTANCE); + event.register(ArmoryItems.DARK_STEEL_PICKAXE, MultiEnergyBarDecorator.INSTANCE); + event.register(ArmoryItems.DARK_STEEL_HELMET, MultiEnergyBarDecorator.INSTANCE); + event.register(ArmoryItems.DARK_STEEL_CHESTPLATE, MultiEnergyBarDecorator.INSTANCE); + event.register(ArmoryItems.DARK_STEEL_LEGGINGS, MultiEnergyBarDecorator.INSTANCE); + event.register(ArmoryItems.DARK_STEEL_BOOTS, MultiEnergyBarDecorator.INSTANCE); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/client/ElytraUpgradeRenderLayer.java b/enderio-armory/src/main/java/com/enderio/armory/client/ElytraUpgradeRenderLayer.java new file mode 100644 index 0000000000..57d6988ac0 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/client/ElytraUpgradeRenderLayer.java @@ -0,0 +1,26 @@ +package com.enderio.armory.client; + +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.init.ArmoryDataComponents; +import com.enderio.armory.common.item.darksteel.upgrades.flight.ElytraUpgrade; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.EntityModelSet; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.ElytraLayer; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; + +public class ElytraUpgradeRenderLayer> + extends ElytraLayer { + + public ElytraUpgradeRenderLayer(RenderLayerParent entityRenderer, EntityModelSet modelSet) { + super(entityRenderer, modelSet); + } + + @Override + public boolean shouldRender(ItemStack stack, LivingEntity entity) { + return DarkSteelCapability.hasUpgrade(stack, ElytraUpgrade.NAME) + && stack.getOrDefault(ArmoryDataComponents.DARK_STEEL_FLIGHT_ACTIVE, false); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/client/EnerdIOArmoryClient.java b/enderio-armory/src/main/java/com/enderio/armory/client/EnerdIOArmoryClient.java new file mode 100644 index 0000000000..6dee7bb3b2 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/client/EnerdIOArmoryClient.java @@ -0,0 +1,26 @@ +package com.enderio.armory.client; + +import com.enderio.armory.EnderIOArmory; +import net.minecraft.client.renderer.entity.player.PlayerRenderer; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; + +@EventBusSubscriber(modid = EnderIOArmory.MODULE_MOD_ID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) +@Mod(value = EnderIOArmory.MODULE_MOD_ID, dist = Dist.CLIENT) +public class EnerdIOArmoryClient { + + @SubscribeEvent + public static void addLayers(EntityRenderersEvent.AddLayers event) { + for (var skin : event.getSkins()) { + if (event.getSkin(skin) instanceof PlayerRenderer playerRenderer) { + playerRenderer + .addLayer(new ElytraUpgradeRenderLayer<>(playerRenderer, event.getContext().getModelSet())); + } + } + + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/client/GliderIntegrationClient.java b/enderio-armory/src/main/java/com/enderio/armory/client/GliderIntegrationClient.java new file mode 100644 index 0000000000..1fc2096ff1 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/client/GliderIntegrationClient.java @@ -0,0 +1,43 @@ +package com.enderio.armory.client; + +import com.enderio.base.api.integration.ClientIntegration; +import com.enderio.base.client.EnderIOBaseClient; +import com.enderio.base.common.init.EIOItems; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.item.ItemDisplayContext; + +public class GliderIntegrationClient implements ClientIntegration { + + public static final GliderIntegrationClient INSTANCE = new GliderIntegrationClient(); + + @Override + public void renderHangGlider(PoseStack posestack, MultiBufferSource buffer, int light, int overlay, + AbstractClientPlayer player, float pPartialTick) { + + BakedModel bakedModel = EnderIOBaseClient.GLIDER_MODELS.get(EIOItems.GLIDER.asItem()); + if (bakedModel == null) { + return; + } + + posestack.pushPose(); + posestack.scale(1.5f, 1.5f, 1.5f); + posestack.translate(0, -0.6f, 0.7f); + + if (player.isShiftKeyDown()) { + posestack.translate(0, 0.05, 0); + } + Minecraft.getInstance() + .getItemRenderer() + .render(EIOItems.GLIDER.asItem().getDefaultInstance(), ItemDisplayContext.NONE, false, posestack, + buffer, light, overlay, bakedModel); + + posestack.scale(0.2f, 0.2f, 0.2f); + posestack.translate(0, -1f, .5 - 0.06f); + posestack.popPose(); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/client/KeyBinds.java b/enderio-armory/src/main/java/com/enderio/armory/client/KeyBinds.java new file mode 100644 index 0000000000..189b83aa4f --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/client/KeyBinds.java @@ -0,0 +1,30 @@ +package com.enderio.armory.client; + +import com.enderio.armory.EnderIOArmory; +import com.enderio.armory.common.item.darksteel.upgrades.flight.FlightToggleHandler; +import com.enderio.armory.common.lang.ArmoryLang; +import com.mojang.blaze3d.platform.InputConstants; +import net.minecraft.client.KeyMapping; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.neoforge.client.settings.KeyConflictContext; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.common.util.Lazy; +import org.lwjgl.glfw.GLFW; + +@EventBusSubscriber(modid = EnderIOArmory.MODULE_MOD_ID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) +public class KeyBinds { + + public static final Lazy FLIGHT_MAPPING = Lazy + .of(() -> new KeyMapping(ArmoryLang.DS_UPGRADE_FLIGHT_KEYBIND, KeyConflictContext.IN_GAME, + InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_G, ArmoryLang.DS_UPGRADE_KEYBIND_CATEGORY)); + + @SubscribeEvent + public static void registerBindings(RegisterKeyMappingsEvent event) { + event.register(FLIGHT_MAPPING.get()); + NeoForge.EVENT_BUS.addListener(FlightToggleHandler::toggleFlightUpgrade); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/client/MultiEnergyBarDecorator.java b/enderio-armory/src/main/java/com/enderio/armory/client/MultiEnergyBarDecorator.java new file mode 100644 index 0000000000..6f283abc25 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/client/MultiEnergyBarDecorator.java @@ -0,0 +1,46 @@ +package com.enderio.armory.client; + +import com.enderio.core.client.item.EnergyBarDecorator; +import com.enderio.core.common.energy.ItemStackEnergy; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.client.IItemDecorator; + +public class MultiEnergyBarDecorator implements IItemDecorator { + + public static final MultiEnergyBarDecorator INSTANCE = new MultiEnergyBarDecorator(); + + @Override + public boolean render(GuiGraphics guiGraphics, Font font, ItemStack stack, int xOffset, int yOffset) { + // Hide bar if no energy to hold + int maxEnergyStored = ItemStackEnergy.getMaxEnergyStored(stack); + if (maxEnergyStored <= 0) { + return false; + } + + int energyStored = ItemStackEnergy.getEnergyStored(stack); + float fillRatio = energyStored / (float) maxEnergyStored; + + int x = xOffset + 2; + int y = yOffset + 12; + boolean renderShadow = false; + if (stack.getDamageValue() == 0) { + y++; + renderShadow = true; + } + int width = Math.round(13.0F * fillRatio); + int height = 1; + + guiGraphics.fill(RenderType.guiOverlay(), x, y, x + 13, y + height, 0xFF000000); + guiGraphics.fill(RenderType.guiOverlay(), x, y, x + width, y + height, EnergyBarDecorator.BAR_COLOR_ARGB); + + if (renderShadow) { + y++; + guiGraphics.fill(RenderType.guiOverlay(), x, y, x + 13, y + height, 0xFF000000); + } + return true; + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelCapability.java b/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelCapability.java new file mode 100644 index 0000000000..3792dbd055 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelCapability.java @@ -0,0 +1,202 @@ +package com.enderio.armory.common.capability; + +import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.init.ArmoryCapabilities; +import com.enderio.armory.common.init.ArmoryDataComponents; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgradeTier; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.function.Supplier; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomData; +import org.jetbrains.annotations.Nullable; + +public class DarkSteelCapability { + + public static Optional getEmpoweredUpgrade(ItemStack stack) { + return DarkSteelCapability.getUpgradeAs(stack, EmpoweredUpgrade.NAME, EmpoweredUpgrade.class); + } + + public static ItemStack addUpgrade(ItemStack itemStack, IDarkSteelUpgrade upgrade) { + DarkSteelCapability capability = itemStack.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (capability != null) { + capability.addUpgrade(upgrade); + } + return itemStack; + } + + public static void removeUpgrade(ItemStack itemStack, String upgrade) { + DarkSteelCapability capability = itemStack.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (capability != null) { + capability.removeUpgrade(upgrade); + } + } + + public static Collection getUpgrades(ItemStack itemStack) { + DarkSteelCapability capability = itemStack.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (capability != null) { + return capability.getUpgrades(); + } + return Collections.emptyList(); + } + + public static boolean hasUpgrade(ItemStack itemStack, String name) { + DarkSteelCapability capability = itemStack.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (capability != null) { + return capability.hasUpgrade(name); + } + return false; + } + + public static Optional getUpgradeAs(ItemStack itemStack, String upgrade, + Class as) { + DarkSteelCapability cap = itemStack.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + return cap != null ? cap.getUpgradeAs(upgrade, as) : Optional.empty(); + } + + public static Collection getUpgradesApplicable(ItemStack itemStack) { + DarkSteelCapability capability = itemStack.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (capability != null) { + return capability.getUpgradesApplicable(); + } + return Collections.emptyList(); + } + + public static Collection getAllPossibleUpgrades(ItemStack stack) { + Set upgradeNames = DarkSteelUpgradeRegistry.instance().getUpgradesForItem(stack); + final List result = new ArrayList<>(); + upgradeNames.forEach(s -> DarkSteelUpgradeRegistry.instance().createUpgrade(s).ifPresent(result::add)); + return result; + } + + private final ItemStack onStack; + + private final Supplier> componentType; + + private final Map upgrades = new HashMap<>(); + + public DarkSteelCapability(Supplier> componentType, + ItemStack onStack) { + this.componentType = componentType; + this.onStack = onStack; + @Nullable + DarkSteelItemUpgrades tmp = onStack.get(ArmoryDataComponents.DARK_STEEL_ITEM_UPGRADES); + if (tmp != null) { + for (UpgradeData data : tmp.upgradesData) { + IDarkSteelUpgrade up = DarkSteelUpgradeRegistry.instance() + .loadUpgrade(data.upgradeName, data.data.copyTag()); + if (up != null) { + upgrades.put(up.getName(), up); + } + } + } + } + + public void addUpgrade(IDarkSteelUpgrade upgrade) { + removeUpgradeInSlot(upgrade.getSlot()); + upgrades.put(upgrade.getName(), upgrade); + upgrade.onAddedToItem(onStack); + updateData(); + } + + public void removeUpgrade(String name) { + IDarkSteelUpgrade upgrade = upgrades.remove(name); + upgrade.onRemovedFromItem(onStack); + updateData(); + } + + private void updateData() { + List newData = new ArrayList<>(); + for (IDarkSteelUpgrade up : upgrades.values()) { + UpgradeData d = new UpgradeData(up.getName(), CustomData.of(up.serializeNBT())); + newData.add(d); + } + onStack.set(componentType, new DarkSteelItemUpgrades(newData)); + } + + private void removeUpgradeInSlot(String slot) { + for (var entry : upgrades.entrySet()) { + if (entry.getValue().getSlot().equals(slot)) { + upgrades.remove(entry.getKey()); + break; + } + } + } + + public boolean canApplyUpgrade(IDarkSteelUpgrade upgrade) { + if (upgrades.isEmpty()) { + return EmpoweredUpgrade.NAME.equals(upgrade.getName()) && upgrade.isBaseTier(); + } + + Optional existing = getUpgrade(upgrade.getName()); + if (existing.isPresent()) { + return existing.get().isValidUpgrade(upgrade); + } + if (!upgrade.isBaseTier()) { + return false; + } + return DarkSteelUpgradeRegistry.instance().getUpgradesForItem(onStack).contains(upgrade.getName()); + } + + public Optional getUpgradeAs(String upgradeName, Class as) { + return getUpgrade(upgradeName).filter(as::isInstance).map(as::cast); + } + + public Optional getUpgrade(String upgrade) { + return Optional.ofNullable(upgrades.get(upgrade)); + } + + public Collection getUpgrades() { + return upgrades.values(); + } + + public boolean hasUpgrade(String upgrade) { + return upgrades.containsKey(upgrade); + } + + public Collection getUpgradesApplicable() { + if (upgrades.isEmpty()) { + return List.of(EmpoweredUpgradeTier.ONE.getFactory().get()); + } + final List result = new ArrayList<>(); + upgrades.values().forEach(upgrade -> upgrade.getNextTier().ifPresent(result::add)); + getAllPossibleUpgrades(onStack).forEach(upgrade -> { + if (!hasUpgrade(upgrade.getName())) { + result.add(upgrade); + } + }); + return result; + } + + public record UpgradeData(String upgradeName, CustomData data) { + } + + public record DarkSteelItemUpgrades(List upgradesData) { + + public static final Codec UPGRADE_DATA_CODEC = RecordCodecBuilder.create(instance -> instance + .group(Codec.STRING.fieldOf("upgradeName").forGetter(UpgradeData::upgradeName), + CustomData.CODEC.fieldOf("data").forGetter(UpgradeData::data)) + .apply(instance, UpgradeData::new)); + + public static final Codec> UPGRADE_LIST_CODEC = Codec.list(UPGRADE_DATA_CODEC); + + public static final Codec ITEM_UPGRADES_CODEC = RecordCodecBuilder + .create(instance -> instance + .group(UPGRADE_LIST_CODEC.fieldOf("upgradesData") + .forGetter(DarkSteelItemUpgrades::upgradesData)) + .apply(instance, DarkSteelItemUpgrades::new)); + + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelEnergyStorage.java b/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelEnergyStorage.java new file mode 100644 index 0000000000..27131ac8f2 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelEnergyStorage.java @@ -0,0 +1,53 @@ +package com.enderio.armory.common.capability; + +import com.enderio.armory.common.init.ArmoryDataComponents; +import net.minecraft.core.component.DataComponentType; +import net.neoforged.neoforge.common.MutableDataComponentHolder; +import net.neoforged.neoforge.energy.ComponentEnergyStorage; + +public class DarkSteelEnergyStorage extends ComponentEnergyStorage { + + public DarkSteelEnergyStorage(MutableDataComponentHolder parent, DataComponentType energyComponent, + int capacity, int maxTransfer) { + super(parent, energyComponent, capacity, maxTransfer); + } + + @Override + public int receiveEnergy(int toReceive, boolean simulate) { + return super.receiveEnergy(toReceive, simulate); + } + + @Override + public int extractEnergy(int toExtract, boolean simulate) { + return super.extractEnergy(toExtract, simulate); + } + + @Override + public int getEnergyStored() { + return super.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored() { + return super.getMaxEnergyStored(); + } + + @Override + public boolean canExtract() { + return super.canExtract(); + } + + @Override + public boolean canReceive() { + return super.canReceive(); + } + + @Override + protected void setEnergy(int energy) { + super.setEnergy(energy); + // Do this to ensure any equipped items have their ItemAttributeModifierEvent + // event fired so they can update + // any attribute modifiers energy is lost or regained + parent.set(ArmoryDataComponents.DARK_STEEL_ITEM_HAS_ENERGY, energy > 0); + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelUpgradeable.java b/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelUpgradeable.java deleted file mode 100644 index f552def96a..0000000000 --- a/enderio-armory/src/main/java/com/enderio/armory/common/capability/DarkSteelUpgradeable.java +++ /dev/null @@ -1,207 +0,0 @@ -package com.enderio.armory.common.capability; - -import com.enderio.armory.api.capability.IDarkSteelUpgradable; -import com.enderio.armory.api.capability.IDarkSteelUpgrade; -import com.enderio.armory.common.init.ArmoryCapabilities; -import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; -import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; -import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgradeTier; -import com.enderio.base.api.EnderIO; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.common.util.INBTSerializable; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; - -@SuppressWarnings("unused") -public class DarkSteelUpgradeable implements IDarkSteelUpgradable, INBTSerializable { - - // region Utils - - public static ItemStack addUpgrade(ItemStack itemStack, IDarkSteelUpgrade upgrade) { - IDarkSteelUpgradable capability = itemStack.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM); - if (capability != null) { - capability.addUpgrade(upgrade); - } - return itemStack; - } - - public static void removeUpgrade(ItemStack itemStack, String upgrade) { - IDarkSteelUpgradable capability = itemStack.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM); - if (capability != null) { - capability.removeUpgrade(upgrade); - } - } - - public static Collection getUpgrades(ItemStack itemStack) { - IDarkSteelUpgradable capability = itemStack.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM); - if (capability != null) { - capability.getUpgrades(); - } - return Collections.emptyList(); - } - - public static boolean hasUpgrade(ItemStack itemStack, String name) { - IDarkSteelUpgradable capability = itemStack.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM); - if (capability != null) { - capability.hasUpgrade(name); - } - return false; - } - - public static Optional getUpgradeAs(ItemStack itemStack, String upgrade, Class as) { - IDarkSteelUpgradable cap = itemStack.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM); - return cap.getUpgradeAs(upgrade, as); - } - - public static Collection getUpgradesApplicable(ItemStack itemStack) { - IDarkSteelUpgradable capability = itemStack.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM); - if (capability != null) { - capability.getUpgradesApplicable(); - } - return Collections.emptyList(); - } - - public static Collection getAllPossibleUpgrades(ItemStack itemStack) { - IDarkSteelUpgradable capability = itemStack.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM); - if (capability != null) { - capability.getAllPossibleUpgrades(); - } - return Collections.emptyList(); - } - - // endregion - - // region Class Impl - - // TODO: I would move this to EIONBTKeys but unsure what it does - // its fine for now, upgrades will be seeing breaking changes anyway - private static final String ON_ITEM_KEY = "onItem"; - - private final Map upgrades = new HashMap<>(); - - /** - * The type of item that is upgradable, used to determine valid upgrades. - */ - private ResourceLocation onItem; - - public DarkSteelUpgradeable() { - this(EnderIO.loc("empty")); - } - - public DarkSteelUpgradeable(ResourceLocation onItem) { - this.onItem = onItem; - } - - @Override - public void addUpgrade(IDarkSteelUpgrade upgrade) { - removeUpgradeInSlot(upgrade.getSlot()); - upgrades.put(upgrade.getName(), upgrade); - } - - @Override - public void removeUpgrade(String name) { - upgrades.remove(name); - } - - private void removeUpgradeInSlot(String slot) { - for (var entry : upgrades.entrySet()) { - if (entry.getValue().getSlot().equals(slot)) { - upgrades.remove(entry.getKey()); - break; - } - } - } - - @Override - public boolean canApplyUpgrade(IDarkSteelUpgrade upgrade) { - if (upgrades.isEmpty()) { - return EmpoweredUpgrade.NAME.equals(upgrade.getName()) && upgrade.isBaseTier(); - } - - Optional existing = getUpgrade(upgrade.getName()); - if (existing.isPresent()) { - return existing.get().isValidUpgrade(upgrade); - } - if (!upgrade.isBaseTier()) { - return false; - } - return DarkSteelUpgradeRegistry.instance().getUpgradesForItem(onItem).contains(upgrade.getName()); - } - - @Override - public Optional getUpgrade(String upgrade) { - return Optional.ofNullable(upgrades.get(upgrade)); - } - - @Override - public Collection getUpgrades() { - return upgrades.values(); - } - - @Override - public boolean hasUpgrade(String upgrade) { - return upgrades.containsKey(upgrade); - } - - @Override - public Collection getUpgradesApplicable() { - if (upgrades.isEmpty()) { - return List.of(EmpoweredUpgradeTier.ONE.getFactory().get()); - } - final List result = new ArrayList<>(); - upgrades.values().forEach(upgrade -> upgrade.getNextTier().ifPresent(result::add)); - - getAllPossibleUpgrades().forEach(upgrade -> { - if (!hasUpgrade(upgrade.getName())) { - result.add(upgrade); - } - }); - return result; - } - - @Override - public Collection getAllPossibleUpgrades() { - Set upgradeNames = DarkSteelUpgradeRegistry.instance().getUpgradesForItem(onItem); - final List result = new ArrayList<>(); - upgradeNames.forEach(s -> DarkSteelUpgradeRegistry.instance().createUpgrade(s).ifPresent(result::add)); - return result; - } - - @Override - public CompoundTag serializeNBT(HolderLookup.Provider lookupProvider) { - CompoundTag tag = new CompoundTag(); - for (var entry : upgrades.entrySet()) { - tag.put(entry.getKey(), entry.getValue().serializeNBT(lookupProvider)); - } - tag.putString(ON_ITEM_KEY, onItem.toString()); - return tag; - } - - @Override - public void deserializeNBT(HolderLookup.Provider lookupProvider, Tag tag) { - upgrades.clear(); - if (tag instanceof CompoundTag nbt) { - for (String key : nbt.getAllKeys()) { - DarkSteelUpgradeRegistry.instance().createUpgrade(key).ifPresent(upgrade -> { - upgrade.deserializeNBT(lookupProvider, Objects.requireNonNull(nbt.get(key))); - addUpgrade(upgrade); - }); - } - onItem = ResourceLocation.parse(nbt.getString(ON_ITEM_KEY)); - } - } - - // endregion -} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/capability/EnergyDelegator.java b/enderio-armory/src/main/java/com/enderio/armory/common/capability/EnergyDelegator.java deleted file mode 100644 index 013bd81fcf..0000000000 --- a/enderio-armory/src/main/java/com/enderio/armory/common/capability/EnergyDelegator.java +++ /dev/null @@ -1,61 +0,0 @@ -//package com.enderio.armory.common.capability; -// -//import com.enderio.api.capability.IDarkSteelUpgradable; -//import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; -//import com.enderio.base.common.init.EIOCapabilities; -//import net.neoforged.neoforge.energy.EnergyStorage; -//import net.neoforged.neoforge.energy.IEnergyStorage; -// -//import java.util.Optional; -// -//public class EnergyDelegator implements IEnergyStorage { -// -// private final MultiCapabilityProvider prov; -// -// private static final EnergyStorage NULL_DELEGATE = new EnergyStorage(0); -// -// public EnergyDelegator(MultiCapabilityProvider prov) { -// this.prov = prov; -// } -// -// @Override -// public int receiveEnergy(int maxReceive, boolean simulate) { -// return getDelegate().receiveEnergy(maxReceive, simulate); -// } -// -// @Override -// public int extractEnergy(int maxExtract, boolean simulate) { -// return getDelegate().extractEnergy(maxExtract, simulate); -// } -// -// @Override -// public int getEnergyStored() { -// return getDelegate().getEnergyStored(); -// } -// -// @Override -// public int getMaxEnergyStored() { -// return getDelegate().getMaxEnergyStored(); -// } -// -// @Override -// public boolean canExtract() { -// return getDelegate().canExtract(); -// } -// -// @Override -// public boolean canReceive() { -// return getDelegate().canReceive(); -// } -// -// private IEnergyStorage getDelegate() { -// Optional cap = prov.getCapability(EIOCapabilities.DARK_STEEL_UPGRADABLE).resolve(); -// if (cap.isPresent()) { -// Optional energyUp = cap.get().getUpgradeAs(EmpoweredUpgrade.NAME, EmpoweredUpgrade.class); -// if (energyUp.isPresent()) { -// return energyUp.get().getStorage(); -// } -// } -// return NULL_DELEGATE; -// } -//} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/config/common/ArmoryCommonConfig.java b/enderio-armory/src/main/java/com/enderio/armory/common/config/common/ArmoryCommonConfig.java index 4dc8f9c552..86034d2f98 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/config/common/ArmoryCommonConfig.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/config/common/ArmoryCommonConfig.java @@ -11,18 +11,34 @@ public class ArmoryCommonConfig { public final ModConfigSpec.ConfigValue EMPOWERED_EFFICIENCY_BOOST; public final ModConfigSpec.ConfigValue EMPOWERED_ENERGY_PER_DAMAGE; - public final ModConfigSpec.ConfigValue EMPOWERED_ACTIVATION_COST_I; - public final ModConfigSpec.ConfigValue EMPOWERED_DAMAGE_ABSORPTION_CHANCE_I; + public final ModConfigSpec.ConfigValue EMPOWERED_MAX_ENERGY_I; + public final ModConfigSpec.ConfigValue EMPOWERED_DAMAGE_ABSORPTION_CHANCE_I; + public final ModConfigSpec.ConfigValue EMPOWERED_ATTACK_DAMAGE_INCREASE_I; + public final ModConfigSpec.ConfigValue EMPOWERED_ATTACK_SPEED_INCREASE_I; + public final ModConfigSpec.ConfigValue EMPOWERED_MOB_HEAD_CHANCE_I; + public final ModConfigSpec.ConfigValue EMPOWERED_ACTIVATION_COST_I; + public final ModConfigSpec.ConfigValue EMPOWERED_ACTIVATION_COST_II; public final ModConfigSpec.ConfigValue EMPOWERED_DAMAGE_ABSORPTION_CHANCE_II; public final ModConfigSpec.ConfigValue EMPOWERED_MAX_ENERGY_II; + public final ModConfigSpec.ConfigValue EMPOWERED_ATTACK_DAMAGE_INCREASE_II; + public final ModConfigSpec.ConfigValue EMPOWERED_ATTACK_SPEED_INCREASE_II; + public final ModConfigSpec.ConfigValue EMPOWERED_MOB_HEAD_CHANCE_II; + public final ModConfigSpec.ConfigValue EMPOWERED_ACTIVATION_COST_III; public final ModConfigSpec.ConfigValue EMPOWERED_DAMAGE_ABSORPTION_CHANCE_III; public final ModConfigSpec.ConfigValue EMPOWERED_MAX_ENERGY_III; + public final ModConfigSpec.ConfigValue EMPOWERED_ATTACK_DAMAGE_INCREASE_III; + public final ModConfigSpec.ConfigValue EMPOWERED_ATTACK_SPEED_INCREASE_III; + public final ModConfigSpec.ConfigValue EMPOWERED_MOB_HEAD_CHANCE_III; + public final ModConfigSpec.ConfigValue EMPOWERED_ACTIVATION_COST_IV; public final ModConfigSpec.ConfigValue EMPOWERED_DAMAGE_ABSORPTION_CHANCE_IV; public final ModConfigSpec.ConfigValue EMPOWERED_MAX_ENERGY_IV; + public final ModConfigSpec.ConfigValue EMPOWERED_ATTACK_DAMAGE_INCREASE_IV; + public final ModConfigSpec.ConfigValue EMPOWERED_ATTACK_SPEED_INCREASE_IV; + public final ModConfigSpec.ConfigValue EMPOWERED_MOB_HEAD_CHANCE_IV; public final ModConfigSpec.ConfigValue EXPLOSIVE_RADIUS_ACTIVATION_COST_I; public final ModConfigSpec.ConfigValue EXPLOSIVE_I; @@ -37,6 +53,26 @@ public class ArmoryCommonConfig { public final ModConfigSpec.ConfigValue SPOON_ACTIVATION_COST; public final ModConfigSpec.ConfigValue FORK_ACTIVATION_COST; public final ModConfigSpec.ConfigValue DIRECT_ACTIVATION_COST; + public final ModConfigSpec.ConfigValue TRAVEL_ACTIVATION_COST; + + public final ModConfigSpec.ConfigValue STEP_ASSIST_ACTIVATION_COST; + + public final ModConfigSpec.ConfigValue SPEED_ENERGY_USE; + public final ModConfigSpec.ConfigValue SPEED_ACTIVATION_COST_I; + public final ModConfigSpec.ConfigValue SPEED_I_BOOST; + public final ModConfigSpec.ConfigValue SPEED_ACTIVATION_COST_II; + public final ModConfigSpec.ConfigValue SPEED_II_BOOST; + public final ModConfigSpec.ConfigValue SPEED_ACTIVATION_COST_III; + public final ModConfigSpec.ConfigValue SPEED_III_BOOST; + + public final ModConfigSpec.ConfigValue JUMP_ENERGY_USE; + public final ModConfigSpec.ConfigValue JUMP_COUNT_I; + public final ModConfigSpec.ConfigValue JUMP_ACTIVATION_COST_I; + public final ModConfigSpec.ConfigValue JUMP_COUNT_II; + public final ModConfigSpec.ConfigValue JUMP_ACTIVATION_COST_II; + + public final ModConfigSpec.ConfigValue GLIDER_ACTIVATION_COST; + public final ModConfigSpec.ConfigValue ELYTRA_ACTIVATION_COST; public ArmoryCommonConfig(ModConfigSpec.Builder builder) { builder.push("darksteel"); @@ -58,15 +94,30 @@ public ArmoryCommonConfig(ModConfigSpec.Builder builder) { EMPOWERED_ACTIVATION_COST_I = builder.define("activationCost_l1", 4); EMPOWERED_DAMAGE_ABSORPTION_CHANCE_I = builder.define("damageAbsorptionChance_l1", 0.5d); EMPOWERED_MAX_ENERGY_I = builder.define("maxEnergy_l1", 100000); + EMPOWERED_ATTACK_DAMAGE_INCREASE_I = builder.define("attackDamageIncrease_l1", 1); + EMPOWERED_ATTACK_SPEED_INCREASE_I = builder.define("attackSpeedIncrease_l1", 0.4); + EMPOWERED_MOB_HEAD_CHANCE_I = builder.define("modHeadChance_l1", 0.07); + EMPOWERED_ACTIVATION_COST_II = builder.define("activationCost_l2", 8); EMPOWERED_DAMAGE_ABSORPTION_CHANCE_II = builder.define("damageAbsorptionChance_l2", 0.6d); EMPOWERED_MAX_ENERGY_II = builder.define("maxEnergy_l2", 150000); + EMPOWERED_ATTACK_DAMAGE_INCREASE_II = builder.define("attackDamageIncrease_l2", 2); + EMPOWERED_ATTACK_SPEED_INCREASE_II = builder.define("attackSpeedIncrease_l2", 0.45); + EMPOWERED_MOB_HEAD_CHANCE_II = builder.define("modHeadChance_l2", 0.09); + EMPOWERED_ACTIVATION_COST_III = builder.define("activationCost_l3", 12); EMPOWERED_DAMAGE_ABSORPTION_CHANCE_III = builder.define("damageAbsorptionChance_l3", 0.7d); EMPOWERED_MAX_ENERGY_III = builder.define("maxEnergy_l3", 250000); + EMPOWERED_ATTACK_DAMAGE_INCREASE_III = builder.define("attackDamageIncrease_l3", 3); + EMPOWERED_ATTACK_SPEED_INCREASE_III = builder.define("attackSpeedIncrease_l3", 0.5); + EMPOWERED_MOB_HEAD_CHANCE_III = builder.define("modHeadChance_l3", 0.11); + EMPOWERED_ACTIVATION_COST_IV = builder.define("activationCost_l4", 16); EMPOWERED_DAMAGE_ABSORPTION_CHANCE_IV = builder.define("damageAbsorptionChance_l4", 0.85d); EMPOWERED_MAX_ENERGY_IV = builder.define("maxEnergy_l4", 1000000); + EMPOWERED_ATTACK_DAMAGE_INCREASE_IV = builder.define("attackDamageIncrease_l4", 4); + EMPOWERED_ATTACK_SPEED_INCREASE_IV = builder.define("attackSpeedIncrease_l4", 0.55); + EMPOWERED_MOB_HEAD_CHANCE_IV = builder.define("modHeadChance_l4", 0.13); builder.pop(); builder.push("explosive"); @@ -85,7 +136,32 @@ public ArmoryCommonConfig(ModConfigSpec.Builder builder) { SPOON_ACTIVATION_COST = builder.define("spoonActivationCost", 4); FORK_ACTIVATION_COST = builder.define("forkActivationCost", 4); - DIRECT_ACTIVATION_COST = builder.define("directActivationCost", 4); + DIRECT_ACTIVATION_COST = builder.define("directActivationCost", 8); + TRAVEL_ACTIVATION_COST = builder.define("travelActivationCost", 12); + + STEP_ASSIST_ACTIVATION_COST = builder.define("stepAssistActivationCost", 4); + + GLIDER_ACTIVATION_COST = builder.define("gliderActivationCost", 4); + ELYTRA_ACTIVATION_COST = builder.define("elytraActivationCost", 10); + + builder.push("speed"); + SPEED_ENERGY_USE = builder.define("speedEnergyUsePerUnitMoved", 80); + SPEED_ACTIVATION_COST_I = builder.define("speedActivationCost_l1", 4); + SPEED_I_BOOST = builder.define("speedBoost_l1", 0.15); + SPEED_ACTIVATION_COST_II = builder.define("speedActivationCost_l2", 6); + SPEED_II_BOOST = builder.define("speedBoost_l2", 0.3); + SPEED_ACTIVATION_COST_III = builder.define("speedActivationCost_l3", 8); + SPEED_III_BOOST = builder.define("speedBoost_l3", 0.45); + builder.pop(); + + builder.push("jump"); + JUMP_ENERGY_USE = builder.define("jumpEnergyUsePerUnitMoved", 200); + JUMP_COUNT_I = builder.define("jumpCount_l1", 2); + JUMP_ACTIVATION_COST_I = builder.define("jumpActivationCost_l1", 6); + JUMP_COUNT_II = builder.define("jumpCount_l2", 3); + JUMP_ACTIVATION_COST_II = builder.define("jumpActivationCost_l2", 8); + builder.pop(); + builder.pop(); builder.pop(); } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryArmorMaterials.java b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryArmorMaterials.java new file mode 100644 index 0000000000..e2bf5bf5c2 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryArmorMaterials.java @@ -0,0 +1,53 @@ +package com.enderio.armory.common.init; + +import com.enderio.base.api.EnderIO; +import com.enderio.base.common.init.EIOItems; +import java.util.EnumMap; +import java.util.List; +import java.util.function.Supplier; +import net.minecraft.Util; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.crafting.Ingredient; + +public class ArmoryArmorMaterials { + + public static final Holder DARK_STEEL_ARMOR_MATERIAL = register("dark_steel", + Util.make(new EnumMap<>(ArmorItem.Type.class), (map) -> { + map.put(ArmorItem.Type.BOOTS, 3); + map.put(ArmorItem.Type.LEGGINGS, 6); + map.put(ArmorItem.Type.CHESTPLATE, 8); + map.put(ArmorItem.Type.HELMET, 3); + map.put(ArmorItem.Type.BODY, 11); + }), 10, SoundEvents.ARMOR_EQUIP_DIAMOND, 2.0F, 0.0F, () -> Ingredient.of(EIOItems.DARK_STEEL_INGOT)); + + private static Holder register(String name, EnumMap defense, + int enchantmentValue, Holder equipSound, float toughness, float knockbackResistance, + Supplier repairIngredient) { + List list = List + .of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(EnderIO.NAMESPACE, name))); + return register(name, defense, enchantmentValue, equipSound, toughness, knockbackResistance, repairIngredient, + list); + } + + private static Holder register(String name, EnumMap defense, + int enchantmentValue, Holder equipSound, float toughness, float knockbackResistance, + Supplier repairIngridient, List layers) { + EnumMap enummap = new EnumMap<>(ArmorItem.Type.class); + + for (ArmorItem.Type armoritem$type : ArmorItem.Type.values()) { + enummap.put(armoritem$type, defense.get(armoritem$type)); + } + + return Registry.registerForHolder(BuiltInRegistries.ARMOR_MATERIAL, ResourceLocation.withDefaultNamespace(name), + new ArmorMaterial(enummap, enchantmentValue, equipSound, repairIngridient, layers, toughness, + knockbackResistance)); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryCapabilities.java b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryCapabilities.java index 41d363cead..ad5af40e3b 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryCapabilities.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryCapabilities.java @@ -1,14 +1,30 @@ package com.enderio.armory.common.init; -import com.enderio.armory.api.capability.IDarkSteelUpgradable; +import static com.enderio.armory.common.init.ArmoryDataComponents.DARK_STEEL_ITEM_UPGRADES; + +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.capability.DarkSteelEnergyStorage; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; import com.enderio.base.api.EnderIO; +import com.enderio.base.common.init.EIODataComponents; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.capabilities.ICapabilityProvider; import net.neoforged.neoforge.capabilities.ItemCapability; +import net.neoforged.neoforge.energy.IEnergyStorage; public class ArmoryCapabilities { - public static final class DarkSteelUpgradable { - public static final ItemCapability ITEM = - ItemCapability.createVoid( - EnderIO.loc("dark_steel_upgradable"), - IDarkSteelUpgradable.class); - } + + public static final ItemCapability DARK_STEEL_CAPABILITY = ItemCapability + .createVoid(EnderIO.loc("dark_steel_capability"), DarkSteelCapability.class); + + public static ICapabilityProvider DARK_STEEL_PROVIDER = (stack, + v) -> new DarkSteelCapability(DARK_STEEL_ITEM_UPGRADES, stack); + + public static ICapabilityProvider DARK_STEEL_ENERGY_STORAGE_PROVIDER = (stack, + v) -> new DarkSteelEnergyStorage(stack, EIODataComponents.ENERGY.get(), + DarkSteelCapability.getEmpoweredUpgrade(stack).map(EmpoweredUpgrade::getMaxEnergyStored).orElse(0), + DarkSteelCapability.getEmpoweredUpgrade(stack) + .map(EmpoweredUpgrade::getMaxEnergyTransfer) + .orElse(0)); + } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryDataComponents.java b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryDataComponents.java new file mode 100644 index 0000000000..8b6139d72f --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryDataComponents.java @@ -0,0 +1,44 @@ +package com.enderio.armory.common.init; + +import static com.enderio.armory.common.capability.DarkSteelCapability.DarkSteelItemUpgrades.ITEM_UPGRADES_CODEC; + +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.base.api.EnderIO; +import com.mojang.serialization.Codec; +import java.util.function.Supplier; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.component.CustomData; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; + +public class ArmoryDataComponents { + + private static final DeferredRegister> DATA_COMPONENT_TYPES = DeferredRegister + .create(Registries.DATA_COMPONENT_TYPE, EnderIO.NAMESPACE); + + public static Supplier> DARK_STEEL_UPGRADE = saved("dark_steel_upgrade", + CustomData.CODEC); + + public static Supplier> DARK_STEEL_ITEM_UPGRADES = saved( + "dark_steel_upgrades", ITEM_UPGRADES_CODEC); + + /** + * Used to ensure any equipped dark steel items have their ItemAttributeModifierEvent event fired so they can update + * any attribute modifiers when energy is lost or regained + */ + public static Supplier> DARK_STEEL_ITEM_HAS_ENERGY = saved("dark_steel_item_has_energy", + Codec.BOOL); + + public static Supplier> DARK_STEEL_FLIGHT_ACTIVE = saved("dark_steel_flight_active", + Codec.BOOL); + + private static Supplier> saved(String name, Codec codec) { + return DATA_COMPONENT_TYPES.register(name, () -> DataComponentType.builder().persistent(codec).build()); + } + + public static void register(IEventBus bus) { + DATA_COMPONENT_TYPES.register(bus); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryItems.java b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryItems.java index 8b2a90a880..e8066dd721 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryItems.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryItems.java @@ -1,138 +1,287 @@ package com.enderio.armory.common.init; import com.enderio.armory.EnderIOArmory; +import com.enderio.armory.common.config.ArmoryConfig; +import com.enderio.armory.common.item.darksteel.DarkSteelAxeItem; +import com.enderio.armory.common.item.darksteel.DarkSteelBootsItem; +import com.enderio.armory.common.item.darksteel.DarkSteelChestplateItem; +import com.enderio.armory.common.item.darksteel.DarkSteelHelmetItem; +import com.enderio.armory.common.item.darksteel.DarkSteelLeggingsItem; +import com.enderio.armory.common.item.darksteel.DarkSteelPickaxeItem; import com.enderio.armory.common.item.darksteel.DarkSteelSwordItem; +import com.enderio.armory.common.item.darksteel.DarkSteelUpgradeItem; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgradeTier; +import com.enderio.armory.common.item.darksteel.upgrades.ForkUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.JumpUpgradeTier; +import com.enderio.armory.common.item.darksteel.upgrades.SpoonUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.StepAssistUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.direct.DirectUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.explosive.ExplosivePenetrationUpgradeTier; +import com.enderio.armory.common.item.darksteel.upgrades.explosive.ExplosiveUpgradeTier; +import com.enderio.armory.common.item.darksteel.upgrades.flight.ElytraUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.flight.GliderUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.speed.SpeedUpgradeTier; +import com.enderio.armory.common.item.darksteel.upgrades.travel.TravelUpgrade; import com.enderio.armory.common.tag.ArmoryTags; import com.enderio.base.common.init.EIOCreativeTabs; +import com.enderio.base.common.item.misc.MaterialItem; import com.enderio.base.common.tag.EIOTags; import com.enderio.regilite.holder.RegiliteItem; import com.enderio.regilite.registry.ItemRegistry; +import net.minecraft.tags.ItemTags; import net.minecraft.world.item.Item; import net.minecraft.world.item.Tier; import net.minecraft.world.item.crafting.Ingredient; import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.common.SimpleTier; @SuppressWarnings("unused") public class ArmoryItems { private static final ItemRegistry ITEM_REGISTRY = EnderIOArmory.REGILITE.itemRegistry(); - /*public static final Tier DARK_STEEL_TIER = TierSortingRegistry.registerTier( - new SimpleTier(3, 2000, 8.0F, 3, 25, ArmoryTags.Blocks.DARK_STEEL_TIER, () -> Ingredient.of(EIOItems.DARK_STEEL_INGOT.get())), - EnderIO.loc("dark_steel_tier"), List.of(Tiers.DIAMOND), List.of(Tiers.NETHERITE));*/ - - public static final Tier DARK_STEEL_TIER = new SimpleTier(ArmoryTags.Blocks.INCORRECT_FOR_DARK_STEEL_TOOL, 2000, 8.0f, 3.0f, 25, () -> Ingredient.of( - EIOTags.Items.INGOTS_DARK_STEEL)); + public static final Tier DARK_STEEL_TIER = new SimpleTier(ArmoryTags.Blocks.INCORRECT_FOR_DARK_STEEL_TOOL, 2000, + 8.0f, 3.0f, 25, () -> Ingredient.of(EIOTags.Items.INGOTS_DARK_STEEL)); public static final RegiliteItem DARK_STEEL_SWORD = ITEM_REGISTRY - .registerItem("dark_steel_sword", DarkSteelSwordItem::new, new Item.Properties().durability(2000)) - .setTab(EIOCreativeTabs.GEAR) - .setTranslation("The Ender") - .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); - - // TODO: Bring these back when they are finished. -// public static final ItemEntry DARK_STEEL_PICKAXE = REGISTRATE -// .item("dark_steel_pickaxe", DarkSteelPickaxeItem::new) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_PICKAXE.get().addAllVariants(modifier)) -// .onRegister(item -> DarkSteelUpgradeRegistry -// .instance() -// .addUpgradesForItem(Objects.requireNonNull(ForgeRegistries.ITEMS.getKey(item)), EmpoweredUpgrade.NAME, SpoonUpgrade.NAME, DirectUpgrade.NAME, -// ExplosiveUpgrade.NAME, ExplosivePenetrationUpgrade.NAME)) -// .register(); -// -// public static final ItemEntry DARK_STEEL_AXE = REGISTRATE -// .item("dark_steel_axe", DarkSteelAxeItem::new) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_AXE.get().addAllVariants(modifier)) -// .onRegister(item -> DarkSteelUpgradeRegistry -// .instance() -// .addUpgradesForItem(Objects.requireNonNull(ForgeRegistries.ITEMS.getKey(item)), EmpoweredUpgrade.NAME, ForkUpgrade.NAME, DirectUpgrade.NAME)) -// .register(); -// -// private static final String UPGRADE_TEXT = " Upgrade"; -// -// public static final ItemEntry DARK_STEEL_UPGRADE_BLANK = REGISTRATE -// .item("dark_steel_upgrade_blank", props -> new MaterialItem(props, false)) -// .tab(EIOCreativeTabs.GEAR) -// .lang("Blank" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_EMPOWERED_1 = REGISTRATE -// .item("dark_steel_upgrade_empowered_1", -// properties -> new DarkSteelUpgradeItem(properties, EmpoweredUpgradeTier.ONE.getActivationCost(), EmpoweredUpgradeTier.ONE.getFactory())) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_EMPOWERED_1.get().addAllVariants(modifier)) -// .lang("Empowered" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_EMPOWERED_2 = REGISTRATE -// .item("dark_steel_upgrade_empowered_2", -// properties -> new DarkSteelUpgradeItem(properties, EmpoweredUpgradeTier.TWO.getActivationCost(), EmpoweredUpgradeTier.TWO.getFactory())) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_EMPOWERED_2.get().addAllVariants(modifier)) -// .lang("Empowered II" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_EMPOWERED_3 = REGISTRATE -// .item("dark_steel_upgrade_empowered_3", -// properties -> new DarkSteelUpgradeItem(properties, EmpoweredUpgradeTier.THREE.getActivationCost(), EmpoweredUpgradeTier.THREE.getFactory())) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_EMPOWERED_3.get().addAllVariants(modifier)) -// .lang("Empowered III" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_EMPOWERED_4 = REGISTRATE -// .item("dark_steel_upgrade_empowered_4", -// properties -> new DarkSteelUpgradeItem(properties, EmpoweredUpgradeTier.FOUR.getActivationCost(), EmpoweredUpgradeTier.FOUR.getFactory())) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_EMPOWERED_4.get().addAllVariants(modifier)) -// .lang("Empowered IV" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_SPOON = REGISTRATE -// .item("dark_steel_upgrade_spoon", -// properties -> new DarkSteelUpgradeItem(properties, BaseConfig.COMMON.DARK_STEEL.SPOON_ACTIVATION_COST, SpoonUpgrade::new)) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_SPOON.get().addAllVariants(modifier)) -// .lang("Spoon" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_FORK = REGISTRATE -// .item("dark_steel_upgrade_fork", -// properties -> new DarkSteelUpgradeItem(properties, BaseConfig.COMMON.DARK_STEEL.FORK_ACTIVATION_COST, ForkUpgrade::new)) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_FORK.get().addAllVariants(modifier)) -// .lang("Fork" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_DIRECT = REGISTRATE -// .item("dark_steel_upgrade_direct", -// properties -> new DarkSteelUpgradeItem(properties, BaseConfig.COMMON.DARK_STEEL.DIRECT_ACTIVATION_COST, DirectUpgrade::new)) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_DIRECT.get().addAllVariants(modifier)) -// .lang("Direct" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_EXPLOSIVE_1 = REGISTRATE -// .item("dark_steel_upgrade_tnt", -// properties -> new DarkSteelUpgradeItem(properties, ExplosiveUpgradeTier.ONE.getActivationCost(), ExplosiveUpgradeTier.ONE.getFactory())) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_EXPLOSIVE_1.get().addAllVariants(modifier)) -// .lang("Explosive I" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_EXPLOSIVE_2 = REGISTRATE -// .item("dark_steel_upgrade_tnt1", -// properties -> new DarkSteelUpgradeItem(properties, ExplosiveUpgradeTier.TWO.getActivationCost(), ExplosiveUpgradeTier.TWO.getFactory())) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_EXPLOSIVE_2.get().addAllVariants(modifier)) -// .lang("Explosive II" + UPGRADE_TEXT) -// .register(); -// -// //TODO: Textures for dark_steel_upgrade_penetration_1 and dark_steel_upgrade_penetration_2 needed -// public static final ItemEntry DARK_STEEL_UPGRADE_EXPLOSIVE_PENETRATION_1 = REGISTRATE -// .item("dark_steel_upgrade_penetration_1", properties -> new DarkSteelUpgradeItem(properties, ExplosivePenetrationUpgradeTier.ONE.getActivationCost(), -// ExplosivePenetrationUpgradeTier.ONE.getFactory())) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_EXPLOSIVE_PENETRATION_1.get().addAllVariants(modifier)) -// .lang("Explosive Penetration I" + UPGRADE_TEXT) -// .register(); -// -// public static final ItemEntry DARK_STEEL_UPGRADE_EXPLOSIVE_PENETRATION_2 = REGISTRATE -// .item("dark_steel_upgrade_penetration_2", properties -> new DarkSteelUpgradeItem(properties, ExplosivePenetrationUpgradeTier.TWO.getActivationCost(), -// ExplosivePenetrationUpgradeTier.TWO.getFactory())) -// .tab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_UPGRADE_EXPLOSIVE_PENETRATION_2.get().addAllVariants(modifier)) -// .lang("Explosive Penetration II" + UPGRADE_TEXT) -// .register(); + .registerItem("dark_steel_sword", DarkSteelSwordItem::new, new Item.Properties().durability(2000)) + .setTab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_SWORD.get().addAllVariants(modifier)) + .setTranslation("The Ender") + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())) + .addItemTags(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_SWORD) + .addItemTags(ItemTags.SWORDS) + .addCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY, ArmoryCapabilities.DARK_STEEL_PROVIDER) + .addCapability(Capabilities.EnergyStorage.ITEM, ArmoryCapabilities.DARK_STEEL_ENERGY_STORAGE_PROVIDER); + + public static final RegiliteItem DARK_STEEL_PICKAXE = ITEM_REGISTRY + .registerItem("dark_steel_pickaxe", DarkSteelPickaxeItem::new, new Item.Properties().durability(2000)) + .setTab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_PICKAXE.get().addAllVariants(modifier)) + .setTranslation("Dark Pickaxe") + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())) + .addItemTags(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_PICKAXE) + .addItemTags(ItemTags.PICKAXES) + .addCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY, ArmoryCapabilities.DARK_STEEL_PROVIDER) + .addCapability(Capabilities.EnergyStorage.ITEM, ArmoryCapabilities.DARK_STEEL_ENERGY_STORAGE_PROVIDER); + + public static final RegiliteItem DARK_STEEL_AXE = ITEM_REGISTRY + .registerItem("dark_steel_axe", DarkSteelAxeItem::new, new Item.Properties().durability(2000)) + .setTab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_AXE.get().addAllVariants(modifier)) + .setTranslation("Dark Axe") + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())) + .addItemTags(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_AXE) + .addItemTags(ItemTags.AXES) + .addCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY, ArmoryCapabilities.DARK_STEEL_PROVIDER) + .addCapability(Capabilities.EnergyStorage.ITEM, ArmoryCapabilities.DARK_STEEL_ENERGY_STORAGE_PROVIDER); + + public static final RegiliteItem DARK_STEEL_HELMET = ITEM_REGISTRY + .registerItem("dark_steel_helmet", DarkSteelHelmetItem::new, new Item.Properties().durability(2000)) + .setTab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_HELMET.get().addAllVariants(modifier)) + .setTranslation("Dark Helmet") + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())) + .addItemTags(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_HELMET) + .addItemTags(ItemTags.HEAD_ARMOR_ENCHANTABLE) + .addCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY, ArmoryCapabilities.DARK_STEEL_PROVIDER) + .addCapability(Capabilities.EnergyStorage.ITEM, ArmoryCapabilities.DARK_STEEL_ENERGY_STORAGE_PROVIDER); + + public static final RegiliteItem DARK_STEEL_CHESTPLATE = ITEM_REGISTRY + .registerItem("dark_steel_chestplate", DarkSteelChestplateItem::new, new Item.Properties().durability(2000)) + .setTab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_CHESTPLATE.get().addAllVariants(modifier)) + .setTranslation("Dark Chestplate") + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())) + .addItemTags(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_CHESTPLATE) + .addItemTags(ItemTags.CHEST_ARMOR_ENCHANTABLE) + .addCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY, ArmoryCapabilities.DARK_STEEL_PROVIDER) + .addCapability(Capabilities.EnergyStorage.ITEM, ArmoryCapabilities.DARK_STEEL_ENERGY_STORAGE_PROVIDER); + + public static final RegiliteItem DARK_STEEL_LEGGINGS = ITEM_REGISTRY + .registerItem("dark_steel_leggings", DarkSteelLeggingsItem::new, new Item.Properties().durability(2000)) + .setTab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_LEGGINGS.get().addAllVariants(modifier)) + .setTranslation("Dark Leggings") + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())) + .addItemTags(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_LEGGINGS) + .addItemTags(ItemTags.LEG_ARMOR_ENCHANTABLE) + .addCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY, ArmoryCapabilities.DARK_STEEL_PROVIDER) + .addCapability(Capabilities.EnergyStorage.ITEM, ArmoryCapabilities.DARK_STEEL_ENERGY_STORAGE_PROVIDER); + + public static final RegiliteItem DARK_STEEL_BOOTS = ITEM_REGISTRY + .registerItem("dark_steel_boots", DarkSteelBootsItem::new, new Item.Properties().durability(2000)) + .setTab(EIOCreativeTabs.GEAR, modifier -> ArmoryItems.DARK_STEEL_BOOTS.get().addAllVariants(modifier)) + .setTranslation("Dark Boots") + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())) + .addItemTags(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_BOOTS) + .addItemTags(ItemTags.FOOT_ARMOR_ENCHANTABLE) + .addCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY, ArmoryCapabilities.DARK_STEEL_PROVIDER) + .addCapability(Capabilities.EnergyStorage.ITEM, ArmoryCapabilities.DARK_STEEL_ENERGY_STORAGE_PROVIDER); + + private static final String UPGRADE_TEXT = " Upgrade"; + + public static final RegiliteItem DARK_STEEL_UPGRADE_BLANK = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_blank", props -> new MaterialItem(props, false)) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Blank" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_EMPOWERED_1 = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_empowered_1", + properties -> new DarkSteelUpgradeItem(properties, EmpoweredUpgradeTier.ONE.getActivationCost(), + EmpoweredUpgradeTier.ONE.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Empowered" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_EMPOWERED_2 = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_empowered_2", + properties -> new DarkSteelUpgradeItem(properties, EmpoweredUpgradeTier.TWO.getActivationCost(), + EmpoweredUpgradeTier.TWO.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Empowered II" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_EMPOWERED_3 = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_empowered_3", + properties -> new DarkSteelUpgradeItem(properties, EmpoweredUpgradeTier.THREE.getActivationCost(), + EmpoweredUpgradeTier.THREE.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Empowered III" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_EMPOWERED_4 = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_empowered_4", + properties -> new DarkSteelUpgradeItem(properties, EmpoweredUpgradeTier.FOUR.getActivationCost(), + EmpoweredUpgradeTier.FOUR.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Empowered IV" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_STEP_ASSIST = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_step_assist", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.STEP_ASSIST_ACTIVATION_COST, + StepAssistUpgrade::new)) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Step Assist" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_SPEED_I = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_speedboost1", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.SPEED_ACTIVATION_COST_I, + SpeedUpgradeTier.ONE.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Speed" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_SPEED_II = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_speedboost2", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.SPEED_ACTIVATION_COST_II, + SpeedUpgradeTier.TWO.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Speed II" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_SPEED_III = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_speedboost3", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.SPEED_ACTIVATION_COST_III, + SpeedUpgradeTier.THREE.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Speed III" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_JUMP_I = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_jump_1", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.JUMP_ACTIVATION_COST_I, + JumpUpgradeTier.ONE.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Jump" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_JUMP_II = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_jump_2", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.JUMP_ACTIVATION_COST_II, + JumpUpgradeTier.TWO.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Jump II" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_GLIDER = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_glider", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.GLIDER_ACTIVATION_COST, + GliderUpgrade::new)) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Glider" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_ELYTRA = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_elytra", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.ELYTRA_ACTIVATION_COST, + ElytraUpgrade::new)) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Elytra" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_SPOON = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_spoon", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.SPOON_ACTIVATION_COST, + SpoonUpgrade::new)) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Spoon" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_FORK = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_fork", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.FORK_ACTIVATION_COST, + ForkUpgrade::new)) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Fork" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_DIRECT = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_direct", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.DIRECT_ACTIVATION_COST, + DirectUpgrade::new)) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Direct" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_TRAVEL = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_travel", + properties -> new DarkSteelUpgradeItem(properties, ArmoryConfig.COMMON.TRAVEL_ACTIVATION_COST, + TravelUpgrade::new)) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Travel" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_EXPLOSIVE_1 = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_tnt", + properties -> new DarkSteelUpgradeItem(properties, ExplosiveUpgradeTier.ONE.getActivationCost(), + ExplosiveUpgradeTier.ONE.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Explosive I" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_EXPLOSIVE_2 = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_tnt2", + properties -> new DarkSteelUpgradeItem(properties, ExplosiveUpgradeTier.TWO.getActivationCost(), + ExplosiveUpgradeTier.TWO.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("Explosive II" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_EXPLOSIVE_PENETRATION_1 = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_penetration_1", + properties -> new DarkSteelUpgradeItem(properties, + ExplosivePenetrationUpgradeTier.ONE.getActivationCost(), + ExplosivePenetrationUpgradeTier.ONE.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("EExplosive Penetration I" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); + + public static final RegiliteItem DARK_STEEL_UPGRADE_EXPLOSIVE_PENETRATION_2 = ITEM_REGISTRY + .registerItem("dark_steel_upgrade_penetration_2", + properties -> new DarkSteelUpgradeItem(properties, + ExplosivePenetrationUpgradeTier.TWO.getActivationCost(), + ExplosivePenetrationUpgradeTier.TWO.getFactory())) + .setTab(EIOCreativeTabs.GEAR) + .setTranslation("EExplosive Penetration II" + UPGRADE_TEXT) + .setModelProvider((prov, ctx) -> prov.handheld(ctx.get())); public static void register(IEventBus bus) { ITEM_REGISTRY.register(bus); diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryNetwork.java b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryNetwork.java new file mode 100644 index 0000000000..b0dab6b44f --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/init/ArmoryNetwork.java @@ -0,0 +1,36 @@ +package com.enderio.armory.common.init; + +import com.enderio.armory.EnderIOArmory; +import com.enderio.armory.common.item.darksteel.upgrades.flight.FlightEnabledPacket; +import com.enderio.armory.common.item.darksteel.upgrades.flight.FlightToggleHandler; +import com.enderio.armory.common.item.darksteel.upgrades.speed.SpeedUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.speed.SpeedUsePowerPacket; +import com.enderio.armory.common.item.darksteel.upgrades.travel.TravelEndabledUpdatePacket; +import com.enderio.armory.common.item.darksteel.upgrades.travel.TravelUpgrade; +import com.enderio.base.api.EnderIO; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; + +@EventBusSubscriber(modid = EnderIOArmory.MODULE_MOD_ID, bus = EventBusSubscriber.Bus.MOD) +public class ArmoryNetwork { + + private static final String PROTOCOL_VERSION = "1.0"; + + @SubscribeEvent + public static void register(final RegisterPayloadHandlersEvent event) { + + final PayloadRegistrar registrar = event.registrar(EnderIO.NAMESPACE).versioned(PROTOCOL_VERSION); + + registrar.playToServer(TravelEndabledUpdatePacket.TYPE, TravelEndabledUpdatePacket.STREAM_CODEC, + TravelUpgrade::handleTravelEnabledPacket); + + registrar.playToServer(SpeedUsePowerPacket.TYPE, SpeedUsePowerPacket.STREAM_CODEC, + SpeedUpgrade::handleEnergyUsePacket); + + registrar.playToServer(FlightEnabledPacket.TYPE, FlightEnabledPacket.STREAM_CODEC, + FlightToggleHandler::handleActivePacket); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/AnvilRecipeHandler.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/AnvilRecipeHandler.java new file mode 100644 index 0000000000..e10c304830 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/AnvilRecipeHandler.java @@ -0,0 +1,41 @@ +package com.enderio.armory.common.item.darksteel; + +import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.init.ArmoryCapabilities; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.event.AnvilUpdateEvent; + +public class AnvilRecipeHandler { + + public static void handleAnvilRecipe(AnvilUpdateEvent event) { + ItemStack left = event.getLeft(); + ItemStack right = event.getRight(); + DarkSteelCapability cap = left.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (cap == null) { + return; + } + Item item = right.getItem(); + if (item instanceof DarkSteelUpgradeItem upItem) { + IDarkSteelUpgrade upgrade = upItem.getUpgrade().get(); + if (!cap.canApplyUpgrade(upgrade)) { + return; + } + int cost = upItem.getLevelsRequired().get(); + + ItemStack result = left.copy(); + cap = result.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (cap == null) { + return; + } + cap.addUpgrade(upgrade); + event.setOutput(result); + event.setCost(cost); + event.setMaterialCost(1); + + } + + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelArmor.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelArmor.java new file mode 100644 index 0000000000..0f9f60d047 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelArmor.java @@ -0,0 +1,32 @@ +package com.enderio.armory.common.item.darksteel; + +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.init.ArmoryArmorMaterials; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +public abstract class DarkSteelArmor extends ArmorItem implements IDarkSteelItem { + + public DarkSteelArmor(Item.Properties properties, Type type) { + super(ArmoryArmorMaterials.DARK_STEEL_ARMOR_MATERIAL, type, properties); + } + + @Override + public void setDamage(final ItemStack stack, final int newDamage) { + super.setDamage(stack, EmpoweredUpgrade.getAdjustedDamage(stack, newDamage)); + } + + @Override + public void addAllVariants(CreativeModeTab.Output modifier) { + modifier.accept(this); + modifier.accept(createFullyUpgradedStack(this)); + } + + public boolean isFoil(ItemStack pStack) { + return DarkSteelCapability.hasUpgrade(pStack, EmpoweredUpgrade.NAME) || super.isFoil(pStack); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelAxeItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelAxeItem.java index 31306717d6..1e9e4d46f5 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelAxeItem.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelAxeItem.java @@ -1,15 +1,23 @@ package com.enderio.armory.common.item.darksteel; +import com.enderio.armory.common.capability.DarkSteelCapability; import com.enderio.armory.common.config.ArmoryConfig; import com.enderio.armory.common.init.ArmoryItems; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; import com.enderio.armory.common.item.darksteel.upgrades.ForkUpgrade; -import com.enderio.armory.common.capability.DarkSteelUpgradeable; +import com.enderio.armory.common.item.darksteel.upgrades.direct.DirectUpgrade; import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.armory.common.tag.ArmoryTags; import com.enderio.core.common.energy.ItemStackEnergy; import com.enderio.core.common.item.CreativeTabVariants; import com.enderio.core.common.util.BlockUtil; import com.enderio.core.common.util.TooltipUtil; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.tags.BlockTags; @@ -27,47 +35,50 @@ import net.neoforged.neoforge.common.ItemAbilities; import net.neoforged.neoforge.common.ItemAbility; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - public class DarkSteelAxeItem extends AxeItem implements IDarkSteelItem, CreativeTabVariants { + static { + DarkSteelUpgradeRegistry.instance() + .registerUpgradesForItem(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_AXE, EmpoweredUpgrade.NAME, + ForkUpgrade.NAME, DirectUpgrade.NAME); + } + public DarkSteelAxeItem(Properties pProperties) { - super(ArmoryItems.DARK_STEEL_TIER, pProperties - .attributes(createAttributes(ArmoryItems.DARK_STEEL_TIER, 5, -3))); + super(ArmoryItems.DARK_STEEL_TIER, + pProperties.attributes(createAttributes(ArmoryItems.DARK_STEEL_TIER, 5, -3))); } @Override public void setDamage(final ItemStack stack, final int newDamage) { - int finalDamage = getEmpoweredUpgrade(stack).map(empoweredUpgrade -> empoweredUpgrade.adjustDamage(getDamage(stack), newDamage)).orElse(newDamage); - super.setDamage(stack, finalDamage); + super.setDamage(stack, EmpoweredUpgrade.getAdjustedDamage(stack, newDamage)); } @Override public float getDestroySpeed(ItemStack pStack, BlockState pState) { final float baseSpeed = super.getDestroySpeed(pStack, pState); - return getEmpoweredUpgrade(pStack).map(empoweredUpgrade -> empoweredUpgrade.adjustDestroySpeed(baseSpeed)).orElse(baseSpeed); + return getEmpoweredUpgrade(pStack) + .map(empoweredUpgrade -> empoweredUpgrade.adjustDestroySpeed(baseSpeed, pStack)) + .orElse(baseSpeed); } @Override - public boolean mineBlock(ItemStack pStack, Level pLevel, BlockState pState, BlockPos pPos, LivingEntity pEntityLiving) { + public boolean mineBlock(ItemStack pStack, Level pLevel, BlockState pState, BlockPos pPos, + LivingEntity pEntityLiving) { if (pEntityLiving instanceof Player player) { - if (pEntityLiving.isCrouching() && pState.is(BlockTags.LOGS) && ItemStackEnergy.getEnergyStored(pStack) > 0) { + if (pEntityLiving.isCrouching() && pState.is(BlockTags.LOGS) + && ItemStackEnergy.getEnergyStored(pStack) > 0) { - int maxSearchSize = 400; //put an upper limit on search size + int maxSearchSize = 400; // put an upper limit on search size Set chopCandidates = new HashSet<>(); collectTreeBlocks(pLevel, pPos, new HashSet<>(), chopCandidates, maxSearchSize, pState.getBlock()); chopCandidates.remove(pPos); // don't double harvest this guy int energyPerBlock = ArmoryConfig.COMMON.DARK_STEEL_AXE_ENERGY_PER_FELLED_LOG.get(); - int maxBlocks = ItemStackEnergy.getEnergyStored(pStack)/energyPerBlock; + int maxBlocks = ItemStackEnergy.getEnergyStored(pStack) / energyPerBlock; Collection toChop = chopCandidates; - if(maxBlocks < chopCandidates.size()) { - //If not enough power to get them all cut top to bottom to avoid floating logs + if (maxBlocks < chopCandidates.size()) { + // If not enough power to get them all cut top to bottom to avoid floating logs List orderedChopList = new ArrayList<>(chopCandidates); orderedChopList.sort((o1, o2) -> Integer.compare(o2.getY(), o1.getY())); toChop = orderedChopList; @@ -79,12 +90,12 @@ public boolean mineBlock(ItemStack pStack, Level pLevel, BlockState pState, Bloc if (BlockUtil.removeBlock(pLevel, player, pStack, chopPos)) { energyUse += energyPerBlock; chopCount++; - if(chopCount >= maxBlocks) { + if (chopCount >= maxBlocks) { break; } } } - if (energyUse > 0) { + if (energyUse > 0) { ItemStackEnergy.extractEnergy(pStack, energyUse, false); } } @@ -92,11 +103,6 @@ public boolean mineBlock(ItemStack pStack, Level pLevel, BlockState pState, Bloc return super.mineBlock(pStack, pLevel, pState, pPos, pEntityLiving); } - @Override - public boolean isCorrectToolForDrops(ItemStack stack, BlockState state) { - return canHarvest(stack, state)/* && TierSortingRegistry.isCorrectTierForDrops(getTier(), state)*/; - } - @Override public InteractionResult useOn(UseOnContext pContext) { if (hasFork(pContext.getItemInHand())) { @@ -107,15 +113,12 @@ public InteractionResult useOn(UseOnContext pContext) { @Override public boolean canPerformAction(ItemStack stack, ItemAbility itemAbility) { - return super.canPerformAction(stack,itemAbility) || (hasFork(stack) && ItemAbilities.DEFAULT_HOE_ACTIONS.contains(itemAbility)); - } - - private boolean canHarvest(ItemStack stack, BlockState state) { - return state.is(BlockTags.MINEABLE_WITH_AXE) || (state.is(BlockTags.MINEABLE_WITH_HOE) && hasFork(stack)); + return super.canPerformAction(stack, itemAbility) + || (hasFork(stack) && ItemAbilities.DEFAULT_HOE_ACTIONS.contains(itemAbility)); } private boolean hasFork(ItemStack stack) { - return DarkSteelUpgradeable.hasUpgrade(stack, ForkUpgrade.NAME); + return DarkSteelCapability.hasUpgrade(stack, ForkUpgrade.NAME); } /** @@ -127,7 +130,8 @@ private boolean hasFork(ItemStack stack) { * @param maxBlocks the maximum number of blocks that can be checked before the recursion ill end * @param targetBock the type of block the tree is made of, e.g. oak log */ - private void collectTreeBlocks(Level level, BlockPos pos, Set checkedPos, Set toChop, int maxBlocks, Block targetBock) { + private void collectTreeBlocks(Level level, BlockPos pos, Set checkedPos, Set toChop, + int maxBlocks, Block targetBock) { if (toChop.size() >= maxBlocks || checkedPos.contains(pos)) { return; } @@ -157,30 +161,25 @@ private void surrounding(Set res, BlockPos pos) { @Override public void addCurrentUpgradeTooltips(ItemStack itemStack, List tooltips, boolean isDetailed) { - if(isDetailed && getEmpoweredUpgrade(itemStack).isPresent()) { - tooltips.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_EFFICIENCY, ArmoryConfig.COMMON.EMPOWERED_EFFICIENCY_BOOST.get())); + if (isDetailed && getEmpoweredUpgrade(itemStack).isPresent()) { + tooltips.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_EFFICIENCY, + ArmoryConfig.COMMON.EMPOWERED_EFFICIENCY_BOOST.get())); } - IDarkSteelItem.super.addCurrentUpgradeTooltips(itemStack, tooltips, isDetailed); } - // region Common for all tools - - @Override - public boolean isFoil(ItemStack pStack) { - return DarkSteelUpgradeable.hasUpgrade(pStack, EmpoweredUpgrade.NAME); - } - @Override public void addAllVariants(CreativeModeTab.Output modifier) { modifier.accept(this); modifier.accept(createFullyUpgradedStack(this)); } - // endregion + // region Common for all tools - @Override - public boolean isBarVisible(ItemStack pStack) { - return isDurabilityBarVisible(pStack); + public boolean isFoil(ItemStack pStack) { + return DarkSteelCapability.hasUpgrade(pStack, EmpoweredUpgrade.NAME) || super.isFoil(pStack); } + + // endregion + } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelBootsItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelBootsItem.java new file mode 100644 index 0000000000..b2f97cb4d5 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelBootsItem.java @@ -0,0 +1,41 @@ +package com.enderio.armory.common.item.darksteel; + +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.JumpUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.StepAssistUpgrade; +import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.armory.common.tag.ArmoryTags; +import com.enderio.core.common.util.TooltipUtil; +import java.util.List; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +public class DarkSteelBootsItem extends DarkSteelArmor { + + static { + DarkSteelUpgradeRegistry.instance() + .registerUpgradesForItem(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_BOOTS, EmpoweredUpgrade.NAME, + StepAssistUpgrade.NAME, JumpUpgrade.NAME); + } + + public DarkSteelBootsItem(Item.Properties properties) { + super(properties, Type.BOOTS); + } + + @Override + public boolean canWalkOnPowderedSnow(ItemStack stack, LivingEntity wearer) { + return DarkSteelCapability.hasUpgrade(stack, EmpoweredUpgrade.NAME); + } + + @Override + public void addCurrentUpgradeTooltips(ItemStack itemStack, List tooltips, boolean isDetailed) { + super.addCurrentUpgradeTooltips(itemStack, tooltips, isDetailed); + if (isDetailed && getEmpoweredUpgrade(itemStack).isPresent()) { + tooltips.add(TooltipUtil.style(ArmoryLang.DS_UPGRADE_BOOTS_SNOW_DESCRIPTION)); + } + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelChestplateItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelChestplateItem.java new file mode 100644 index 0000000000..3a2d93345f --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelChestplateItem.java @@ -0,0 +1,45 @@ +package com.enderio.armory.common.item.darksteel; + +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.init.ArmoryDataComponents; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.flight.ElytraUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.flight.GliderUpgrade; +import com.enderio.armory.common.tag.ArmoryTags; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.gameevent.GameEvent; + +public class DarkSteelChestplateItem extends DarkSteelArmor { + + static { + DarkSteelUpgradeRegistry.instance() + .registerUpgradesForItem(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_CHESTPLATE, EmpoweredUpgrade.NAME, + GliderUpgrade.NAME, ElytraUpgrade.NAME); + } + + public DarkSteelChestplateItem(Properties properties) { + super(properties, Type.CHESTPLATE); + } + + public boolean canElytraFly(ItemStack stack, LivingEntity entity) { + return DarkSteelCapability.hasUpgrade(stack, ElytraUpgrade.NAME) + && stack.getOrDefault(ArmoryDataComponents.DARK_STEEL_FLIGHT_ACTIVE, false); + } + + public boolean elytraFlightTick(ItemStack stack, LivingEntity entity, int flightTicks) { + if (!entity.level().isClientSide) { + int nextFlightTick = flightTicks + 1; + if (nextFlightTick % 10 == 0) { + if (nextFlightTick % 20 == 0) { + stack.hurtAndBreak(1, entity, EquipmentSlot.CHEST); + } + entity.gameEvent(GameEvent.ELYTRA_GLIDE); + } + } + return true; + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelHelmetItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelHelmetItem.java new file mode 100644 index 0000000000..f21b61ce94 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelHelmetItem.java @@ -0,0 +1,19 @@ +package com.enderio.armory.common.item.darksteel; + +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; +import com.enderio.armory.common.tag.ArmoryTags; +import net.minecraft.world.item.Item; + +public class DarkSteelHelmetItem extends DarkSteelArmor { + + static { + DarkSteelUpgradeRegistry.instance() + .registerUpgradesForItem(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_HELMET, EmpoweredUpgrade.NAME); + } + + public DarkSteelHelmetItem(Item.Properties properties) { + super(properties, Type.HELMET); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelLeggingsItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelLeggingsItem.java new file mode 100644 index 0000000000..141a6aed41 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelLeggingsItem.java @@ -0,0 +1,21 @@ +package com.enderio.armory.common.item.darksteel; + +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.speed.SpeedUpgrade; +import com.enderio.armory.common.tag.ArmoryTags; +import net.minecraft.world.item.Item; + +public class DarkSteelLeggingsItem extends DarkSteelArmor { + + static { + DarkSteelUpgradeRegistry.instance() + .registerUpgradesForItem(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_LEGGINGS, EmpoweredUpgrade.NAME, + SpeedUpgrade.NAME); + } + + public DarkSteelLeggingsItem(Item.Properties properties) { + super(properties, Type.LEGGINGS); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelPickaxeItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelPickaxeItem.java index 21914bb80b..e40ba9dade 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelPickaxeItem.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelPickaxeItem.java @@ -1,22 +1,29 @@ package com.enderio.armory.common.item.darksteel; +import com.enderio.armory.common.capability.DarkSteelCapability; import com.enderio.armory.common.config.ArmoryConfig; import com.enderio.armory.common.init.ArmoryItems; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; import com.enderio.armory.common.item.darksteel.upgrades.SpoonUpgrade; -import com.enderio.armory.common.capability.DarkSteelUpgradeable; +import com.enderio.armory.common.item.darksteel.upgrades.direct.DirectUpgrade; import com.enderio.armory.common.item.darksteel.upgrades.explosive.ExplosivePenetrationUpgrade; import com.enderio.armory.common.item.darksteel.upgrades.explosive.ExplosiveUpgrade; import com.enderio.armory.common.item.darksteel.upgrades.explosive.ExplosiveUpgradeHandler; +import com.enderio.armory.common.item.darksteel.upgrades.travel.TravelUpgrade; import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.armory.common.tag.ArmoryTags; import com.enderio.core.common.energy.ItemStackEnergy; import com.enderio.core.common.item.CreativeTabVariants; import com.enderio.core.common.util.TooltipUtil; +import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; -import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -28,11 +35,17 @@ import net.neoforged.neoforge.common.ItemAbilities; import net.neoforged.neoforge.common.ItemAbility; import net.neoforged.neoforge.common.ModConfigSpec; - -import java.util.List; +import org.jetbrains.annotations.Nullable; public class DarkSteelPickaxeItem extends PickaxeItem implements IDarkSteelItem, CreativeTabVariants { + static { + DarkSteelUpgradeRegistry.instance() + .registerUpgradesForItem(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_PICKAXE, EmpoweredUpgrade.NAME, + SpoonUpgrade.NAME, DirectUpgrade.NAME, ExplosiveUpgrade.NAME, ExplosivePenetrationUpgrade.NAME, + TravelUpgrade.NAME); + } + private final ModConfigSpec.ConfigValue obsidianBreakPowerUse = ArmoryConfig.COMMON.DARK_STEEL_PICKAXE_OBSIDIAN_ENERGY_COST; private final ModConfigSpec.ConfigValue speedBoostWhenObsidian = ArmoryConfig.COMMON.DARK_STEEL_PICKAXE_OBSIDIAN_SPEED; @@ -40,20 +53,21 @@ public class DarkSteelPickaxeItem extends PickaxeItem implements IDarkSteelItem, private final ModConfigSpec.ConfigValue useObsidianBreakSpeedAtHardness = ArmoryConfig.COMMON.DARK_STEEL_PICKAXE_AS_OBSIDIAN_AT_HARDNESS; public DarkSteelPickaxeItem(Properties pProperties) { - super(ArmoryItems.DARK_STEEL_TIER, pProperties - .attributes(createAttributes(ArmoryItems.DARK_STEEL_TIER, 1, -2.8F))); + super(ArmoryItems.DARK_STEEL_TIER, + pProperties.attributes(createAttributes(ArmoryItems.DARK_STEEL_TIER, 1, -2.8F))); } @Override public void setDamage(final ItemStack stack, final int newDamage) { - int finalDamage = getEmpoweredUpgrade(stack).map(empoweredUpgrade -> empoweredUpgrade.adjustDamage(getDamage(stack), newDamage)).orElse(newDamage); - super.setDamage(stack, finalDamage); + super.setDamage(stack, EmpoweredUpgrade.getAdjustedDamage(stack, newDamage)); } @Override public float getDestroySpeed(ItemStack pStack, BlockState pState) { final float baseSpeed = super.getDestroySpeed(pStack, pState); - float adjustedSpeed = getEmpoweredUpgrade(pStack).map(empoweredUpgrade -> empoweredUpgrade.adjustDestroySpeed(baseSpeed)).orElse(baseSpeed); + float adjustedSpeed = getEmpoweredUpgrade(pStack) + .map(empoweredUpgrade -> empoweredUpgrade.adjustDestroySpeed(baseSpeed, pStack)) + .orElse(baseSpeed); adjustedSpeed = ExplosiveUpgradeHandler.adjustDestroySpeed(adjustedSpeed, pStack); if (useObsidianMining(pState, pStack)) { adjustedSpeed += speedBoostWhenObsidian.get(); @@ -62,7 +76,8 @@ public float getDestroySpeed(ItemStack pStack, BlockState pState) { } @Override - public boolean mineBlock(ItemStack pStack, Level pLevel, BlockState pState, BlockPos pPos, LivingEntity pEntityLiving) { + public boolean mineBlock(ItemStack pStack, Level pLevel, BlockState pState, BlockPos pPos, + LivingEntity pEntityLiving) { if (useObsidianMining(pState, pStack)) { ItemStackEnergy.extractEnergy(pStack, obsidianBreakPowerUse.get(), false); } @@ -70,44 +85,53 @@ public boolean mineBlock(ItemStack pStack, Level pLevel, BlockState pState, Bloc return super.mineBlock(pStack, pLevel, pState, pPos, pEntityLiving); } - @Override - public boolean isCorrectToolForDrops(ItemStack stack, BlockState state) { - // TODO: 20.6: I think tools need reworking properly. Just making this compile for now. - return canHarvest(stack, state)/* && TierSortingRegistry.isCorrectTierForDrops(getTier(), state)*/; - } - @Override public InteractionResult useOn(UseOnContext pContext) { + @Nullable + InteractionResult res = TravelUpgrade.onUse(pContext, this); + if (res != null) { + return res; + } if (hasSpoon(pContext.getItemInHand())) { return Items.DIAMOND_SHOVEL.useOn(pContext); } return super.useOn(pContext); } + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + @Nullable + InteractionResultHolder res = TravelUpgrade.onUse(level, player, usedHand, this); + if (res != null) { + return res; + } + return super.use(level, player, usedHand); + } + @Override public boolean canPerformAction(ItemStack stack, ItemAbility itemAbility) { - return super.canPerformAction(stack, itemAbility) || (hasSpoon(stack) && ItemAbilities.DEFAULT_SHOVEL_ACTIONS.contains(itemAbility)); + return super.canPerformAction(stack, itemAbility) + || (hasSpoon(stack) && ItemAbilities.DEFAULT_SHOVEL_ACTIONS.contains(itemAbility)); } @Override public void addAllVariants(CreativeModeTab.Output modifier) { modifier.accept(this); - modifier.accept(createFullyUpgradedStack(this)); - //Include a fully upgraded version without explosive upgrades + // Include a fully upgraded version without explosive upgrades ItemStack itemStack = createFullyUpgradedStack(this); - DarkSteelUpgradeable.removeUpgrade(itemStack, ExplosiveUpgrade.NAME); - DarkSteelUpgradeable.removeUpgrade(itemStack, ExplosivePenetrationUpgrade.NAME); + ItemStackEnergy.setFull(itemStack); + DarkSteelCapability.removeUpgrade(itemStack, ExplosiveUpgrade.NAME); + DarkSteelCapability.removeUpgrade(itemStack, ExplosivePenetrationUpgrade.NAME); modifier.accept(itemStack); - } - - private boolean canHarvest(ItemStack stack, BlockState state) { - return state.is(BlockTags.MINEABLE_WITH_PICKAXE) || (state.is(BlockTags.MINEABLE_WITH_SHOVEL) && hasSpoon(stack)); + ItemStack fullyUpgraded = createFullyUpgradedStack(this); + ItemStackEnergy.setFull(fullyUpgraded); + modifier.accept(fullyUpgraded); } private boolean hasSpoon(ItemStack stack) { - return DarkSteelUpgradeable.hasUpgrade(stack, SpoonUpgrade.NAME); + return DarkSteelCapability.hasUpgrade(stack, SpoonUpgrade.NAME); } private boolean useObsidianMining(BlockState pState, ItemStack stack) { @@ -116,14 +140,16 @@ private boolean useObsidianMining(BlockState pState, ItemStack stack) { private boolean treatBlockAsObsidian(BlockState pState) { return pState.getBlock() == Blocks.OBSIDIAN || (useObsidianBreakSpeedAtHardness.get() > 0 - && pState.getBlock().defaultDestroyTime() >= useObsidianBreakSpeedAtHardness.get()); + && pState.getBlock().defaultDestroyTime() >= useObsidianBreakSpeedAtHardness.get()); } @Override public void addCurrentUpgradeTooltips(ItemStack itemStack, List tooltips, boolean isDetailed) { - if(isDetailed && getEmpoweredUpgrade(itemStack).isPresent()) { - tooltips.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_EFFICIENCY, ArmoryConfig.COMMON.EMPOWERED_EFFICIENCY_BOOST.get())); - tooltips.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_OBSIDIAM_EFFICIENCY, speedBoostWhenObsidian.get())); + if (isDetailed && getEmpoweredUpgrade(itemStack).isPresent()) { + tooltips.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_EFFICIENCY, + ArmoryConfig.COMMON.EMPOWERED_EFFICIENCY_BOOST.get())); + tooltips.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_OBSIDIAM_EFFICIENCY, + speedBoostWhenObsidian.get())); } IDarkSteelItem.super.addCurrentUpgradeTooltips(itemStack, tooltips, isDetailed); } @@ -132,13 +158,8 @@ public void addCurrentUpgradeTooltips(ItemStack itemStack, List toolt @Override public boolean isFoil(ItemStack pStack) { - return DarkSteelUpgradeable.hasUpgrade(pStack, EmpoweredUpgrade.NAME); + return DarkSteelCapability.hasUpgrade(pStack, EmpoweredUpgrade.NAME) || super.isFoil(pStack); } // endregion - - @Override - public boolean isBarVisible(ItemStack pStack) { - return isDurabilityBarVisible(pStack); - } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelSwordItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelSwordItem.java index 9b221d4740..5d85c20322 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelSwordItem.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelSwordItem.java @@ -1,90 +1,208 @@ package com.enderio.armory.common.item.darksteel; +import com.enderio.armory.common.capability.DarkSteelCapability; import com.enderio.armory.common.init.ArmoryItems; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.direct.DirectUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.travel.TravelUpgrade; import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.armory.common.tag.ArmoryTags; +import com.enderio.base.api.EnderIO; import com.enderio.base.common.init.EIOBlocks; +import com.enderio.base.common.init.EIODataComponents; import com.enderio.core.client.item.AdvancedTooltipProvider; +import com.enderio.core.common.energy.ItemStackEnergy; import com.enderio.core.common.util.TooltipUtil; +import java.util.List; +import java.util.Optional; import net.minecraft.core.component.DataComponents; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.Containers; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlotGroup; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.monster.EnderMan; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraft.world.item.PlayerHeadItem; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.component.ResolvableProfile; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.neoforged.neoforge.event.ItemAttributeModifierEvent; +import net.neoforged.neoforge.event.entity.EntityTeleportEvent; import org.jetbrains.annotations.Nullable; -import java.util.List; -import java.util.Optional; +public class DarkSteelSwordItem extends SwordItem implements AdvancedTooltipProvider, IDarkSteelItem { + + static { + DarkSteelUpgradeRegistry.instance() + .registerUpgradesForItem(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_SWORD, EmpoweredUpgrade.NAME, + DirectUpgrade.NAME, TravelUpgrade.NAME); + } + + /** + * Stops an Enderman from teleporting is its last damage is from a DarkSteelSword + * @param event may be canceled + */ + public static void onEntityTeleport(EntityTeleportEvent event) { + if (event.getEntity() instanceof EnderMan em) { + if (em.getLastDamageSource() == null || em.getLastDamageSource().getWeaponItem() == null) { + return; + } + if (em.getLastDamageSource().getWeaponItem().is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_SWORD)) { + event.setCanceled(true); + } + } + } + + /** + * Applies the damage and speed bonuses from Empowered Upgrades for a DarkSteelSword + * @param e event + */ + public static void applyAttackModifiers(ItemAttributeModifierEvent e) { + ItemStack stack = e.getItemStack(); + if (!stack.is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_SWORD)) { + return; + } + Optional empUpOpt = DarkSteelCapability.getEmpoweredUpgrade(stack); + if (empUpOpt.isEmpty()) { + return; + } + if (ItemStackEnergy.getEnergyStored(stack) > 0) { + EmpoweredUpgrade empUp = empUpOpt.get(); + e.addModifier(Attributes.ATTACK_DAMAGE, + new AttributeModifier( + ResourceLocation.fromNamespaceAndPath(EnderIO.NAMESPACE, + "the_ender_attack_boost_" + empUp.getLevel()), + empUp.getAttackDamageIncrease(), AttributeModifier.Operation.ADD_VALUE), + EquipmentSlotGroup.MAINHAND); + e.addModifier(Attributes.ATTACK_SPEED, + new AttributeModifier( + ResourceLocation.fromNamespaceAndPath(EnderIO.NAMESPACE, + "the_ender_attack_speed_boost_" + empUp.getLevel()), + empUp.getAttackSpeedIncrease(), AttributeModifier.Operation.ADD_VALUE), + EquipmentSlotGroup.MAINHAND); + } + } -public class DarkSteelSwordItem extends SwordItem implements AdvancedTooltipProvider { public DarkSteelSwordItem(Properties pProperties) { - super(ArmoryItems.DARK_STEEL_TIER, pProperties.attributes(createAttributes(ArmoryItems.DARK_STEEL_TIER, 3, -2.4F))); + super(ArmoryItems.DARK_STEEL_TIER, + pProperties.attributes(createAttributes(ArmoryItems.DARK_STEEL_TIER, 3, -2.4F)) + .component(EIODataComponents.TRAVEL_ITEM, false)); } @Override public boolean hurtEnemy(ItemStack pStack, LivingEntity pTarget, LivingEntity pAttacker) { - if (pTarget.isDeadOrDying() && pTarget.level().random.nextFloat() < 0.07) { + + Optional empUp = DarkSteelCapability.getEmpoweredUpgrade(pStack); + if (empUp.isEmpty() || ItemStackEnergy.getEnergyStored(pStack) <= 0) { + return super.hurtEnemy(pStack, pTarget, pAttacker); + } + + if (pTarget.isDeadOrDying() && Math.random() < empUp.get().getMobHeadChance()) { Optional skull = getSkull(pTarget); - skull.ifPresent( - itemStack -> Containers.dropItemStack(pAttacker.level(), pAttacker.position().x, pAttacker.position().y, pAttacker.position().z, itemStack)); + skull.ifPresent(itemStack -> Containers.dropItemStack(pAttacker.level(), pAttacker.position().x, + pAttacker.position().y, pAttacker.position().z, itemStack)); } return super.hurtEnemy(pStack, pTarget, pAttacker); } - //TODO Quick and dirty. Not using instanceof cause of possible mod oddities - public static Optional getSkull(LivingEntity pTarget) { + @Override + public void setDamage(final ItemStack stack, final int newDamage) { + super.setDamage(stack, EmpoweredUpgrade.getAdjustedDamage(stack, newDamage)); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + @Nullable + InteractionResultHolder res = TravelUpgrade.onUse(level, player, usedHand, this); + if (res != null) { + return res; + } + return super.use(level, player, usedHand); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + @Nullable + InteractionResult res = TravelUpgrade.onUse(context, this); + if (res != null) { + return res; + } + return super.useOn(context); + } + + private static Optional getSkull(LivingEntity pTarget) { if (pTarget.getType() == EntityType.SKELETON || pTarget.getType() == EntityType.STRAY) { return Optional.of(new ItemStack(Items.SKELETON_SKULL)); } - - if (pTarget.getType() == EntityType.ZOMBIE || pTarget.getType() == EntityType.DROWNED || pTarget.getType() == EntityType.HUSK - || pTarget.getType() == EntityType.ZOMBIE_VILLAGER) { + if (pTarget.getType() == EntityType.ZOMBIE || pTarget.getType() == EntityType.DROWNED + || pTarget.getType() == EntityType.HUSK || pTarget.getType() == EntityType.ZOMBIE_VILLAGER) { return Optional.of(new ItemStack(Items.ZOMBIE_HEAD)); } - if (pTarget.getType() == EntityType.WITHER_SKELETON) { return Optional.of(new ItemStack(Items.WITHER_SKELETON_SKULL)); } - if (pTarget.getType() == EntityType.CREEPER) { return Optional.of(new ItemStack(Items.CREEPER_HEAD)); } - if (pTarget.getType() == EntityType.ENDER_DRAGON) { return Optional.of(new ItemStack(Items.DRAGON_HEAD)); } - if (pTarget.getType() == EntityType.ENDERMAN) { return Optional.of(new ItemStack(EIOBlocks.ENDERMAN_HEAD)); } - - if (pTarget.getType() == EntityType.PIGLIN || pTarget.getType() == EntityType.PIGLIN_BRUTE || pTarget.getType() == EntityType.ZOMBIFIED_PIGLIN) { + if (pTarget.getType() == EntityType.PIGLIN || pTarget.getType() == EntityType.PIGLIN_BRUTE + || pTarget.getType() == EntityType.ZOMBIFIED_PIGLIN) { return Optional.of(new ItemStack(Items.PIGLIN_HEAD)); } - if (pTarget instanceof Player player) { ItemStack stack = new ItemStack(Items.PLAYER_HEAD); stack.set(DataComponents.PROFILE, new ResolvableProfile(player.getGameProfile())); return Optional.of(stack); } - return Optional.empty(); } - //TODO remove when doing tools @Override public void addCommonTooltips(ItemStack itemStack, @Nullable Player player, List tooltips) { - tooltips.add(Component.literal("This item is currently only used to get mob heads")); + if (DarkSteelCapability.getEmpoweredUpgrade(itemStack).isEmpty()) { + tooltips.add(TooltipUtil.style(ArmoryLang.ENDER_HEAD_DROP_INFO)); + } } @Override public void addDetailedTooltips(ItemStack itemStack, @Nullable Player player, List tooltips) { - tooltips.add(TooltipUtil.withArgs(ArmoryLang.HEAD_DROP_CHANCE, 7)); + Optional empUp = DarkSteelCapability.getEmpoweredUpgrade(itemStack); + empUp.ifPresent(empoweredUpgrade -> tooltips.add(TooltipUtil.withArgs(ArmoryLang.ENDER_HEAD_DROP_CHANCE, + (int) Math.round(empoweredUpgrade.getMobHeadChance() * 100)))); + empUp.ifPresent(empoweredUpgrade -> tooltips.add(TooltipUtil.style(ArmoryLang.ENDER_BLOCK_TELEPORT))); + addDurabilityTooltips(itemStack, tooltips); + addCurrentUpgradeTooltips(itemStack, tooltips, true); + addAvailableUpgradesTooltips(itemStack, tooltips); } + + @Override + public void addAllVariants(CreativeModeTab.Output modifier) { + modifier.accept(this); + + ItemStack fullyUpgraded = createFullyUpgradedStack(this); + ItemStackEnergy.setFull(fullyUpgraded); + modifier.accept(fullyUpgraded); + } + + @Override + public boolean isFoil(ItemStack pStack) { + return DarkSteelCapability.hasUpgrade(pStack, EmpoweredUpgrade.NAME) || super.isFoil(pStack); + } + } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelUpgradeItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelUpgradeItem.java index f4aa762348..da63086111 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelUpgradeItem.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/DarkSteelUpgradeItem.java @@ -1,37 +1,71 @@ package com.enderio.armory.common.item.darksteel; import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.init.ArmoryDataComponents; import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; import com.enderio.armory.common.lang.ArmoryLang; import com.enderio.core.client.item.AdvancedTooltipProvider; import com.enderio.core.common.item.CreativeTabVariants; import com.enderio.core.common.util.TooltipUtil; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Supplier; import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; +import net.minecraft.world.item.component.CustomData; import net.neoforged.neoforge.common.ModConfigSpec; import org.jetbrains.annotations.Nullable; -import java.util.Collection; -import java.util.List; -import java.util.Random; -import java.util.function.Supplier; - public class DarkSteelUpgradeItem extends Item implements AdvancedTooltipProvider, CreativeTabVariants { + public static void writeUpgradeToItemStack(ItemStack stack, IDarkSteelUpgrade upgrade) { + CustomData rootNBT = stack.getOrDefault(ArmoryDataComponents.DARK_STEEL_UPGRADE, + CustomData.of(new CompoundTag())); + CompoundTag rootTag = rootNBT.copyTag(); + rootTag.putString("name", upgrade.getName()); + rootTag.put("data", upgrade.serializeNBT()); + stack.set(ArmoryDataComponents.DARK_STEEL_UPGRADE, CustomData.of(rootTag)); + } + + public static Optional readUpgradeFromStack(ItemStack stack) { + if (stack.isEmpty() || !stack.has(ArmoryDataComponents.DARK_STEEL_UPGRADE)) { + return Optional.empty(); + } + @Nullable + CustomData upgradeData = stack.get(ArmoryDataComponents.DARK_STEEL_UPGRADE); + if (upgradeData == null) { + return Optional.empty(); + } + CompoundTag rootTag = upgradeData.copyTag(); + String serName = rootTag.getString("name"); + final Optional upgrade = DarkSteelUpgradeRegistry.instance().createUpgrade(serName); + return upgrade.map(up -> { + up.deserializeNBT(Objects.requireNonNull(rootTag.get("data"))); + return upgrade; + }).orElse(Optional.empty()); + } + private final ModConfigSpec.ConfigValue levelsRequired; + public Supplier getUpgrade() { + return upgrade; + } + + public ModConfigSpec.ConfigValue getLevelsRequired() { + return levelsRequired; + } + private final Supplier upgrade; - public DarkSteelUpgradeItem(Properties pProperties, ModConfigSpec.ConfigValue levelsRequired, Supplier upgrade) { + public DarkSteelUpgradeItem(Properties pProperties, ModConfigSpec.ConfigValue levelsRequired, + Supplier upgrade) { super(pProperties.stacksTo(1)); this.levelsRequired = levelsRequired; this.upgrade = upgrade; @@ -47,27 +81,51 @@ public void addAllVariants(CreativeModeTab.Output modifier) { modifier.accept(this); ItemStack is = new ItemStack(this); - DarkSteelUpgradeRegistry.instance().writeUpgradeToItemStack(is, upgrade.get()); + writeUpgradeToItemStack(is, upgrade.get()); modifier.accept(is); } - @Override - public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) { - ItemStack stack = pPlayer.getItemInHand(pUsedHand); - if (!DarkSteelUpgradeRegistry.instance().hasUpgrade(stack)) { - if (pPlayer.experienceLevel >= levelsRequired.get() || pPlayer.isCreative()) { - if (!pPlayer.isCreative()) { - pPlayer.giveExperienceLevels(-levelsRequired.get()); - } - DarkSteelUpgradeRegistry.instance().writeUpgradeToItemStack(stack, upgrade.get()); - pLevel.playSound(pPlayer, pPlayer.getOnPos(), SoundEvents.ENCHANTMENT_TABLE_USE, SoundSource.BLOCKS, 1.0F, new Random().nextFloat() * 0.1F + 0.9F); - } else if (pLevel.isClientSide){ - pPlayer.sendSystemMessage(ArmoryLang.DS_UPGRADE_ITEM_NO_XP); - } - return InteractionResultHolder.consume(stack); - } - return super.use(pLevel, pPlayer, pUsedHand); - } +// @Override +// public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) { +// ItemStack stack = pPlayer.getItemInHand(pUsedHand); +// @Nullable +// DarkSteelCapability cap = pPlayer.getItemInHand(InteractionHand.OFF_HAND) +// .getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); +// if (cap != null) { +// if (isAlreadyInstalled(cap)) { +// // TODO: Just for testing +// cap.removeUpgrade(upgrade.get().getName()); +// } else if (cap.canApplyUpgrade(upgrade.get())) { +// if (pPlayer.experienceLevel >= levelsRequired.get() || pPlayer.isCreative()) { +// if (!pPlayer.isCreative()) { +// pPlayer.giveExperienceLevels(-levelsRequired.get()); +// } +// cap.addUpgrade(upgrade.get()); +// stack.setCount(0); +// pLevel.playSound(pPlayer, pPlayer.getOnPos(), SoundEvents.ENCHANTMENT_TABLE_USE, SoundSource.BLOCKS, +// 1.0F, new Random().nextFloat() * 0.1F + 0.9F); +// return InteractionResultHolder.consume(stack); +// } else if (pLevel.isClientSide) { +// pPlayer.sendSystemMessage(ArmoryLang.DS_UPGRADE_ITEM_NO_XP); +// } +// } else if (pLevel.isClientSide) { +// pPlayer.sendSystemMessage(ArmoryLang.DS_UPGRADE_ITEM_INVALID_UPGRADE); +// } +// } else if (pLevel.isClientSide) { +// pPlayer.sendSystemMessage(ArmoryLang.DS_UPGRADE_ITEM_NO_TARGET); +// } +// return super.use(pLevel, pPlayer, pUsedHand); +// } +// +// private boolean isAlreadyInstalled(@NotNull DarkSteelCapability cap) { +// Optional opt = cap.getUpgrade(upgrade.get().getName()); +// if (opt.isEmpty()) { +// return false; +// } +// int installedTier = opt.map(up -> up.getTier().map(IUpgradeTier::getLevel).orElse(0)).orElse(0); +// int myTier = upgrade.get().getTier().map(IUpgradeTier::getLevel).orElse(0); +// return myTier == installedTier; +// } @Override public void addDetailedTooltips(ItemStack itemStack, @Nullable Player player, List tooltips) { @@ -76,7 +134,8 @@ public void addDetailedTooltips(ItemStack itemStack, @Nullable Player player, Li tooltips.add(component.copy().withStyle(ChatFormatting.GRAY)); } if (!DarkSteelUpgradeRegistry.instance().hasUpgrade(itemStack)) { - tooltips.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_XP_COST, levelsRequired.get()).withStyle(ChatFormatting.DARK_PURPLE)); + tooltips.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_XP_COST, levelsRequired.get()) + .withStyle(ChatFormatting.DARK_PURPLE)); tooltips.add(ArmoryLang.DS_UPGRADE_ACTIVATE.copy().withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC)); } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/IDarkSteelItem.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/IDarkSteelItem.java index f72ea806eb..33fc2ffb6e 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/IDarkSteelItem.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/IDarkSteelItem.java @@ -1,7 +1,7 @@ package com.enderio.armory.common.item.darksteel; import com.enderio.armory.api.capability.IDarkSteelUpgrade; -import com.enderio.armory.common.capability.DarkSteelUpgradeable; +import com.enderio.armory.common.capability.DarkSteelCapability; import com.enderio.armory.common.item.darksteel.upgrades.EmpoweredUpgrade; import com.enderio.armory.common.lang.ArmoryLang; import com.enderio.base.common.lang.EIOLang; @@ -9,6 +9,10 @@ import com.enderio.core.common.energy.ItemStackEnergy; import com.enderio.core.common.item.CreativeTabVariants; import com.enderio.core.common.util.TooltipUtil; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; @@ -16,37 +20,28 @@ import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; -import java.util.Optional; - public interface IDarkSteelItem extends AdvancedTooltipProvider, CreativeTabVariants { default Optional getEmpoweredUpgrade(ItemStack stack) { - return DarkSteelUpgradeable.getUpgradeAs(stack, EmpoweredUpgrade.NAME, EmpoweredUpgrade.class); + return DarkSteelCapability.getUpgradeAs(stack, EmpoweredUpgrade.NAME, EmpoweredUpgrade.class); } default ItemStack createFullyUpgradedStack(Item item) { ItemStack is = new ItemStack(item); - Collection ups = DarkSteelUpgradeable.getAllPossibleUpgrades(is); - for(IDarkSteelUpgrade upgrade : ups) { + Collection ups = DarkSteelCapability.getAllPossibleUpgrades(is); + for (IDarkSteelUpgrade upgrade : ups) { IDarkSteelUpgrade maxTier = upgrade; Optional nextTier = maxTier.getNextTier(); - while(nextTier.isPresent()) { + while (nextTier.isPresent()) { maxTier = nextTier.get(); nextTier = maxTier.getNextTier(); } - DarkSteelUpgradeable.addUpgrade(is,maxTier); + DarkSteelCapability.addUpgrade(is, maxTier); } ItemStackEnergy.setFull(is); return is; } - @Override - default void addCommonTooltips(ItemStack itemStack, @Nullable Player player, List tooltips) { - } - @Override default void addBasicTooltips(ItemStack itemStack, @Nullable Player player, List tooltips) { addCurrentUpgradeTooltips(itemStack, tooltips, false); @@ -59,35 +54,35 @@ default void addDetailedTooltips(ItemStack itemStack, @Nullable Player player, L addAvailableUpgradesTooltips(itemStack, tooltips); } - default void addDurabilityTooltips(ItemStack itemStack, List tooltips) { + default void addDurabilityTooltips(ItemStack itemStack, List tooltips) { if (itemStack.isDamageableItem()) { - String durability = (itemStack.getMaxDamage() - itemStack.getDamageValue()) + "/" + itemStack.getMaxDamage(); + String durability = (itemStack.getMaxDamage() - itemStack.getDamageValue()) + "/" + + itemStack.getMaxDamage(); tooltips.add(TooltipUtil.withArgs(ArmoryLang.DURABILITY_AMOUNT, durability).withStyle(ChatFormatting.GRAY)); } - if (DarkSteelUpgradeable.hasUpgrade(itemStack, EmpoweredUpgrade.NAME)) { - String energy = String.format("%,d", ItemStackEnergy.getEnergyStored(itemStack)) + "/" + - String.format("%,d", ItemStackEnergy.getMaxEnergyStored(itemStack)); + if (DarkSteelCapability.hasUpgrade(itemStack, EmpoweredUpgrade.NAME)) { + String energy = String.format("%,d", ItemStackEnergy.getEnergyStored(itemStack)) + "/" + + String.format("%,d", ItemStackEnergy.getMaxEnergyStored(itemStack)); tooltips.add(TooltipUtil.withArgs(EIOLang.ENERGY_AMOUNT, energy).withStyle(ChatFormatting.GRAY)); } } - default void addCurrentUpgradeTooltips(ItemStack itemStack, List tooltips, boolean isDetailed) { - var upgrades = DarkSteelUpgradeable.getUpgrades(itemStack); - upgrades - .stream() - .sorted(Comparator.comparing(IDarkSteelUpgrade::getName)) - .forEach(upgrade -> tooltips.add(1, upgrade.getDisplayName().copy().withStyle(ChatFormatting.DARK_AQUA))); + default void addCurrentUpgradeTooltips(ItemStack itemStack, List tooltips, boolean isDetailed) { + var upgrades = DarkSteelCapability.getUpgrades(itemStack); + upgrades.stream() + .sorted(Comparator.comparing(IDarkSteelUpgrade::getName)) + .forEach(upgrade -> tooltips.add(1, + upgrade.getDisplayName().copy().withStyle(ChatFormatting.DARK_AQUA))); } default void addAvailableUpgradesTooltips(ItemStack itemStack, List tooltips) { - var availUpgrades = DarkSteelUpgradeable.getUpgradesApplicable(itemStack); - if(!availUpgrades.isEmpty()) { + var availUpgrades = DarkSteelCapability.getUpgradesApplicable(itemStack); + if (!availUpgrades.isEmpty()) { tooltips.add(ArmoryLang.DS_UPGRADE_AVAILABLE.copy().withStyle(ChatFormatting.YELLOW)); - availUpgrades - .stream() - .sorted(Comparator.comparing(IDarkSteelUpgrade::getName)) - .forEach(upgrade -> tooltips.add( - Component.literal(" " + upgrade.getDisplayName().getString()).withStyle(ChatFormatting.DARK_AQUA, ChatFormatting.ITALIC))); + availUpgrades.stream() + .sorted(Comparator.comparing(IDarkSteelUpgrade::getName)) + .forEach(upgrade -> tooltips.add(Component.literal(" " + upgrade.getDisplayName().getString()) + .withStyle(ChatFormatting.DARK_AQUA, ChatFormatting.ITALIC))); } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/DarkSteelUpgradeRecipe.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/DarkSteelUpgradeRecipe.java index 23fa4ccea6..b59344c371 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/DarkSteelUpgradeRecipe.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/DarkSteelUpgradeRecipe.java @@ -1,23 +1,16 @@ package com.enderio.armory.common.item.darksteel.upgrades; -import com.enderio.armory.api.capability.IDarkSteelUpgradable; import com.enderio.armory.api.capability.IDarkSteelUpgrade; -import com.enderio.armory.common.capability.DarkSteelUpgradeable; +import com.enderio.armory.common.capability.DarkSteelCapability; import com.enderio.armory.common.init.ArmoryCapabilities; import com.enderio.armory.common.init.ArmoryRecipes; -import com.enderio.base.common.init.EIOCapabilities; +import com.enderio.armory.common.item.darksteel.DarkSteelUpgradeItem; import com.enderio.base.common.init.EIOItems; -import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; -import io.netty.buffer.ByteBuf; +import java.util.Optional; import net.minecraft.core.HolderLookup; -import net.minecraft.core.RegistryAccess; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.codec.StreamDecoder; -import net.minecraft.network.codec.StreamEncoder; -import net.minecraft.world.Container; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; @@ -26,9 +19,6 @@ import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; -import java.util.Map; -import java.util.Optional; - // TODO: Change this into a anvil recipe. public class DarkSteelUpgradeRecipe extends SmithingTransformRecipe { public DarkSteelUpgradeRecipe() { @@ -42,12 +32,12 @@ public boolean isSpecial() { @Override public boolean isTemplateIngredient(ItemStack pItemStack) { - return DarkSteelUpgradeRegistry.instance().readUpgradeFromStack(pItemStack).isPresent(); + return DarkSteelUpgradeItem.readUpgradeFromStack(pItemStack).isPresent(); } @Override public boolean isBaseIngredient(ItemStack pItemStack) { - return pItemStack.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM) != null; + return pItemStack.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY) != null; } @Override @@ -64,7 +54,8 @@ public boolean matches(SmithingRecipeInput recipeInput, Level pLevel) { // Check the upgrade can be applied to this item. Optional upgrade = getUpgradeFromItem(recipeInput.getItem(0)); - IDarkSteelUpgradable target = getUpgradableFromItem(recipeInput.getItem(1)); + @Nullable + DarkSteelCapability target = getUpgradableFromItem(recipeInput.getItem(1)); if (target != null) { return upgrade.map(target::canApplyUpgrade).orElse(false); } @@ -76,20 +67,21 @@ public ItemStack assemble(SmithingRecipeInput recipeInput, HolderLookup.Provider Optional upgrade = getUpgradeFromItem(recipeInput.getItem(0)); ItemStack resultItem = recipeInput.getItem(1).copy(); - IDarkSteelUpgradable target = getUpgradableFromItem(resultItem); + @Nullable + DarkSteelCapability target = getUpgradableFromItem(resultItem); if (target != null) { - return upgrade.map(up -> DarkSteelUpgradeable.addUpgrade(resultItem, up)).orElse(ItemStack.EMPTY); + return upgrade.map(up -> DarkSteelCapability.addUpgrade(resultItem, up)).orElse(ItemStack.EMPTY); } return ItemStack.EMPTY; } @Nullable - private IDarkSteelUpgradable getUpgradableFromItem(ItemStack item) { - return item.getCapability(ArmoryCapabilities.DarkSteelUpgradable.ITEM); + private DarkSteelCapability getUpgradableFromItem(ItemStack item) { + return item.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); } private Optional getUpgradeFromItem(ItemStack item) { - return DarkSteelUpgradeRegistry.instance().readUpgradeFromStack(item); + return DarkSteelUpgradeItem.readUpgradeFromStack(item); } @Override @@ -104,9 +96,9 @@ public RecipeSerializer getSerializer() { public static class Serializer implements RecipeSerializer { public static final MapCodec CODEC = MapCodec.unit(new DarkSteelUpgradeRecipe()); - public static final StreamCodec STREAM_CODEC = StreamCodec.of( - (p_320158_, p_320396_) -> {}, - p_320376_ -> new DarkSteelUpgradeRecipe()); + public static final StreamCodec STREAM_CODEC = StreamCodec + .of((p_320158_, p_320396_) -> { + }, p_320376_ -> new DarkSteelUpgradeRecipe()); @Override public MapCodec codec() { diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/DarkSteelUpgradeRegistry.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/DarkSteelUpgradeRegistry.java index e8604e3623..aece2e9dde 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/DarkSteelUpgradeRegistry.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/DarkSteelUpgradeRegistry.java @@ -1,9 +1,14 @@ package com.enderio.armory.common.item.darksteel.upgrades; import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.init.ArmoryDataComponents; import com.enderio.armory.common.item.darksteel.upgrades.direct.DirectUpgrade; import com.enderio.armory.common.item.darksteel.upgrades.explosive.ExplosivePenetrationUpgrade; import com.enderio.armory.common.item.darksteel.upgrades.explosive.ExplosiveUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.flight.ElytraUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.flight.GliderUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.speed.SpeedUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.travel.TravelUpgrade; import com.enderio.base.api.EnderIO; import java.util.Collections; import java.util.HashMap; @@ -13,7 +18,8 @@ import java.util.Set; import java.util.function.Supplier; import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; public final class DarkSteelUpgradeRegistry { @@ -21,15 +27,20 @@ public final class DarkSteelUpgradeRegistry { public static final String UPGRADE_PREFIX = EnderIO.NAMESPACE + ".darksteel.upgrade."; private static final DarkSteelUpgradeRegistry INST = new DarkSteelUpgradeRegistry(); - private static final String UPGRADE_IN_STACK_KEY = "dark_steel_upgrade"; static { - INST.registerUpgrade(EmpoweredUpgrade.NAME, EmpoweredUpgrade::new); - INST.registerUpgrade(SpoonUpgrade.NAME, SpoonUpgrade::new); - INST.registerUpgrade(ForkUpgrade.NAME, ForkUpgrade::new); - INST.registerUpgrade(DirectUpgrade.NAME, DirectUpgrade::new); - INST.registerUpgrade(ExplosiveUpgrade.NAME, ExplosiveUpgrade::new); - INST.registerUpgrade(ExplosivePenetrationUpgrade.NAME, ExplosivePenetrationUpgrade::new); + INST.registerUpgrade(EmpoweredUpgrade::new); + INST.registerUpgrade(SpoonUpgrade::new); + INST.registerUpgrade(ForkUpgrade::new); + INST.registerUpgrade(DirectUpgrade::new); + INST.registerUpgrade(ExplosiveUpgrade::new); + INST.registerUpgrade(ExplosivePenetrationUpgrade::new); + INST.registerUpgrade(TravelUpgrade::new); + INST.registerUpgrade(StepAssistUpgrade::new); + INST.registerUpgrade(SpeedUpgrade::new); + INST.registerUpgrade(JumpUpgrade::new); + INST.registerUpgrade(GliderUpgrade::new); + INST.registerUpgrade(ElytraUpgrade::new); } public static DarkSteelUpgradeRegistry instance() { @@ -38,15 +49,13 @@ public static DarkSteelUpgradeRegistry instance() { private final Map> registeredUpgrades = new HashMap<>(); - private final Map> possibleUpgrades = new HashMap<>(); + private final Map, Set> possibleUpgrades = new HashMap<>(); private DarkSteelUpgradeRegistry() { } - // region Upgrade register - - public void registerUpgrade(String upgradeName, Supplier upgrade) { - registeredUpgrades.put(upgradeName, upgrade); + public void registerUpgrade(Supplier upgrade) { + registeredUpgrades.put(upgrade.get().getName(), upgrade); } public Optional createUpgrade(String name) { @@ -56,57 +65,35 @@ public Optional createUpgrade(String name) { } return Optional.of(val.get()); } - // endregion - - // region Read / Write of Upgrades to ItemStacks - // TODO: NEO-PORT: Rewrite upgrades. - - public void writeUpgradeToItemStack(ItemStack stack, IDarkSteelUpgrade upgrade) { - CompoundTag rootTag = new CompoundTag(); - rootTag.putString("name", upgrade.getName()); - // rootTag.put("data", upgrade.serializeNBT(lookupProvider)); - // stack.getOrCreateTag().put(UPGRADE_IN_STACK_KEY, rootTag); + @javax.annotation.Nullable + public IDarkSteelUpgrade loadUpgrade(String name, CompoundTag data) { + Optional upgrade = createUpgrade(name); + if (upgrade.isPresent()) { + upgrade.get().deserializeNBT(data); + return upgrade.get(); + } + return null; } public boolean hasUpgrade(ItemStack stack) { -// if(stack.isEmpty() || !stack.hasTag()) { -// return false; -// } -// return stack.getOrCreateTag().contains(UPGRADE_IN_STACK_KEY); - return false; + return !stack.isEmpty() && stack.has(ArmoryDataComponents.DARK_STEEL_UPGRADE); } - public Optional readUpgradeFromStack(ItemStack stack) { -// if(stack.isEmpty() || !stack.hasTag()) { -// return Optional.empty(); -// } -// Tag upTag = stack.getOrCreateTag().get(UPGRADE_IN_STACK_KEY); -// if(upTag instanceof CompoundTag rootTag) { -// String serName = rootTag.getString("name"); -// final Optional upgrade = createUpgrade(serName); -// return upgrade.map(up -> { -// up.deserializeNBT(Objects.requireNonNull(rootTag.get("data"))); -// return upgrade; -// }).orElse(Optional.empty()); -// } - return Optional.empty(); - } - - // endregion - - // region Upgrade Sets (the set of upgrades that can be applied to an upgradable - // item - - public void addUpgradesForItem(ResourceLocation forItem, String... upgrades) { + public void registerUpgradesForItem(TagKey forItem, String... upgrades) { Set currentValues = possibleUpgrades.getOrDefault(forItem, new HashSet<>()); Collections.addAll(currentValues, upgrades); possibleUpgrades.put(forItem, currentValues); } - public Set getUpgradesForItem(ResourceLocation forItem) { - return Collections.unmodifiableSet(possibleUpgrades.getOrDefault(forItem, Collections.emptySet())); + public Set getUpgradesForItem(ItemStack stack) { + Set result = new HashSet<>(); + possibleUpgrades.forEach((tag, value) -> { + if (stack.is(tag)) { + result.addAll(value); + } + }); + return Collections.unmodifiableSet(result); } - // endregion } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/EmpoweredUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/EmpoweredUpgrade.java index 33f237e377..612510231e 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/EmpoweredUpgrade.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/EmpoweredUpgrade.java @@ -1,26 +1,29 @@ package com.enderio.armory.common.item.darksteel.upgrades; +import com.enderio.armory.common.capability.DarkSteelCapability; import com.enderio.armory.common.config.ArmoryConfig; import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.core.common.energy.ItemStackEnergy; import com.enderio.core.common.util.TooltipUtil; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; -import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.common.ModConfigSpec; -import net.neoforged.neoforge.energy.EnergyStorage; -import org.jetbrains.annotations.Nullable; - import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.Random; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.common.ModConfigSpec; public class EmpoweredUpgrade extends TieredUpgrade { + public static int getAdjustedDamage(ItemStack stack, int newDamage) { + return DarkSteelCapability.getUpgradeAs(stack, EmpoweredUpgrade.NAME, EmpoweredUpgrade.class) + .map(empoweredUpgrade -> empoweredUpgrade.adjustDamage(stack.getItem().getDamage(stack), newDamage, + stack)) + .orElse(newDamage); + } + public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "empowered"; - public static final String STORAGE_KEY = "storage"; private static final Random RANDOM = new Random(); @@ -28,45 +31,63 @@ public class EmpoweredUpgrade extends TieredUpgrade { private final ModConfigSpec.ConfigValue powerUsePerDamagePoint = ArmoryConfig.COMMON.EMPOWERED_ENERGY_PER_DAMAGE; - @Nullable - private EnergyStorage storage; - public EmpoweredUpgrade() { this(EmpoweredUpgradeTier.ONE); } public EmpoweredUpgrade(EmpoweredUpgradeTier tier) { super(tier, NAME); - storage = null; } - public float adjustDestroySpeed(float speed) { - if (getStorage().getEnergyStored() > 0) { + public float adjustDestroySpeed(float speed, ItemStack pStack) { + if (ItemStackEnergy.getEnergyStored(pStack) > 0) { speed += speedBoostWhenPowered.get(); } return speed; } - public int adjustDamage(int oldDamage, int newDamage) { + public int adjustDamage(int oldDamage, int newDamage, ItemStack pStack) { int damageTaken = newDamage - oldDamage; - if (damageTaken > 0 && getStorage().getEnergyStored() > 0 && RANDOM.nextDouble() < tier.getDamageAbsorptionChance()) { - getStorage().extractEnergy(damageTaken * powerUsePerDamagePoint.get(), false); + if (damageTaken > 0 && ItemStackEnergy.getEnergyStored(pStack) > 0 + && RANDOM.nextDouble() < tier.getDamageAbsorptionChance()) { + ItemStackEnergy.extractEnergy(pStack, damageTaken * powerUsePerDamagePoint.get(), false); return oldDamage; } return newDamage; } - public EnergyStorage getStorage() { - return storage != null ? storage : new EnergyStorage(tier.getMaxStorage()); + public int getMaxEnergyStored() { + return tier.getMaxStorage(); + } + + public int getMaxEnergyTransfer() { + return tier.getMaxStorage(); } + public int getAttackDamageIncrease() { + return tier.getAttackDamageIncrease(); + } + + public double getAttackSpeedIncrease() { + return tier.getAttackSpeedIncrease(); + } + + public int getLevel() { + return tier.getLevel(); + } + + public double getMobHeadChance() { + return tier.getMobHeadChance(); + } @Override public Collection getDescription() { List result = new ArrayList<>(); result.add(ArmoryLang.DS_UPGRADE_EMPOWERED_DESCRIPTION); - result.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_STORAGE, String.format("%,d", tier.getMaxStorage()))); - result.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_DAMAGE_ABSORPTION, (int)(tier.getDamageAbsorptionChance() * 100))); + result.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_STORAGE, + String.format("%,d", tier.getMaxStorage()))); + result.add(TooltipUtil.withArgs(ArmoryLang.DS_UPGRADE_EMPOWERED_DAMAGE_ABSORPTION, + (int) (tier.getDamageAbsorptionChance() * 100))); return result; } @@ -83,19 +104,4 @@ protected Optional getTier(int tier) { return Optional.of(EmpoweredUpgradeTier.values()[tier]); } - @Override - public CompoundTag serializeNBT(HolderLookup.Provider lookupProvider) { - CompoundTag nbt = super.serializeNBT(lookupProvider); - nbt.put(STORAGE_KEY, getStorage().serializeNBT(lookupProvider)); - return nbt; - } - - @Override - public void deserializeNBT(HolderLookup.Provider lookupProvider, Tag tag) { - super.deserializeNBT(lookupProvider, tag); - if (tag instanceof CompoundTag nbt) { - storage = new EnergyStorage(tier.getMaxStorage()); - storage.deserializeNBT(lookupProvider, nbt.get(STORAGE_KEY)); - } - } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/EmpoweredUpgradeTier.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/EmpoweredUpgradeTier.java index 84e2e7ba2e..67964dd852 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/EmpoweredUpgradeTier.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/EmpoweredUpgradeTier.java @@ -3,41 +3,49 @@ import com.enderio.armory.api.capability.IDarkSteelUpgrade; import com.enderio.armory.common.config.ArmoryConfig; import com.enderio.armory.common.lang.ArmoryLang; +import java.util.function.Supplier; import net.minecraft.network.chat.Component; import net.neoforged.neoforge.common.ModConfigSpec; -import java.util.function.Supplier; - public enum EmpoweredUpgradeTier implements IUpgradeTier { - ONE(ArmoryConfig.COMMON.EMPOWERED_MAX_ENERGY_I, - ArmoryConfig.COMMON.EMPOWERED_DAMAGE_ABSORPTION_CHANCE_I, - ArmoryConfig.COMMON.EMPOWERED_ACTIVATION_COST_I, - ArmoryLang.DS_UPGRADE_EMPOWERED_I), - TWO(ArmoryConfig.COMMON.EMPOWERED_MAX_ENERGY_II, - ArmoryConfig.COMMON.EMPOWERED_DAMAGE_ABSORPTION_CHANCE_II, - ArmoryConfig.COMMON.EMPOWERED_ACTIVATION_COST_II, - ArmoryLang.DS_UPGRADE_EMPOWERED_II), - THREE(ArmoryConfig.COMMON.EMPOWERED_MAX_ENERGY_III, - ArmoryConfig.COMMON.EMPOWERED_DAMAGE_ABSORPTION_CHANCE_III, - ArmoryConfig.COMMON.EMPOWERED_ACTIVATION_COST_III, - ArmoryLang.DS_UPGRADE_EMPOWERED_III), - FOUR(ArmoryConfig.COMMON.EMPOWERED_MAX_ENERGY_IV, - ArmoryConfig.COMMON.EMPOWERED_DAMAGE_ABSORPTION_CHANCE_IV, - ArmoryConfig.COMMON.EMPOWERED_ACTIVATION_COST_IV, - ArmoryLang.DS_UPGRADE_EMPOWERED_IV); + ONE(ArmoryConfig.COMMON.EMPOWERED_MAX_ENERGY_I, ArmoryConfig.COMMON.EMPOWERED_DAMAGE_ABSORPTION_CHANCE_I, + ArmoryConfig.COMMON.EMPOWERED_ATTACK_DAMAGE_INCREASE_I, + ArmoryConfig.COMMON.EMPOWERED_ATTACK_SPEED_INCREASE_I, ArmoryConfig.COMMON.EMPOWERED_MOB_HEAD_CHANCE_I, + ArmoryConfig.COMMON.EMPOWERED_ACTIVATION_COST_I, ArmoryLang.DS_UPGRADE_EMPOWERED_I), + TWO(ArmoryConfig.COMMON.EMPOWERED_MAX_ENERGY_II, ArmoryConfig.COMMON.EMPOWERED_DAMAGE_ABSORPTION_CHANCE_II, + ArmoryConfig.COMMON.EMPOWERED_ATTACK_DAMAGE_INCREASE_II, + ArmoryConfig.COMMON.EMPOWERED_ATTACK_SPEED_INCREASE_II, ArmoryConfig.COMMON.EMPOWERED_MOB_HEAD_CHANCE_II, + ArmoryConfig.COMMON.EMPOWERED_ACTIVATION_COST_II, ArmoryLang.DS_UPGRADE_EMPOWERED_II), + THREE(ArmoryConfig.COMMON.EMPOWERED_MAX_ENERGY_III, ArmoryConfig.COMMON.EMPOWERED_DAMAGE_ABSORPTION_CHANCE_III, + ArmoryConfig.COMMON.EMPOWERED_ATTACK_DAMAGE_INCREASE_III, + ArmoryConfig.COMMON.EMPOWERED_ATTACK_SPEED_INCREASE_III, ArmoryConfig.COMMON.EMPOWERED_MOB_HEAD_CHANCE_III, + ArmoryConfig.COMMON.EMPOWERED_ACTIVATION_COST_III, ArmoryLang.DS_UPGRADE_EMPOWERED_III), + FOUR(ArmoryConfig.COMMON.EMPOWERED_MAX_ENERGY_IV, ArmoryConfig.COMMON.EMPOWERED_DAMAGE_ABSORPTION_CHANCE_IV, + ArmoryConfig.COMMON.EMPOWERED_ATTACK_DAMAGE_INCREASE_IV, + ArmoryConfig.COMMON.EMPOWERED_ATTACK_SPEED_INCREASE_IV, ArmoryConfig.COMMON.EMPOWERED_MOB_HEAD_CHANCE_IV, + ArmoryConfig.COMMON.EMPOWERED_ACTIVATION_COST_IV, ArmoryLang.DS_UPGRADE_EMPOWERED_IV); private final Supplier factory; private final ModConfigSpec.ConfigValue maxStorage; private final ModConfigSpec.ConfigValue damageAbsorptionChance; private final ModConfigSpec.ConfigValue activationCost; + private final ModConfigSpec.ConfigValue attackDamageIncrease; + private final ModConfigSpec.ConfigValue attackSpeedIncrease; + private final ModConfigSpec.ConfigValue mobHeadChance; private final Component displayName; - EmpoweredUpgradeTier(ModConfigSpec.ConfigValue maxStorage, ModConfigSpec.ConfigValue damageAbsorptionChance, - ModConfigSpec.ConfigValue activationCost, Component displayName) { + EmpoweredUpgradeTier(ModConfigSpec.ConfigValue maxStorage, + ModConfigSpec.ConfigValue damageAbsorptionChance, + ModConfigSpec.ConfigValue attackDamageIncrease, + ModConfigSpec.ConfigValue attackSpeedIncrease, ModConfigSpec.ConfigValue mobHeadChance, + ModConfigSpec.ConfigValue activationCost, Component displayName) { this.maxStorage = maxStorage; this.damageAbsorptionChance = damageAbsorptionChance; this.activationCost = activationCost; + this.attackDamageIncrease = attackDamageIncrease; + this.attackSpeedIncrease = attackSpeedIncrease; + this.mobHeadChance = mobHeadChance; this.displayName = displayName; factory = () -> new EmpoweredUpgrade(this); } @@ -50,6 +58,14 @@ public float getDamageAbsorptionChance() { return damageAbsorptionChance.get().floatValue(); } + public int getAttackDamageIncrease() { + return attackDamageIncrease.get(); + } + + public double getAttackSpeedIncrease() { + return attackSpeedIncrease.get(); + } + public Supplier getFactory() { return factory; } @@ -66,4 +82,8 @@ public ModConfigSpec.ConfigValue getActivationCost() { public Component getDisplayName() { return displayName; } + + public double getMobHeadChance() { + return mobHeadChance.get(); + } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/ForkUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/ForkUpgrade.java index bf7efda242..3f95d7e7af 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/ForkUpgrade.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/ForkUpgrade.java @@ -1,18 +1,22 @@ package com.enderio.armory.common.item.darksteel.upgrades; import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.init.ArmoryItems; import com.enderio.armory.common.lang.ArmoryLang; -import net.minecraft.network.chat.Component; - +import java.util.ArrayList; import java.util.Collection; import java.util.List; +import net.minecraft.core.component.DataComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.Tool; public class ForkUpgrade implements IDarkSteelUpgrade { public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "fork"; - public static ForkUpgrade create() { - return new ForkUpgrade(); + public ForkUpgrade() { } @Override @@ -29,4 +33,29 @@ public Component getDisplayName() { public Collection getDescription() { return List.of(ArmoryLang.DS_UPGRADE_FORK_DESCRIPTION); } + + public void onAddedToItem(ItemStack stack) { + Tool tool = stack.get(DataComponents.TOOL); + if (tool == null) { + tool = ArmoryItems.DARK_STEEL_TIER.createToolProperties(BlockTags.MINEABLE_WITH_HOE); + stack.set(DataComponents.TOOL, tool); + } else { + List newRules = new ArrayList<>(tool.rules()); + newRules.add(Tool.Rule.minesAndDrops(BlockTags.MINEABLE_WITH_HOE, ArmoryItems.DARK_STEEL_TIER.getSpeed())); + stack.set(DataComponents.TOOL, new Tool(newRules, tool.defaultMiningSpeed(), tool.damagePerBlock())); + } + } + + public void onRemovedFromItem(ItemStack stack) { + Tool tool = stack.get(DataComponents.TOOL); + if (tool == null) { + return; + } + Tool.Rule toRemove = Tool.Rule.minesAndDrops(BlockTags.MINEABLE_WITH_HOE, + ArmoryItems.DARK_STEEL_TIER.getSpeed()); + List newRules = new ArrayList<>(tool.rules()); + newRules.remove(toRemove); + stack.set(DataComponents.TOOL, new Tool(newRules, tool.defaultMiningSpeed(), tool.damagePerBlock())); + } + } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/JumpUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/JumpUpgrade.java new file mode 100644 index 0000000000..7c4707c2ec --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/JumpUpgrade.java @@ -0,0 +1,100 @@ +package com.enderio.armory.common.item.darksteel.upgrades; + +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.config.ArmoryConfig; +import com.enderio.armory.common.init.ArmoryCapabilities; +import com.enderio.armory.common.init.ArmoryDataComponents; +import com.enderio.armory.common.item.darksteel.upgrades.flight.ElytraUpgrade; +import com.enderio.armory.common.tag.ArmoryTags; +import com.enderio.core.common.energy.ItemStackEnergy; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.client.event.MovementInputUpdateEvent; +import net.neoforged.neoforge.common.ModConfigSpec; +import org.jetbrains.annotations.Nullable; + +public class JumpUpgrade extends TieredUpgrade { + + public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "jump"; + + private final ModConfigSpec.ConfigValue energyUse = ArmoryConfig.COMMON.JUMP_ENERGY_USE; + + public JumpUpgrade() { + this(JumpUpgradeTier.ONE); + } + + public JumpUpgrade(JumpUpgradeTier tier) { + super(tier, NAME); + } + + public int getNumJumps() { + return tier.getNumJumps().get(); + } + + public int getEnergyUse() { + return energyUse.get(); + } + + @Override + public Collection getDescription() { + return List.of(tier.getDescription()); + } + + @Override + protected JumpUpgradeTier getBaseTier() { + return JumpUpgradeTier.ONE; + } + + @Override + protected Optional getTier(int tier) { + if (tier >= JumpUpgradeTier.values().length || tier < 0) { + return Optional.empty(); + } + return Optional.of(JumpUpgradeTier.values()[tier]); + } + + private static int jumpCount = 0; + private static boolean wasJumping = false; + + public static void doExtraJumps(MovementInputUpdateEvent evt) { + Player player = evt.getEntity(); + ItemStack boots = player.getItemBySlot(EquipmentSlot.FEET); + if (!boots.is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_BOOTS)) { + return; + } + @Nullable + DarkSteelCapability cap = boots.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (cap == null) { + return; + } + Optional jumpUp = cap.getUpgradeAs(JumpUpgrade.NAME, JumpUpgrade.class); + if (jumpUp.isEmpty()) { + return; + } + // disable when elytra upgrade is enabled or the elytra won't work + ItemStack chest = player.getItemBySlot(EquipmentSlot.CHEST); + if (DarkSteelCapability.hasUpgrade(chest, ElytraUpgrade.NAME) + && chest.getOrDefault(ArmoryDataComponents.DARK_STEEL_FLIGHT_ACTIVE, false)) { + return; + } + + if (evt.getInput().jumping && jumpCount < jumpUp.get().getNumJumps() && !wasJumping + && ItemStackEnergy.getEnergyStored(boots) > 0) { + if (!evt.getEntity().onGround()) { + ItemStackEnergy.extractEnergy(boots, jumpUp.get().getEnergyUse(), false); + } + evt.getEntity().setOnGround(true); + jumpCount++; + } else if (evt.getEntity().onGround()) { + jumpCount = 0; + } + // Make sure we only get the first input. Holding space will produce multiple + // calls with jumping = true + wasJumping = evt.getInput().jumping; + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/JumpUpgradeTier.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/JumpUpgradeTier.java new file mode 100644 index 0000000000..17669b4ef1 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/JumpUpgradeTier.java @@ -0,0 +1,58 @@ +package com.enderio.armory.common.item.darksteel.upgrades; + +import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.config.ArmoryConfig; +import com.enderio.armory.common.lang.ArmoryLang; +import java.util.function.Supplier; +import net.minecraft.network.chat.Component; +import net.neoforged.neoforge.common.ModConfigSpec; + +public enum JumpUpgradeTier implements IUpgradeTier { + ONE(ArmoryConfig.COMMON.JUMP_COUNT_I, ArmoryConfig.COMMON.JUMP_ACTIVATION_COST_I, ArmoryLang.DS_UPGRADE_JUMP_I, + ArmoryLang.DS_UPGRADE_JUMP_I_DESCRIPTION), + TWO(ArmoryConfig.COMMON.JUMP_COUNT_II, ArmoryConfig.COMMON.JUMP_ACTIVATION_COST_II, ArmoryLang.DS_UPGRADE_JUMP_II, + ArmoryLang.DS_UPGRADE_JUMP_II_DESCRIPTION); + + private final Supplier factory; + private final ModConfigSpec.ConfigValue numJumps; + private final ModConfigSpec.ConfigValue activationCost; + private final Component displayName; + private final Component description; + + JumpUpgradeTier(ModConfigSpec.ConfigValue numJumps, ModConfigSpec.ConfigValue activationCost, + Component displayName, Component description) { + this.numJumps = numJumps; + this.activationCost = activationCost; + this.displayName = displayName; + this.description = description; + factory = () -> new JumpUpgrade(this); + } + + public ModConfigSpec.ConfigValue getNumJumps() { + return numJumps; + } + + @Override + public Supplier getFactory() { + return factory; + } + + @Override + public int getLevel() { + return ordinal(); + } + + @Override + public Component getDisplayName() { + return displayName; + } + + @Override + public ModConfigSpec.ConfigValue getActivationCost() { + return activationCost; + } + + public Component getDescription() { + return description; + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/SpoonUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/SpoonUpgrade.java index 58487135f5..550cbaaf0f 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/SpoonUpgrade.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/SpoonUpgrade.java @@ -1,20 +1,21 @@ package com.enderio.armory.common.item.darksteel.upgrades; import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.init.ArmoryItems; import com.enderio.armory.common.lang.ArmoryLang; -import net.minecraft.network.chat.Component; - +import java.util.ArrayList; import java.util.Collection; import java.util.List; +import net.minecraft.core.component.DataComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.Tool; public class SpoonUpgrade implements IDarkSteelUpgrade { public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "spoon"; - public static SpoonUpgrade create() { - return new SpoonUpgrade(); - } - @Override public String getName() { return NAME; @@ -29,4 +30,30 @@ public Component getDisplayName() { public Collection getDescription() { return List.of(ArmoryLang.DS_UPGRADE_SPOON_DESCRIPTION); } + + public void onAddedToItem(ItemStack stack) { + Tool tool = stack.get(DataComponents.TOOL); + if (tool == null) { + tool = ArmoryItems.DARK_STEEL_TIER.createToolProperties(BlockTags.MINEABLE_WITH_SHOVEL); + stack.set(DataComponents.TOOL, tool); + } else { + List newRules = new ArrayList<>(tool.rules()); + newRules.add( + Tool.Rule.minesAndDrops(BlockTags.MINEABLE_WITH_SHOVEL, ArmoryItems.DARK_STEEL_TIER.getSpeed())); + stack.set(DataComponents.TOOL, new Tool(newRules, tool.defaultMiningSpeed(), tool.damagePerBlock())); + } + } + + public void onRemovedFromItem(ItemStack stack) { + Tool tool = stack.get(DataComponents.TOOL); + if (tool == null) { + return; + } + Tool.Rule toRemove = Tool.Rule.minesAndDrops(BlockTags.MINEABLE_WITH_SHOVEL, + ArmoryItems.DARK_STEEL_TIER.getSpeed()); + List newRules = new ArrayList<>(tool.rules()); + newRules.remove(toRemove); + stack.set(DataComponents.TOOL, new Tool(newRules, tool.defaultMiningSpeed(), tool.damagePerBlock())); + } + } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/StepAssistUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/StepAssistUpgrade.java new file mode 100644 index 0000000000..710e580420 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/StepAssistUpgrade.java @@ -0,0 +1,53 @@ +package com.enderio.armory.common.item.darksteel.upgrades; + +import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.armory.common.tag.ArmoryTags; +import com.enderio.base.api.EnderIO; +import com.enderio.core.common.energy.ItemStackEnergy; +import java.util.Collection; +import java.util.List; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlotGroup; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.event.ItemAttributeModifierEvent; + +public class StepAssistUpgrade implements IDarkSteelUpgrade { + + public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "step_assist"; + + private static final AttributeModifier ATTRIBUTE_MODIFIER = new AttributeModifier( + ResourceLocation.fromNamespaceAndPath(EnderIO.NAMESPACE, "step_assist_upgrade"), 1, + AttributeModifier.Operation.ADD_VALUE); + + @Override + public String getName() { + return NAME; + } + + @Override + public Component getDisplayName() { + return ArmoryLang.DS_UPGRADE_STEP_ASSIST; + } + + @Override + public Collection getDescription() { + return List.of(ArmoryLang.DS_UPGRADE_STEP_ASSIST_DESCRIPTION); + } + + public static void applyStepHeightModifiers(ItemAttributeModifierEvent e) { + ItemStack stack = e.getItemStack(); + if (!stack.is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_BOOTS) + || !DarkSteelCapability.hasUpgrade(stack, StepAssistUpgrade.NAME)) { + return; + } + if (ItemStackEnergy.getEnergyStored(stack) > 0) { + e.addModifier(Attributes.STEP_HEIGHT, ATTRIBUTE_MODIFIER, EquipmentSlotGroup.FEET); + } + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/TieredUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/TieredUpgrade.java index 2512251d66..a9fdd2f358 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/TieredUpgrade.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/TieredUpgrade.java @@ -1,13 +1,11 @@ package com.enderio.armory.common.item.darksteel.upgrades; import com.enderio.armory.api.capability.IDarkSteelUpgrade; -import net.minecraft.core.HolderLookup; +import java.util.Optional; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; -import java.util.Optional; - public abstract class TieredUpgrade implements IDarkSteelUpgrade { public static final String TIER_KEY = "tier"; @@ -16,8 +14,8 @@ public abstract class TieredUpgrade implements IDarkStee private final String serializedName; protected TieredUpgrade(T tier, String serializedName) { - this.tier = tier; - this.serializedName = serializedName; + this.tier = tier; + this.serializedName = serializedName; } @Override @@ -30,6 +28,11 @@ public Optional getNextTier() { return getUpgradeForTier(tier.getLevel() + 1); } + @Override + public Optional getTier() { + return Optional.of(tier); + } + @Override public boolean isValidUpgrade(IDarkSteelUpgrade upgrade) { if (getName().equals(upgrade.getName()) && upgrade instanceof TieredUpgrade up) { @@ -49,14 +52,14 @@ public Component getDisplayName() { } @Override - public CompoundTag serializeNBT(HolderLookup.Provider lookupProvider) { + public CompoundTag serializeNBT() { CompoundTag nbt = new CompoundTag(); nbt.putInt(TIER_KEY, tier.getLevel()); return nbt; } @Override - public void deserializeNBT(HolderLookup.Provider lookupProvider, Tag tag) { + public void deserializeNBT(Tag tag) { if (tag instanceof CompoundTag nbt) { int level = nbt.getInt(TIER_KEY); tier = getTier(level).orElse(getBaseTier()); diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/direct/DirectUpgradeLootCondition.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/direct/DirectUpgradeLootCondition.java index 3dd54e6c0b..cd7d3b81f1 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/direct/DirectUpgradeLootCondition.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/direct/DirectUpgradeLootCondition.java @@ -1,9 +1,11 @@ package com.enderio.armory.common.item.darksteel.upgrades.direct; +import com.enderio.armory.common.capability.DarkSteelCapability; import com.enderio.base.api.integration.IntegrationManager; -import com.enderio.armory.common.capability.DarkSteelUpgradeable; import com.mojang.serialization.MapCodec; +import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; @@ -22,12 +24,18 @@ public LootItemConditionType getType() { @Override public boolean test(LootContext context) { - if(!context.hasParam(LootContextParams.TOOL) || !context.hasParam(LootContextParams.THIS_ENTITY)) { + if (context.hasParam(LootContextParams.DAMAGE_SOURCE) && context.hasParam(LootContextParams.ATTACKING_ENTITY) + && context.getParam(LootContextParams.ATTACKING_ENTITY) instanceof Player) { + DamageSource damageSource = context.getParam(LootContextParams.DAMAGE_SOURCE); + ItemStack weapon = damageSource.getWeaponItem(); + return weapon != null && DarkSteelCapability.hasUpgrade(weapon, DirectUpgrade.NAME); + } else if (!context.hasParam(LootContextParams.TOOL) || !context.hasParam(LootContextParams.THIS_ENTITY)) { return false; } - return (DarkSteelUpgradeable.hasUpgrade(context.getParam(LootContextParams.TOOL), DirectUpgrade.NAME) - || IntegrationManager.anyMatch(integration -> integration.canMineWithDirect(context.getParam(LootContextParams.TOOL)))) - && context.getParam(LootContextParams.THIS_ENTITY) instanceof Player; + return (DarkSteelCapability.hasUpgrade(context.getParam(LootContextParams.TOOL), DirectUpgrade.NAME) + || IntegrationManager.anyMatch( + integration -> integration.canMineWithDirect(context.getParam(LootContextParams.TOOL)))) + && context.getParam(LootContextParams.THIS_ENTITY) instanceof Player; } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/direct/DirectUpgradeLootModifier.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/direct/DirectUpgradeLootModifier.java index ca5aa9c4ad..95e5b231a9 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/direct/DirectUpgradeLootModifier.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/direct/DirectUpgradeLootModifier.java @@ -13,8 +13,8 @@ public class DirectUpgradeLootModifier extends LootModifier { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( - inst -> codecStart(inst).apply(inst, DirectUpgradeLootModifier::new)); + public static final MapCodec CODEC = RecordCodecBuilder + .mapCodec(inst -> codecStart(inst).apply(inst, DirectUpgradeLootModifier::new)); public DirectUpgradeLootModifier(LootItemCondition[] conditionsIn) { super(conditionsIn); @@ -22,10 +22,16 @@ public DirectUpgradeLootModifier(LootItemCondition[] conditionsIn) { @Override protected ObjectArrayList doApply(ObjectArrayList generatedLoot, LootContext context) { - if (context.getParam(LootContextParams.THIS_ENTITY) instanceof Player player) { + Player player = null; + if (context.getParam(LootContextParams.THIS_ENTITY) instanceof Player pl) { + player = pl; + } else if (context.getParam(LootContextParams.ATTACKING_ENTITY) instanceof Player pl) { + player = pl; + } + if (player != null) { ObjectArrayList remaining = new ObjectArrayList<>(); for (ItemStack is : generatedLoot) { - if(!player.addItem(is)) { + if (!player.addItem(is)) { remaining.add(is); } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/explosive/ExplosiveUpgradeHandler.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/explosive/ExplosiveUpgradeHandler.java index 73e57eb29f..9e5f852d59 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/explosive/ExplosiveUpgradeHandler.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/explosive/ExplosiveUpgradeHandler.java @@ -1,6 +1,6 @@ package com.enderio.armory.common.item.darksteel.upgrades.explosive; -import com.enderio.armory.common.capability.DarkSteelUpgradeable; +import com.enderio.armory.common.capability.DarkSteelCapability; import com.enderio.armory.common.config.ArmoryConfig; import com.enderio.armory.common.item.darksteel.upgrades.SpoonUpgrade; import com.enderio.armory.common.tag.ArmoryTags; @@ -9,6 +9,9 @@ import com.enderio.core.common.util.BlockUtil; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; @@ -28,7 +31,6 @@ import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; -import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; @@ -39,7 +41,6 @@ import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.fml.common.Mod; import net.neoforged.neoforge.client.event.RenderHighlightEvent; import net.neoforged.neoforge.common.ModConfigSpec; import net.neoforged.neoforge.network.PacketDistributor; @@ -47,10 +48,6 @@ import org.joml.Vector3d; import org.joml.Vector4f; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - @EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME) public class ExplosiveUpgradeHandler { @@ -59,14 +56,13 @@ public class ExplosiveUpgradeHandler { private static final Random RAND = new Random(); public static boolean hasExplosiveUpgrades(ItemStack stack) { - return DarkSteelUpgradeable.hasUpgrade(stack, ExplosiveUpgrade.NAME) || DarkSteelUpgradeable.hasUpgrade(stack, ExplosivePenetrationUpgrade.NAME); + return DarkSteelCapability.hasUpgrade(stack, ExplosiveUpgrade.NAME) + || DarkSteelCapability.hasUpgrade(stack, ExplosivePenetrationUpgrade.NAME); } public static void onMineBlock(ItemStack pStack, Level pLevel, BlockPos pPos, LivingEntity pEntityLiving) { - if (pEntityLiving instanceof Player player && - !player.isCrouching() && - hasExplosiveUpgrades(pStack) && - ItemStackEnergy.getEnergyStored(pStack) > 0) { + if (pEntityLiving instanceof Player player && !player.isCrouching() && hasExplosiveUpgrades(pStack) + && ItemStackEnergy.getEnergyStored(pStack) > 0) { BlockHitResult hit = Item.getPlayerPOVHitResult(pLevel, player, ClipContext.Fluid.NONE); if (pPos.equals(hit.getBlockPos())) { @@ -80,12 +76,13 @@ public static void onMineBlock(ItemStack pStack, Level pLevel, BlockPos pPos, Li } } - private static boolean explodeArea(ItemStack pStack, Level pLevel, Player player, BlockHitResult hit, EmitParticlesPacket particles) { + private static boolean explodeArea(ItemStack pStack, Level pLevel, Player player, BlockHitResult hit, + EmitParticlesPacket particles) { boolean didExplode = false; AABB bb = calculateMiningArea(pStack, hit.getDirection()); bb = bb.move(hit.getBlockPos()); - for (BlockPos minePos : BlockPos.betweenClosed((int) bb.minX, (int) bb.minY, (int) bb.minZ, - (int) bb.maxX - 1, (int) bb.maxY - 1, (int) bb.maxZ - 1)) { + for (BlockPos minePos : BlockPos.betweenClosed((int) bb.minX, (int) bb.minY, (int) bb.minZ, (int) bb.maxX - 1, + (int) bb.maxY - 1, (int) bb.maxZ - 1)) { if (!hit.getBlockPos().equals(minePos)) { didExplode = explodeBlock(pStack, pLevel, minePos, player, particles) || didExplode; } @@ -93,7 +90,8 @@ private static boolean explodeArea(ItemStack pStack, Level pLevel, Player player return didExplode; } - private static boolean explodeBlock(ItemStack itemStack, Level level, BlockPos minePos, Player player, EmitParticlesPacket particles) { + private static boolean explodeBlock(ItemStack itemStack, Level level, BlockPos minePos, Player player, + EmitParticlesPacket particles) { if (!level.isInWorldBounds(minePos) || ItemStackEnergy.getEnergyStored(itemStack) <= 0) { return false; } @@ -102,7 +100,7 @@ private static boolean explodeBlock(ItemStack itemStack, Level level, BlockPos m return false; } if (BlockUtil.removeBlock(level, player, itemStack, minePos)) { - ItemStackEnergy.extractEnergy(itemStack, EXPLOSIVE_BREAK_POWER_USE.get(),false); + ItemStackEnergy.extractEnergy(itemStack, EXPLOSIVE_BREAK_POWER_USE.get(), false); if (RAND.nextFloat() < .3f) { particles.add(minePos, ParticleTypes.LARGE_SMOKE); } else if (RAND.nextFloat() < .7f) { @@ -117,24 +115,22 @@ private static boolean canExplode(ItemStack itemStack, BlockState blockState, @N if (blockState.is(ArmoryTags.Blocks.DARK_STEEL_EXPLODABLE_ALLOW_LIST)) { return true; } - if (blockState.is(ArmoryTags.Blocks.DARK_STEEL_EXPLODABLE_DENY_LIST) || blockEntity != null) { return false; } - - // TODO: 20.6: tool rework - //return Items.STONE_PICKAXE.isCorrectToolForDrops(blockState) || - // (DarkSteelUpgradeable.hasUpgrade(itemStack, SpoonUpgrade.NAME) && Items.STONE_SHOVEL.isCorrectToolForDrops(blockState)); - return false; + return Items.STONE_PICKAXE.isCorrectToolForDrops(new ItemStack(Items.STONE_PICKAXE), blockState) + || ((DarkSteelCapability.hasUpgrade(itemStack, SpoonUpgrade.NAME) + && Items.STONE_SHOVEL.isCorrectToolForDrops(new ItemStack(Items.STONE_SHOVEL), blockState))); } public static float adjustDestroySpeed(float inputSpeed, ItemStack pStack) { if (hasExplosiveUpgrades(pStack) && ItemStackEnergy.getEnergyStored(pStack) > 0) { - //ramp slowdown until half speed is reached with Explosive II and Penetration II + // ramp slowdown until half speed is reached with Explosive II and Penetration + // II float maxReductionRatio = 0.5f; float areaAtMaxReduction = 5 * 5 * 3; AABB bounds = calculateMiningArea(pStack, Direction.NORTH); - float miningArea = (float)(bounds.getXsize() * bounds.getYsize() * bounds.getZsize()); + float miningArea = (float) (bounds.getXsize() * bounds.getYsize() * bounds.getZsize()); float adjustBy = (miningArea / areaAtMaxReduction) * maxReductionRatio; adjustBy = Math.min(adjustBy, maxReductionRatio); return inputSpeed - (inputSpeed * adjustBy); @@ -143,42 +139,40 @@ public static float adjustDestroySpeed(float inputSpeed, ItemStack pStack) { } private static AABB calculateMiningArea(ItemStack tool, Direction targetDir) { - AABB miningBounds = new AABB(0,0,0,1,1,1); + AABB miningBounds = new AABB(0, 0, 0, 1, 1, 1); - int radius = DarkSteelUpgradeable - .getUpgradeAs(tool, ExplosiveUpgrade.NAME, ExplosiveUpgrade.class) - .map(ExplosiveUpgrade::getMagnitude) - .orElse(0); + int radius = DarkSteelCapability.getUpgradeAs(tool, ExplosiveUpgrade.NAME, ExplosiveUpgrade.class) + .map(ExplosiveUpgrade::getMagnitude) + .orElse(0); if (radius > 0) { - Vector3d mask = new Vector3d( - targetDir.getStepX() == 0 ? radius : 0, - targetDir.getStepY() == 0 ? radius : 0, - targetDir.getStepZ() == 0 ? radius : 0); + Vector3d mask = new Vector3d(targetDir.getStepX() == 0 ? radius : 0, targetDir.getStepY() == 0 ? radius : 0, + targetDir.getStepZ() == 0 ? radius : 0); miningBounds = miningBounds.expandTowards(mask.x, mask.y, mask.z); miningBounds = miningBounds.expandTowards(-mask.x, -mask.y, -mask.z); } - int penetration = DarkSteelUpgradeable - .getUpgradeAs(tool, ExplosivePenetrationUpgrade.NAME, ExplosivePenetrationUpgrade.class) - .map(ExplosivePenetrationUpgrade::getMagnitude) - .orElse(0); + int penetration = DarkSteelCapability + .getUpgradeAs(tool, ExplosivePenetrationUpgrade.NAME, ExplosivePenetrationUpgrade.class) + .map(ExplosivePenetrationUpgrade::getMagnitude) + .orElse(0); if (penetration > 0) { Vec3i shiftDir = targetDir.getNormal(); shiftDir = shiftDir.multiply(-1); - miningBounds = miningBounds.expandTowards(penetration * shiftDir.getX(), penetration * shiftDir.getY(), penetration * shiftDir.getZ()); + miningBounds = miningBounds.expandTowards(penetration * shiftDir.getX(), penetration * shiftDir.getY(), + penetration * shiftDir.getZ()); } return miningBounds; } - // region area highlight @SubscribeEvent public static void showAreaOfEffectHighlight(RenderHighlightEvent.Block event) { LocalPlayer player = Minecraft.getInstance().player; - if (player != null && !player.isCrouching() && hasExplosiveUpgrades(player.getItemInHand(InteractionHand.MAIN_HAND))) { + if (player != null && !player.isCrouching() + && hasExplosiveUpgrades(player.getItemInHand(InteractionHand.MAIN_HAND))) { drawHighlight(event, player.getItemInHand(InteractionHand.MAIN_HAND)); } } @@ -201,20 +195,22 @@ private static void drawHighlight(RenderHighlightEvent.Block event, ItemStack he PoseStack poseStack = event.getPoseStack(); Vec3 camPos = event.getCamera().getPosition(); - Vector3d origin = new Vector3d(blockPos.getX() - camPos.x(), blockPos.getY() - camPos.y(), blockPos.getZ() - camPos.z()); - Vector4f color = new Vector4f(1,0,0,0.2f); + Vector3d origin = new Vector3d(blockPos.getX() - camPos.x(), blockPos.getY() - camPos.y(), + blockPos.getZ() - camPos.z()); + Vector4f color = new Vector4f(1, 0, 0, 0.2f); renderShape(poseStack, vertexConsumer, outlineShape, origin, color); - AABB refBounds = new AABB(0,0,0,1,1,1); - color = new Vector4f(0,0,0,0.2f); + AABB refBounds = new AABB(0, 0, 0, 1, 1, 1); + color = new Vector4f(0, 0, 0, 0.2f); renderJoiningLines(poseStack, vertexConsumer, refBounds, miningBounds, origin, color); } - private static void renderJoiningLines(PoseStack poseStack, VertexConsumer vertexConsumer, AABB refBounds, AABB miningBounds, Vector3d origin, Vector4f color) { + private static void renderJoiningLines(PoseStack poseStack, VertexConsumer vertexConsumer, AABB refBounds, + AABB miningBounds, Vector3d origin, Vector4f color) { List fromCorners = getCorners(refBounds); List toCorners = getCorners(miningBounds); - for (int i=0;i getCorners(AABB aabb) { return res; } - private static void renderShape(PoseStack pPoseStack, VertexConsumer pConsumer, VoxelShape pShape, Vector3d origin, Vector4f color) { + private static void renderShape(PoseStack pPoseStack, VertexConsumer pConsumer, VoxelShape pShape, Vector3d origin, + Vector4f color) { PoseStack.Pose pose = pPoseStack.last(); - pShape.forAllEdges( - (pMinX, pMinY, pMinZ, pMaxX, pMaxY, pMaxZ) -> addVertices(pose, pConsumer, origin.x, origin.y, origin.z, pMinX, pMinY, pMinZ, pMaxX, pMaxY, pMaxZ, - color)); + pShape.forAllEdges((pMinX, pMinY, pMinZ, pMaxX, pMaxY, pMaxZ) -> addVertices(pose, pConsumer, origin.x, + origin.y, origin.z, pMinX, pMinY, pMinZ, pMaxX, pMaxY, pMaxZ, color)); } - private static void addVertices(PoseStack.Pose pose, VertexConsumer pConsumer, Vector3d origin, Vector3d from, Vector3d to, Vector4f color) { - addVertices(pose,pConsumer, origin.x, origin.y, origin.z, from.x, from.y, from.z, to.x, to.y, to.z, color); + private static void addVertices(PoseStack.Pose pose, VertexConsumer pConsumer, Vector3d origin, Vector3d from, + Vector3d to, Vector4f color) { + addVertices(pose, pConsumer, origin.x, origin.y, origin.z, from.x, from.y, from.z, to.x, to.y, to.z, color); } - private static void addVertices(PoseStack.Pose pose, VertexConsumer pConsumer, double originX, double originY, double originZ, - double fromX, double fromY, double fromZ, double toX, double toY, double toZ, Vector4f color) { + private static void addVertices(PoseStack.Pose pose, VertexConsumer pConsumer, double originX, double originY, + double originZ, double fromX, double fromY, double fromZ, double toX, double toY, double toZ, + Vector4f color) { - //create normal - float normalX = (float)(toX - fromX); - float normalY = (float)(toY - fromY); - float normalZ = (float)(toZ - fromZ); + // create normal + float normalX = (float) (toX - fromX); + float normalY = (float) (toY - fromY); + float normalZ = (float) (toZ - fromZ); float length = Mth.sqrt(normalX * normalX + normalY * normalY + normalZ * normalZ); - //normalize + // normalize normalX = normalX / length; normalY = normalY / length; normalZ = normalZ / length; pConsumer - .addVertex(pose.pose(), (float) (fromX + originX), (float) (fromY + originY), (float) (fromZ + originZ)) - .setColor(color.x(), color.y(), color.z(), color.w()) - .setNormal(pose, normalX, normalY, normalZ); - pConsumer - .addVertex(pose.pose(), (float) (toX + originX), (float) (toY + originY), (float) (toZ + originZ)) - .setColor(color.x(), color.y(), color.z(), color.w()) - .setNormal(pose, normalX, normalY, normalZ); + .addVertex(pose.pose(), (float) (fromX + originX), (float) (fromY + originY), (float) (fromZ + originZ)) + .setColor(color.x(), color.y(), color.z(), color.w()) + .setNormal(pose, normalX, normalY, normalZ); + pConsumer.addVertex(pose.pose(), (float) (toX + originX), (float) (toY + originY), (float) (toZ + originZ)) + .setColor(color.x(), color.y(), color.z(), color.w()) + .setNormal(pose, normalX, normalY, normalZ); } // endregion diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/ElytraUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/ElytraUpgrade.java new file mode 100644 index 0000000000..01ce6d414d --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/ElytraUpgrade.java @@ -0,0 +1,36 @@ +package com.enderio.armory.common.item.darksteel.upgrades.flight; + +import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.lang.ArmoryLang; +import java.util.Collection; +import java.util.List; +import net.minecraft.network.chat.Component; + +public class ElytraUpgrade implements IDarkSteelUpgrade { + + public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "elytra"; + + public ElytraUpgrade() { + } + + @Override + public String getSlot() { + return GliderUpgrade.NAME; + } + + @Override + public String getName() { + return NAME; + } + + @Override + public Component getDisplayName() { + return ArmoryLang.DS_UPGRADE_ELYTRA; + } + + @Override + public Collection getDescription() { + return List.of(ArmoryLang.DS_UPGRADE_ELYTRA_DESCRIPTION); + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/FlightEnabledPacket.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/FlightEnabledPacket.java new file mode 100644 index 0000000000..e4135c6d34 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/FlightEnabledPacket.java @@ -0,0 +1,21 @@ +package com.enderio.armory.common.item.darksteel.upgrades.flight; + +import com.enderio.base.api.EnderIO; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; + +public record FlightEnabledPacket(boolean enabled) implements CustomPacketPayload { + + public static CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>( + EnderIO.loc("flight_upgrade_enabled")); + + public static StreamCodec STREAM_CODEC = StreamCodec.composite(ByteBufCodecs.BOOL, + FlightEnabledPacket::enabled, FlightEnabledPacket::new); + + @Override + public CustomPacketPayload.Type type() { + return TYPE; + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/FlightToggleHandler.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/FlightToggleHandler.java new file mode 100644 index 0000000000..d2e5a8444e --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/FlightToggleHandler.java @@ -0,0 +1,62 @@ +package com.enderio.armory.common.item.darksteel.upgrades.flight; + +import com.enderio.armory.client.KeyBinds; +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.init.ArmoryDataComponents; +import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.armory.common.tag.ArmoryTags; +import java.util.Optional; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.network.handling.IPayloadContext; + +public class FlightToggleHandler { + + public static void toggleFlightUpgrade(ClientTickEvent.Post event) { + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) { + return; + } + Optional eq = getEquippedChestplate(player); + if (eq.isEmpty()) { + return; + } + while (KeyBinds.FLIGHT_MAPPING.get().consumeClick()) { + boolean newVal = !eq.get().getOrDefault(ArmoryDataComponents.DARK_STEEL_FLIGHT_ACTIVE, false); + eq.get().set(ArmoryDataComponents.DARK_STEEL_FLIGHT_ACTIVE, newVal); + PacketDistributor.sendToServer(new FlightEnabledPacket(newVal)); + if (newVal) { + player.displayClientMessage(ArmoryLang.FLIGHT_ENABLED, true); + } else { + player.displayClientMessage(ArmoryLang.FLIGHT_DISABLED, true); + } + } + } + + public static void handleActivePacket(FlightEnabledPacket packet, IPayloadContext context) { + context.enqueueWork(() -> { + var player = context.player(); + Optional eq = getEquippedChestplate(player); + if (eq.isEmpty()) { + return; + } + eq.get().set(ArmoryDataComponents.DARK_STEEL_FLIGHT_ACTIVE, packet.enabled()); + }); + } + + public static Optional getEquippedChestplate(Player player) { + ItemStack equipped = player.getItemBySlot(EquipmentSlot.CHEST); + if (equipped.is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_CHESTPLATE) + && (DarkSteelCapability.hasUpgrade(equipped, GliderUpgrade.NAME) + || DarkSteelCapability.hasUpgrade(equipped, ElytraUpgrade.NAME))) { + return Optional.of(equipped); + } + return Optional.empty(); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/GliderIntegration.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/GliderIntegration.java new file mode 100644 index 0000000000..307dd4a46d --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/GliderIntegration.java @@ -0,0 +1,44 @@ +package com.enderio.armory.common.item.darksteel.upgrades.flight; + +import com.enderio.armory.client.GliderIntegrationClient; +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.init.ArmoryDataComponents; +import com.enderio.armory.common.tag.ArmoryTags; +import com.enderio.base.api.glider.GliderMovementInfo; +import com.enderio.base.api.integration.ClientIntegration; +import com.enderio.base.api.integration.Integration; +import com.enderio.base.common.lang.EIOLang; +import java.util.Optional; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +public class GliderIntegration implements Integration { + + private final GliderMovementInfo info = new GliderMovementInfo(0.003d, 1d, -0.05d, this); + + public static final GliderIntegration INSTANCE = new GliderIntegration(); + + @Override + public Optional hangGliderDisabledReason(Player player) { + return player.isFallFlying() ? Optional.of(EIOLang.GLIDER_DISABLED_FALL_FLYING) : Optional.empty(); + } + + @Override + public Optional getGliderMovementInfo(Player player) { + ItemStack equipped = player.getItemBySlot(EquipmentSlot.CHEST); + if (equipped.is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_CHESTPLATE) + && DarkSteelCapability.hasUpgrade(equipped, GliderUpgrade.NAME) + && equipped.getOrDefault(ArmoryDataComponents.DARK_STEEL_FLIGHT_ACTIVE, false)) { + return Optional.of(info); + } + return Optional.empty(); + } + + @Override + public ClientIntegration getClientIntegration() { + return GliderIntegrationClient.INSTANCE; + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/GliderUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/GliderUpgrade.java new file mode 100644 index 0000000000..3a231f60c2 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/flight/GliderUpgrade.java @@ -0,0 +1,29 @@ +package com.enderio.armory.common.item.darksteel.upgrades.flight; + +import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.lang.ArmoryLang; +import java.util.Collection; +import java.util.List; +import net.minecraft.network.chat.Component; + +public class GliderUpgrade implements IDarkSteelUpgrade { + + public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "glider"; + + @Override + public String getName() { + return NAME; + } + + @Override + public Component getDisplayName() { + return ArmoryLang.DS_UPGRADE_GLIDER; + } + + @Override + public Collection getDescription() { + return List.of(ArmoryLang.DS_UPGRADE_GLIDER_DESCRIPTION); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUpgrade.java new file mode 100644 index 0000000000..80709be8a3 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUpgrade.java @@ -0,0 +1,123 @@ +package com.enderio.armory.common.item.darksteel.upgrades.speed; + +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.config.ArmoryConfig; +import com.enderio.armory.common.init.ArmoryCapabilities; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.item.darksteel.upgrades.TieredUpgrade; +import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.armory.common.tag.ArmoryTags; +import com.enderio.core.common.energy.ItemStackEnergy; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.EquipmentSlotGroup; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.common.ModConfigSpec; +import net.neoforged.neoforge.event.ItemAttributeModifierEvent; +import net.neoforged.neoforge.event.tick.PlayerTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import org.jetbrains.annotations.Nullable; + +public class SpeedUpgrade extends TieredUpgrade { + + public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "speed"; + + private final ModConfigSpec.ConfigValue energyUse = ArmoryConfig.COMMON.SPEED_ENERGY_USE; + + public SpeedUpgrade() { + this(SpeedUpgradeTier.ONE); + } + + public SpeedUpgrade(SpeedUpgradeTier tier) { + super(tier, NAME); + + } + + public int getEnergyUse() { + return energyUse.get(); + } + + @Override + public Collection getDescription() { + return List.of(ArmoryLang.DS_UPGRADE_SPEED_DESCRIPTION); + } + + @Override + protected SpeedUpgradeTier getBaseTier() { + return SpeedUpgradeTier.ONE; + } + + @Override + protected Optional getTier(int tier) { + if (tier >= SpeedUpgradeTier.values().length || tier < 0) { + return Optional.empty(); + } + return Optional.of(SpeedUpgradeTier.values()[tier]); + } + + public static void applySpeedModifiers(ItemAttributeModifierEvent e) { + ItemStack stack = e.getItemStack(); + if (!stack.is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_LEGGINGS) + || !DarkSteelCapability.hasUpgrade(stack, SpeedUpgrade.NAME)) { + return; + } + if (ItemStackEnergy.getEnergyStored(stack) > 0) { + Optional upgrade = DarkSteelCapability.getUpgradeAs(stack, SpeedUpgrade.NAME, + SpeedUpgrade.class); + upgrade.ifPresent(speedUpgrade -> e.addModifier(Attributes.MOVEMENT_SPEED, + speedUpgrade.tier.getAttributeModifier(), EquipmentSlotGroup.LEGS)); + } + } + + public static void onPlayerTick(PlayerTickEvent.Pre playerTickEvent) { + + Player player = playerTickEvent.getEntity(); + if (!player.level().isClientSide()) { + // Movement delta only tracked client side + return; + } + if (!player.onGround()) { + return; + } + ItemStack legs = player.getItemBySlot(EquipmentSlot.LEGS); + if (!legs.is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_LEGGINGS)) { + return; + } + @Nullable + DarkSteelCapability cap = legs.getCapability(ArmoryCapabilities.DARK_STEEL_CAPABILITY); + if (cap == null) { + return; + } + Optional speedUpgradeOpt = cap.getUpgradeAs(SpeedUpgrade.NAME, SpeedUpgrade.class); + if (speedUpgradeOpt.isEmpty()) { + return; + } + SpeedUpgrade speedUpgrade = speedUpgradeOpt.get(); + double costPerUnit = speedUpgrade.getEnergyUse(); + double distanceMoved = player.getDeltaMovement().horizontalDistance(); + int extracted = ItemStackEnergy.extractEnergy(legs, (int) (costPerUnit * distanceMoved), false); + if (extracted > 0) { + PacketDistributor.sendToServer(new SpeedUsePowerPacket(extracted)); + } + } + + public static void handleEnergyUsePacket(SpeedUsePowerPacket packet, IPayloadContext context) { + context.enqueueWork(() -> { + var player = context.player(); + + // Check in case of desync + ItemStack legs = player.getItemBySlot(EquipmentSlot.LEGS); + if (!legs.is(ArmoryTags.Items.DARK_STEEL_UPGRADEABLE_LEGGINGS)) { + return; + } + ItemStackEnergy.extractEnergy(legs, packet.energyUse(), false); + }); + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUpgradeTier.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUpgradeTier.java new file mode 100644 index 0000000000..dfda6b6e26 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUpgradeTier.java @@ -0,0 +1,68 @@ +package com.enderio.armory.common.item.darksteel.upgrades.speed; + +import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.config.ArmoryConfig; +import com.enderio.armory.common.item.darksteel.upgrades.IUpgradeTier; +import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.base.api.EnderIO; +import java.util.function.Supplier; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.neoforged.neoforge.common.ModConfigSpec; + +public enum SpeedUpgradeTier implements IUpgradeTier { + + ONE(ArmoryConfig.COMMON.SPEED_I_BOOST, ArmoryConfig.COMMON.SPEED_ACTIVATION_COST_I, ArmoryLang.DS_UPGRADE_SPEED_I), + TWO(ArmoryConfig.COMMON.SPEED_II_BOOST, ArmoryConfig.COMMON.SPEED_ACTIVATION_COST_II, + ArmoryLang.DS_UPGRADE_SPEED_II), + THREE(ArmoryConfig.COMMON.SPEED_III_BOOST, ArmoryConfig.COMMON.SPEED_ACTIVATION_COST_III, + ArmoryLang.DS_UPGRADE_SPEED_III); + + private final Supplier factory; + private final ModConfigSpec.ConfigValue magnitude; + private final ModConfigSpec.ConfigValue activationCost; + private final Component displayName; + private AttributeModifier attributeModifier; + + SpeedUpgradeTier(ModConfigSpec.ConfigValue magnitude, ModConfigSpec.ConfigValue activationCost, + Component displayName) { + this.magnitude = magnitude; + this.activationCost = activationCost; + this.displayName = displayName; + factory = () -> new SpeedUpgrade(this); + } + + public ModConfigSpec.ConfigValue getMagnitude() { + return magnitude; + } + + @Override + public Supplier getFactory() { + return factory; + } + + @Override + public int getLevel() { + return ordinal(); + } + + @Override + public Component getDisplayName() { + return displayName; + } + + @Override + public ModConfigSpec.ConfigValue getActivationCost() { + return activationCost; + } + + public AttributeModifier getAttributeModifier() { + if (attributeModifier == null) { + attributeModifier = new AttributeModifier( + ResourceLocation.fromNamespaceAndPath(EnderIO.NAMESPACE, "speed_upgrade_" + ordinal()), + magnitude.get(), AttributeModifier.Operation.ADD_MULTIPLIED_BASE); + } + return attributeModifier; + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUsePowerPacket.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUsePowerPacket.java new file mode 100644 index 0000000000..58befc52af --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/speed/SpeedUsePowerPacket.java @@ -0,0 +1,20 @@ +package com.enderio.armory.common.item.darksteel.upgrades.speed; + +import com.enderio.base.api.EnderIO; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; + +public record SpeedUsePowerPacket(int energyUse) implements CustomPacketPayload { + + public static Type TYPE = new Type<>(EnderIO.loc("speed_upgrade_use_energy")); + + public static StreamCodec STREAM_CODEC = StreamCodec.composite(ByteBufCodecs.INT, + SpeedUsePowerPacket::energyUse, SpeedUsePowerPacket::new); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelEndabledUpdatePacket.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelEndabledUpdatePacket.java new file mode 100644 index 0000000000..641dbacc28 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelEndabledUpdatePacket.java @@ -0,0 +1,20 @@ +package com.enderio.armory.common.item.darksteel.upgrades.travel; + +import com.enderio.base.api.EnderIO; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; + +public record TravelEndabledUpdatePacket(boolean enabled) implements CustomPacketPayload { + + public static Type TYPE = new Type<>(EnderIO.loc("travel_status_update")); + + public static StreamCodec STREAM_CODEC = StreamCodec + .composite(ByteBufCodecs.BOOL, TravelEndabledUpdatePacket::enabled, TravelEndabledUpdatePacket::new); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelUpgrade.java new file mode 100644 index 0000000000..0a38eccea3 --- /dev/null +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelUpgrade.java @@ -0,0 +1,130 @@ +package com.enderio.armory.common.item.darksteel.upgrades.travel; + +import com.enderio.armory.api.capability.IDarkSteelUpgrade; +import com.enderio.armory.common.capability.DarkSteelCapability; +import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; +import com.enderio.armory.common.lang.ArmoryLang; +import com.enderio.base.api.travel.TravelTarget; +import com.enderio.base.common.config.BaseConfig; +import com.enderio.base.common.handler.TravelHandler; +import com.enderio.base.common.init.EIODataComponents; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +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.UseOnContext; +import net.minecraft.world.level.Level; +import net.neoforged.neoforge.client.event.MovementInputUpdateEvent; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import org.jetbrains.annotations.Nullable; + +public class TravelUpgrade implements IDarkSteelUpgrade { + + public static final String NAME = DarkSteelUpgradeRegistry.UPGRADE_PREFIX + "travel"; + + public TravelUpgrade() { + } + + @Override + public String getName() { + return NAME; + } + + @Override + public Component getDisplayName() { + return ArmoryLang.DS_UPGRADE_TRAVEL; + } + + @Override + public Collection getDescription() { + return List.of(ArmoryLang.DS_UPGRADE_TRAVEL_DESCRIPTION); + } + + public static void checkShiftStatus(MovementInputUpdateEvent evt) { + ItemStack equipped = evt.getEntity().getItemInHand(InteractionHand.MAIN_HAND); + if (!DarkSteelCapability.hasUpgrade(equipped, TravelUpgrade.NAME)) { + return; + } + equipped.set(EIODataComponents.TRAVEL_ITEM, evt.getInput().shiftKeyDown); + PacketDistributor.sendToServer(new TravelEndabledUpdatePacket(evt.getInput().shiftKeyDown)); + } + + public static void handleTravelEnabledPacket(TravelEndabledUpdatePacket packet, IPayloadContext context) { + context.enqueueWork(() -> { + var player = context.player(); + // Just check there is no desync + ItemStack equipped = player.getItemInHand(InteractionHand.MAIN_HAND); + if (!DarkSteelCapability.hasUpgrade(equipped, TravelUpgrade.NAME)) { + return; + } + equipped.set(EIODataComponents.TRAVEL_ITEM, packet.enabled()); + }); + } + + public static @Nullable InteractionResultHolder onUse(Level level, Player player, + InteractionHand usedHand, Item item) { + ItemStack stack = player.getItemInHand(usedHand); + @Nullable + Boolean isTravelActive = stack.get(EIODataComponents.TRAVEL_ITEM); + if (isTravelActive != null && isTravelActive) { + if (TravelUpgrade.tryPerformAction(item, level, player, stack)) { + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + return InteractionResultHolder.fail(stack); + } else { + return null; + } + } + + public static @Nullable InteractionResult onUse(UseOnContext context, Item item) { + ItemStack stack = context.getItemInHand(); + @Nullable + Boolean isTravelActive = stack.get(EIODataComponents.TRAVEL_ITEM); + if (isTravelActive != null && isTravelActive) { + if (context.getPlayer() != null && TravelUpgrade.tryPerformAction(item, context.getLevel(), + context.getPlayer(), context.getItemInHand())) { + return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); + } + return InteractionResult.FAIL; + } + return null; + } + + private static boolean tryPerformAction(Item item, Level level, Player player, ItemStack stack) { + boolean isCreative = player.isCreative(); + if (TravelHandler.hasResources(stack) || isCreative) { + if (performAction(item, level, player)) { + if (!level.isClientSide() && !isCreative) { + TravelHandler.consumeResources(stack); + } + return true; + } + return false; + } + return false; + } + + private static boolean performAction(Item item, Level level, Player player) { + Optional target = TravelHandler.getTeleportAnchorTarget(player); + if (target.isEmpty()) { + if (TravelHandler.shortTeleport(level, player)) { + player.getCooldowns().addCooldown(item, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); + return true; + } + } else { + if (TravelHandler.blockTeleport(level, player)) { + player.getCooldowns().addCooldown(item, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); + return true; + } + } + return false; + } + +} diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/lang/ArmoryLang.java b/enderio-armory/src/main/java/com/enderio/armory/common/lang/ArmoryLang.java index 5e4cbaa8b6..25725f484a 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/lang/ArmoryLang.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/lang/ArmoryLang.java @@ -11,63 +11,143 @@ public class ArmoryLang { // region Dark Steel - public static final MutableComponent HEAD_DROP_CHANCE = addTranslation("info", EnderIO.loc("headchance"), "%s%% chance to drop a mob head"); - public static final MutableComponent DURABILITY_AMOUNT = addTranslation("info", EnderIO.loc("durability.amount"), "Durability %s"); - - public static final MutableComponent DS_UPGRADE_XP_COST = addTranslation("info", EnderIO.loc("darksteel.upgrade.cost"), "Costs %s Levels"); - public static final Component DS_UPGRADE_ACTIVATE = addTranslation("info", EnderIO.loc("darksteel.upgrade.activate"), "Right Click to Activate"); - public static final Component DS_UPGRADE_ITEM_NO_XP = addTranslation("info", EnderIO.loc("darksteel.upgrade.no_xp"), "Not enough XP"); - public static final Component DS_UPGRADE_AVAILABLE = addTranslation("info", EnderIO.loc("darksteel.upgrade.available"), "Available Upgrades").withStyle( - ChatFormatting.YELLOW); - - public static final Component DS_UPGRADE_EMPOWERED_I = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered_l1"), "Empowered"); - public static final Component DS_UPGRADE_EMPOWERED_II = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered_l2"), "Empowered II"); - public static final Component DS_UPGRADE_EMPOWERED_III = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered_l3"), "Empowered III"); - public static final Component DS_UPGRADE_EMPOWERED_IV = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered_l4"), "Empowered IV"); - public static final Component DS_UPGRADE_EMPOWERED_DESCRIPTION = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered.description"), - "Infuse the steel with the power of Micro Infinity"); - public static final MutableComponent DS_UPGRADE_EMPOWERED_STORAGE = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered.storage"), - "Holds up to %s \u00B5I"); - public static final MutableComponent DS_UPGRADE_EMPOWERED_DAMAGE_ABSORPTION = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered.absorption"), - "%s%% damage absorbed by \u00B5I"); - public static final MutableComponent DS_UPGRADE_EMPOWERED_EFFICIENCY = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered.efficiency"), - "Efficiency +%s when powered"); - public static final MutableComponent DS_UPGRADE_EMPOWERED_OBSIDIAM_EFFICIENCY = addTranslation("info", EnderIO.loc("darksteel.upgrade.empowered.obsidian.efficiency"), - "Efficiency +%s when breaking obsidian"); - - public static final Component DS_UPGRADE_SPOON = addTranslation("info", EnderIO.loc("darksteel.upgrade.spoon"), "Spoon"); - public static final Component DS_UPGRADE_SPOON_DESCRIPTION = addTranslation("info", EnderIO.loc("darksteel.upgrade.spoon.description"), - "Who needs a shovel when you have a spoon?"); - - public static final Component DS_UPGRADE_FORK = addTranslation("info", EnderIO.loc("darksteel.upgrade.fork"), "Fork"); - public static final Component DS_UPGRADE_FORK_DESCRIPTION = addTranslation("info", EnderIO.loc("darksteel.upgrade.fork.description"), - "Who needs a hoe when you have a fork?"); - - public static final Component DS_UPGRADE_DIRECT = addTranslation("info", EnderIO.loc("darksteel.upgrade.direct"), "Direct"); - public static final Component DS_UPGRADE_DIRECT_DESCRIPTION = addTranslation("info", EnderIO.loc("darksteel.upgrade.direct.description"), - "Teleports harvested items directly into your inventory"); - - public static final Component DS_UPGRADE_EXPLOSIVE_I = addTranslation("info", EnderIO.loc("darksteel.upgrade.explosive_l1"), "Explosive I"); - public static final Component DS_UPGRADE_EXPLOSIVE_II = addTranslation("info", EnderIO.loc("darksteel.upgrade.explosive_l2"), "Explosive II"); - public static final Component DS_UPGRADE_EXPLOSIVE_DESCRIPTION = addTranslation("info", EnderIO.loc("darksteel.upgrade.explosive.description"), - "Makes surrounding dirt and rock go splodey"); - - public static final Component DS_UPGRADE_EXPLOSIVE_PENETRATION_I = addTranslation("info", EnderIO.loc("darksteel.upgrade.explosive_penetration_l1"), - "Explosive Penetration I"); - public static final Component DS_UPGRADE_EXPLOSIVE_PENETRATION_II = addTranslation("info", EnderIO.loc("darksteel.upgrade.explosive_penetration_l2"), - "Explosive Penetration II"); - public static final Component DS_UPGRADE_EXPLOSIVE_PENETRATION_DESCRIPTION = addTranslation("info", - EnderIO.loc("darksteel.upgrade.explosive_penetration.description"), "Makes dirt and rock behind the mined block go splodey"); + public static final MutableComponent ENDER_HEAD_DROP_CHANCE = addTranslation(EnderIO.loc("ender.headchance"), + "%s%% chance to drop a mob head"); + public static final MutableComponent ENDER_HEAD_DROP_INFO = addTranslation(EnderIO.loc("ender.headinfo"), + "Cuts off mob heads once Empowered"); + public static final MutableComponent ENDER_BLOCK_TELEPORT = addTranslation(EnderIO.loc("ender.blockteleport"), + "Stops Enderman teleporting"); + public static final MutableComponent DURABILITY_AMOUNT = addTranslation(EnderIO.loc("durability.amount"), + "Durability %s"); + + public static final MutableComponent DS_UPGRADE_XP_COST = addTranslation(EnderIO.loc("darksteel.upgrade.cost"), + "Costs %s Levels"); + public static final Component DS_UPGRADE_ACTIVATE = addTranslation(EnderIO.loc("darksteel.upgrade.activate"), + "Right Click to Activate"); + public static final Component DS_UPGRADE_ITEM_NO_XP = addTranslation(EnderIO.loc("darksteel.upgrade.no_xp"), + "Not enough XP"); + public static final Component DS_UPGRADE_ITEM_INVALID_UPGRADE = addTranslation( + EnderIO.loc("darksteel.upgrade.invalid_upgrade"), "Invalid upgrade for equipped item"); + public static final Component DS_UPGRADE_ITEM_NO_TARGET = addTranslation(EnderIO.loc("darksteel.upgrade.no_target"), + "No Dark Steel Item in Off-Hand"); + public static final Component DS_UPGRADE_AVAILABLE = addTranslation(EnderIO.loc("darksteel.upgrade.available"), + "Available Upgrades").withStyle(ChatFormatting.YELLOW); + + public static final Component DS_UPGRADE_EMPOWERED_I = addTranslation(EnderIO.loc("darksteel.upgrade.empowered_l1"), + "Empowered"); + public static final Component DS_UPGRADE_EMPOWERED_II = addTranslation( + EnderIO.loc("darksteel.upgrade.empowered_l2"), "Empowered II"); + public static final Component DS_UPGRADE_EMPOWERED_III = addTranslation( + EnderIO.loc("darksteel.upgrade.empowered_l3"), "Empowered III"); + public static final Component DS_UPGRADE_EMPOWERED_IV = addTranslation( + EnderIO.loc("darksteel.upgrade.empowered_l4"), "Empowered IV"); + public static final Component DS_UPGRADE_EMPOWERED_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.empowered.description"), + "Infuse the steel with the power of Micro Infinity"); + public static final MutableComponent DS_UPGRADE_EMPOWERED_STORAGE = addTranslation( + EnderIO.loc("darksteel.upgrade.empowered.storage"), "Holds up to %s µI"); + public static final MutableComponent DS_UPGRADE_EMPOWERED_DAMAGE_ABSORPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.empowered.absorption"), "%s%% damage absorbed by µI"); + public static final MutableComponent DS_UPGRADE_EMPOWERED_EFFICIENCY = addTranslation( + EnderIO.loc("darksteel.upgrade.empowered.efficiency"), "Efficiency +%s when powered"); + public static final MutableComponent DS_UPGRADE_EMPOWERED_OBSIDIAM_EFFICIENCY = addTranslation( + EnderIO.loc("darksteel.upgrade.empowered.obsidian.efficiency"), "Efficiency +%s when breaking obsidian"); + + public static final Component DS_UPGRADE_SPOON = addTranslation(EnderIO.loc("darksteel.upgrade.spoon"), "Spoon"); + public static final Component DS_UPGRADE_SPOON_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.spoon.description"), "Who needs a shovel when you have a spoon?"); + + public static final Component DS_UPGRADE_FORK = addTranslation(EnderIO.loc("darksteel.upgrade.fork"), "Fork"); + public static final Component DS_UPGRADE_FORK_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.fork.description"), "Who needs a hoe when you have a fork?"); + + public static final Component DS_UPGRADE_TRAVEL = addTranslation(EnderIO.loc("darksteel.upgrade.travel"), "Travel"); + public static final Component DS_UPGRADE_TRAVEL_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.travel.description"), "Integrated Travel Staff"); + + public static final Component DS_UPGRADE_DIRECT = addTranslation(EnderIO.loc("darksteel.upgrade.direct"), "Direct"); + public static final Component DS_UPGRADE_DIRECT_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.direct.description"), + "Teleports harvested items directly into your inventory"); + + public static final Component DS_UPGRADE_EXPLOSIVE_I = addTranslation(EnderIO.loc("darksteel.upgrade.explosive_l1"), + "Explosive I"); + public static final Component DS_UPGRADE_EXPLOSIVE_II = addTranslation( + EnderIO.loc("darksteel.upgrade.explosive_l2"), "Explosive II"); + public static final Component DS_UPGRADE_EXPLOSIVE_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.explosive.description"), "Makes surrounding dirt and rock go splodey"); + + public static final Component DS_UPGRADE_EXPLOSIVE_PENETRATION_I = addTranslation( + EnderIO.loc("darksteel.upgrade.explosive_penetration_l1"), "Explosive Penetration I"); + public static final Component DS_UPGRADE_EXPLOSIVE_PENETRATION_II = addTranslation( + EnderIO.loc("darksteel.upgrade.explosive_penetration_l2"), "Explosive Penetration II"); + public static final Component DS_UPGRADE_EXPLOSIVE_PENETRATION_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.explosive_penetration.description"), + "Makes dirt and rock behind the mined block go splodey"); + + public static final Component DS_UPGRADE_SPEED_I = addTranslation(EnderIO.loc("darksteel.upgrade.speed_l1"), + "Speed I"); + public static final Component DS_UPGRADE_SPEED_II = addTranslation(EnderIO.loc("darksteel.upgrade.speed_l2"), + "Speed II"); + public static final Component DS_UPGRADE_SPEED_III = addTranslation(EnderIO.loc("darksteel.upgrade.speed_l3"), + "Speed III"); + public static final Component DS_UPGRADE_SPEED_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.speed.description"), "Increases movement speed"); + + public static final MutableComponent DS_UPGRADE_BOOTS_SNOW_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.boots_snow"), "Can walk on powdered snow"); + + public static final Component DS_UPGRADE_JUMP_I = addTranslation(EnderIO.loc("darksteel.upgrade.jump_l1"), + "Jump I"); + public static final MutableComponent DS_UPGRADE_JUMP_I_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.jump.description_l1"), "Enables double jump"); + public static final Component DS_UPGRADE_JUMP_II = addTranslation(EnderIO.loc("darksteel.upgrade.jump_l2"), + "Jump II"); + public static final MutableComponent DS_UPGRADE_JUMP_II_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.jump.description_l2"), "Enables triple jump"); + + public static final Component DS_UPGRADE_STEP_ASSIST = addTranslation(EnderIO.loc("darksteel.upgrade.step_assist"), + "Step Assist"); + public static final Component DS_UPGRADE_STEP_ASSIST_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.step_assist.description"), "Step just a little higher"); + + public static final Component DS_UPGRADE_GLIDER = addTranslation(EnderIO.loc("darksteel.upgrade.glider"), "Glider"); + public static final Component DS_UPGRADE_GLIDER_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.glider.description"), "Wings anyone?"); + + public static final String DS_UPGRADE_KEYBIND_CATEGORY = "darksteel.keybind.category"; + public static final String DS_UPGRADE_FLIGHT_KEYBIND = "darksteel.upgrade.flight.keybind"; + + public static final Component FLIGHT_ENABLED = addTranslation(EnderIO.loc("darksteel.upgrade.flight.enabled"), + "Flight Enabled"); + public static final Component FLIGHT_DISABLED = addTranslation(EnderIO.loc("darksteel.upgrade.flight.disabled"), + "Flight Disabled"); + + public static final Component DS_UPGRADE_ELYTRA = addTranslation(EnderIO.loc("darksteel.upgrade.elytra"), "Elytra"); + public static final Component DS_UPGRADE_ELYTRA_DESCRIPTION = addTranslation( + EnderIO.loc("darksteel.upgrade.elytra.description"), "Wings anyone?"); + + static { + EnderIOArmory.REGILITE.addTranslation(() -> DS_UPGRADE_KEYBIND_CATEGORY, "Ender IO Dark Steel"); + EnderIOArmory.REGILITE.addTranslation(() -> DS_UPGRADE_FLIGHT_KEYBIND, "Toggles Glider/Elytra Upgrade"); + } // endregion + private static MutableComponent addTranslation(ResourceLocation id, String translation) { + return addTranslation("info", id, translation); + } + private static MutableComponent addTranslation(String prefix, ResourceLocation id, String translation) { return EnderIOArmory.REGILITE.addTranslation(prefix, id, translation); } - private static MutableComponent addTranslation(String prefix, ResourceLocation path, String name, String translation) { - return EnderIOArmory.REGILITE.addTranslation(prefix, ResourceLocation.fromNamespaceAndPath(path.getNamespace(), path.getPath() + "/" + name), translation); + private static MutableComponent addTranslation(String prefix, ResourceLocation path, String name, + String translation) { + return EnderIOArmory.REGILITE.addTranslation(prefix, + ResourceLocation.fromNamespaceAndPath(path.getNamespace(), path.getPath() + "/" + name), translation); } - public static void register() {} + public static void register() { + } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/tag/ArmoryTags.java b/enderio-armory/src/main/java/com/enderio/armory/common/tag/ArmoryTags.java index 45000bbcd7..187dd9b236 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/tag/ArmoryTags.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/tag/ArmoryTags.java @@ -2,23 +2,53 @@ import com.enderio.base.api.EnderIO; import net.minecraft.tags.BlockTags; +import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; public class ArmoryTags { public static void register() { + Items.init(); Blocks.init(); } + public static class Items { + + private static void init() { + } + + public static final TagKey DARK_STEEL_UPGRADEABLE_PICKAXE = ItemTags + .create(EnderIO.loc("dark_steel_upgradeable_pickaxe")); + public static final TagKey DARK_STEEL_UPGRADEABLE_AXE = ItemTags + .create(EnderIO.loc("dark_steel_upgradeable_axe")); + public static final TagKey DARK_STEEL_UPGRADEABLE_SWORD = ItemTags + .create(EnderIO.loc("dark_steel_upgradeable_sword")); + + public static final TagKey DARK_STEEL_UPGRADEABLE_CHESTPLATE = ItemTags + .create(EnderIO.loc("dark_steel_upgradeable_chestplate")); + public static final TagKey DARK_STEEL_UPGRADEABLE_LEGGINGS = ItemTags + .create(EnderIO.loc("dark_steel_upgradeable_leggings")); + public static final TagKey DARK_STEEL_UPGRADEABLE_HELMET = ItemTags + .create(EnderIO.loc("dark_steel_upgradeable_helmet")); + public static final TagKey DARK_STEEL_UPGRADEABLE_BOOTS = ItemTags + .create(EnderIO.loc("dark_steel_upgradeable_boots")); + + } + public static class Blocks { - private static void init() {} + private static void init() { + } public static final TagKey DARK_STEEL_TIER = BlockTags.create(EnderIO.loc("needs_dark_steel")); - public static final TagKey INCORRECT_FOR_DARK_STEEL_TOOL = BlockTags.create(EnderIO.loc("incorrect_for_dark_steel_tool")); - public static final TagKey DARK_STEEL_EXPLODABLE_DENY_LIST = BlockTags.create(EnderIO.loc("dark_steel_explodable_deny_list")); - public static final TagKey DARK_STEEL_EXPLODABLE_ALLOW_LIST = BlockTags.create(EnderIO.loc("dark_steel_explodable_allow_list")); + public static final TagKey INCORRECT_FOR_DARK_STEEL_TOOL = BlockTags + .create(EnderIO.loc("incorrect_for_dark_steel_tool")); + public static final TagKey DARK_STEEL_EXPLODABLE_DENY_LIST = BlockTags + .create(EnderIO.loc("dark_steel_explodable_deny_list")); + public static final TagKey DARK_STEEL_EXPLODABLE_ALLOW_LIST = BlockTags + .create(EnderIO.loc("dark_steel_explodable_allow_list")); } } diff --git a/enderio-armory/src/main/java/com/enderio/armory/data/recipe/ItemRecipeProvider.java b/enderio-armory/src/main/java/com/enderio/armory/data/recipe/ItemRecipeProvider.java index fb5b5980f2..4d7a268bad 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/data/recipe/ItemRecipeProvider.java +++ b/enderio-armory/src/main/java/com/enderio/armory/data/recipe/ItemRecipeProvider.java @@ -3,6 +3,7 @@ import com.enderio.armory.common.init.ArmoryItems; import com.enderio.base.common.init.EIOItems; import com.enderio.base.common.tag.EIOTags; +import java.util.concurrent.CompletableFuture; import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; @@ -10,12 +11,12 @@ import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.data.recipes.RecipeProvider; import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.data.recipes.ShapelessRecipeBuilder; +import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.ItemLike; import net.neoforged.neoforge.common.Tags; -import java.util.concurrent.CompletableFuture; - public class ItemRecipeProvider extends RecipeProvider { public ItemRecipeProvider(PackOutput packOutput, CompletableFuture registries) { @@ -24,80 +25,148 @@ public ItemRecipeProvider(PackOutput packOutput, CompletableFuture gliderModels = Minecraft - .getInstance() - .getResourceManager() - .listResources("models/enderio_glider", rl -> rl.getPath().endsWith(".json")) - .keySet(); + Set gliderModels = Minecraft.getInstance() + .getResourceManager() + .listResources("models/enderio_glider", rl -> rl.getPath().endsWith(".json")) + .keySet(); for (ResourceLocation gliderModelPath : gliderModels) { Optional gliderItem = findGliderForModelRL(gliderModelPath); if (gliderItem.isPresent()) { - ResourceLocation modelLookupLocation = ResourceLocation.fromNamespaceAndPath(gliderModelPath.getNamespace(), - gliderModelPath.getPath().substring("models/".length(), gliderModelPath.getPath().length() - 5)); + ResourceLocation modelLookupLocation = ResourceLocation + .fromNamespaceAndPath(gliderModelPath.getNamespace(), gliderModelPath.getPath() + .substring("models/".length(), gliderModelPath.getPath().length() - 5)); ModelResourceLocation modelLocation = ModelResourceLocation.standalone(modelLookupLocation); event.register(modelLocation); @@ -81,11 +80,11 @@ public static void additionalModels(ModelEvent.RegisterAdditional event) { public static void itemDecorators(RegisterItemDecorationsEvent event) { // Register tools event.register(EIOItems.LEVITATION_STAFF.get(), FluidBarDecorator.INSTANCE); -// event.register(EIOItems.DARK_STEEL_AXE.get(), EnergyBarDecorator.INSTANCE); -// event.register(EIOItems.DARK_STEEL_PICKAXE.get(), EnergyBarDecorator.INSTANCE); // Register all glass blocks - EIOBlocks.GLASS_BLOCKS.values().forEach(blocks -> blocks.getAllBlocks().forEach(block -> event.register(block.get(), GlassIconDecorator.INSTANCE))); + EIOBlocks.GLASS_BLOCKS.values() + .forEach(blocks -> blocks.getAllBlocks() + .forEach(block -> event.register(block.get(), GlassIconDecorator.INSTANCE))); } @SubscribeEvent @@ -132,12 +131,15 @@ public static void modelRenderer(EntityRenderersEvent.RegisterRenderers event) { @SubscribeEvent public static void registerModelLayers(EntityRenderersEvent.RegisterLayerDefinitions event) { - event.registerLayerDefinition(EnderSkullRenderer.ENDER_SKULL, EnderSkullRenderer.EnderSkullModel::createMobHeadLayer); + event.registerLayerDefinition(EnderSkullRenderer.ENDER_SKULL, + EnderSkullRenderer.EnderSkullModel::createMobHeadLayer); } @SubscribeEvent public static void registerEnderSkulls(EntityRenderersEvent.CreateSkullModels event) { - event.registerSkullModel(EnderSkullBlock.EIOSkulls.ENDERMAN, new EnderSkullRenderer.EnderSkullModel(event.getEntityModelSet().bakeLayer(EnderSkullRenderer.ENDER_SKULL))); - SkullBlockRenderer.SKIN_BY_TYPE.put(EnderSkullBlock.EIOSkulls.ENDERMAN, ResourceLocation.withDefaultNamespace("textures/entity/enderman/enderman.png")); + event.registerSkullModel(EnderSkullBlock.EIOSkulls.ENDERMAN, new EnderSkullRenderer.EnderSkullModel( + event.getEntityModelSet().bakeLayer(EnderSkullRenderer.ENDER_SKULL))); + SkullBlockRenderer.SKIN_BY_TYPE.put(EnderSkullBlock.EIOSkulls.ENDERMAN, + ResourceLocation.withDefaultNamespace("textures/entity/enderman/enderman.png")); } } diff --git a/enderio-base/src/main/java/com/enderio/base/client/renderer/glider/ActiveGliderRenderLayer.java b/enderio-base/src/main/java/com/enderio/base/client/renderer/glider/ActiveGliderRenderLayer.java index 3b16e1c883..5a6e107c9f 100644 --- a/enderio-base/src/main/java/com/enderio/base/client/renderer/glider/ActiveGliderRenderLayer.java +++ b/enderio-base/src/main/java/com/enderio/base/client/renderer/glider/ActiveGliderRenderLayer.java @@ -3,8 +3,10 @@ import com.enderio.base.api.integration.ClientIntegration; import com.enderio.base.api.integration.Integration; import com.enderio.base.api.integration.IntegrationManager; +import com.enderio.base.common.hangglider.PlayerMovementHandler; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; +import java.util.List; import net.minecraft.client.model.PlayerModel; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.MultiBufferSource; @@ -13,8 +15,7 @@ import net.minecraft.client.renderer.entity.player.PlayerRenderer; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; - -import java.util.List; +import org.jetbrains.annotations.NotNull; public class ActiveGliderRenderLayer extends RenderLayer> { @@ -23,21 +24,30 @@ public ActiveGliderRenderLayer(PlayerRenderer pRenderer) { } @Override - public void render(PoseStack posestack, MultiBufferSource pBuffer, int pPackedLight, AbstractClientPlayer player, float pLimbSwing, float pLimbSwingAmount, - float pPartialTick, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { - List workingGliders = IntegrationManager.getIf( - integration -> integration.getGliderMovementInfo(player).isPresent(), - Integration::getClientIntegration); - if (!workingGliders.isEmpty()) { + public void render(PoseStack posestack, MultiBufferSource pBuffer, int pPackedLight, AbstractClientPlayer player, + float pLimbSwing, float pLimbSwingAmount, float pPartialTick, float pAgeInTicks, float pNetHeadYaw, + float pHeadPitch) { + List workingGliders = getActiveGliders(player); + if (!workingGliders.isEmpty()) { // && PlayerMovementHandler.isGliding(player)) { posestack.pushPose(); posestack.mulPose(Axis.ZP.rotationDegrees(180)); posestack.translate(0, 0.5, -0.2); int overlay = LivingEntityRenderer.getOverlayCoords(player, 0.0F); - workingGliders.forEach(workingGlider -> workingGlider.renderHangGlider(posestack, pBuffer, pPackedLight, overlay, player, pPartialTick)); + workingGliders.forEach(workingGlider -> workingGlider.renderHangGlider(posestack, pBuffer, pPackedLight, + overlay, player, pPartialTick)); posestack.popPose(); } } + + private static @NotNull List getActiveGliders(Player player) { + return IntegrationManager.getIf(integration -> integration.getGliderMovementInfo(player).isPresent(), + Integration::getClientIntegration); + } + public static void setupAnim(Player player, PoseStack poseStack) { + if (getActiveGliders(player).isEmpty() || !PlayerMovementHandler.isGliding(player)) { + return; + } player.oAttackAnim = 0; player.attackAnim = 0; player.walkAnimation.position(0); diff --git a/enderio-base/src/main/java/com/enderio/base/common/handler/TravelHandler.java b/enderio-base/src/main/java/com/enderio/base/common/handler/TravelHandler.java index 1c126bc1da..82fb32ad6f 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/handler/TravelHandler.java +++ b/enderio-base/src/main/java/com/enderio/base/common/handler/TravelHandler.java @@ -4,8 +4,9 @@ import com.enderio.base.api.travel.TravelTarget; import com.enderio.base.api.travel.TravelTargetApi; import com.enderio.base.common.config.BaseConfig; -import com.enderio.base.common.init.EIOItems; +import com.enderio.base.common.init.EIODataComponents; import com.enderio.base.common.network.RequestTravelPacket; +import com.enderio.core.common.energy.ItemStackEnergy; import java.util.Comparator; import java.util.Optional; import net.minecraft.core.BlockPos; @@ -48,21 +49,23 @@ public static boolean canItemTeleport(Player player) { } private static boolean canItemTeleport(Player player, InteractionHand hand) { - ItemStack stack = player.getItemInHand(hand); - if (stack.getItem() == EIOItems.TRAVEL_STAFF.get()) { - return true; - } - - // if (stack.getItem() instanceof IDarkSteelItem darkSteelItem) { - // TODO: Check for upgrade; - // } - return false; + @Nullable + Boolean comp = player.getItemInHand(hand).get(EIODataComponents.TRAVEL_ITEM); + return comp != null && comp; } public static boolean canBlockTeleport(Player player) { return IntegrationManager.anyMatch(integration -> integration.canBlockTeleport(player)); } + public static boolean hasResources(ItemStack stack) { + return ItemStackEnergy.hasEnergy(stack, BaseConfig.COMMON.ITEMS.TRAVELLING_STAFF_ENERGY_USE.get()); + } + + public static void consumeResources(ItemStack stack) { + ItemStackEnergy.extractEnergy(stack, BaseConfig.COMMON.ITEMS.TRAVELLING_STAFF_ENERGY_USE.get(), false); + } + public static boolean shortTeleport(Level level, Player player) { Optional pos = teleportPosition(level, player); if (pos.isPresent()) { @@ -229,7 +232,7 @@ public static Optional getTeleportAnchorTarget(Player player) { Vec3 positionVec = player.position().add(0, player.getEyeHeight(), 0); return TravelTargetApi.INSTANCE.getInItemRange(player.level(), player.blockPosition()) - .filter(target -> target.canTeleportTo()) + .filter(TravelTarget::canTeleportTo) .filter(target -> target.pos().distToCenterSqr(player.position()) > MIN_TELEPORTATION_DISTANCE_SQUARED) .filter(target -> Math.abs(getAngleRadians(positionVec, target.pos(), player.getYRot(), player.getXRot())) <= Math.toRadians(15)) @@ -260,7 +263,7 @@ public static Optional getElevatorAnchorTarget(Player player, Dire .stream() .filter(target -> target.pos().getX() == anchorX && target.pos().getZ() == anchorZ) .filter(target -> target.pos().getY() > lowerY && target.pos().getY() < upperY) - .filter(target -> target.canJumpTo()) + .filter(TravelTarget::canJumpTo) .filter(target -> isTeleportPositionClear(player.level(), target.pos()).isPresent()) .min(Comparator.comparingDouble(target -> Math.abs(target.pos().getY() - anchorY))); } diff --git a/enderio-base/src/main/java/com/enderio/base/common/hangglider/PlayerMovementHandler.java b/enderio-base/src/main/java/com/enderio/base/common/hangglider/PlayerMovementHandler.java index 7edc4f1f8e..cc660b0e92 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/hangglider/PlayerMovementHandler.java +++ b/enderio-base/src/main/java/com/enderio/base/common/hangglider/PlayerMovementHandler.java @@ -6,6 +6,11 @@ import com.enderio.base.api.integration.IntegrationManager; import com.enderio.base.common.init.EIOCriterions; import com.enderio.base.common.lang.EIOLang; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.WeakHashMap; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; @@ -22,17 +27,13 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.event.tick.PlayerTickEvent; -import java.util.Map; -import java.util.Optional; -import java.util.WeakHashMap; - @EventBusSubscriber(modid = EnderIOBase.MODULE_MOD_ID) public class PlayerMovementHandler { /** * {@linkplain net.minecraft.world.entity.LivingEntity#travel} 0.91 multiplicator */ - private static final double AIR_FRICTION_COEFFICIENT = 1/0.91D; + private static final double AIR_FRICTION_COEFFICIENT = 1 / 0.91D; private static final double MOVEMENT_CHANGE_EFFECT = 0.05d; @@ -44,7 +45,8 @@ public class PlayerMovementHandler { @SubscribeEvent public static void onPlayerTick(PlayerTickEvent.Pre playerTickEvent) { Player player = playerTickEvent.getEntity(); - Map ticksFallingMap = player instanceof ServerPlayer ? TICKS_FALLING_SERVER : TICKS_FALLING_CLIENT; + Map ticksFallingMap = player instanceof ServerPlayer ? TICKS_FALLING_SERVER + : TICKS_FALLING_CLIENT; int ticksFalling = ticksFallingMap.getOrDefault(player, 0); if (player.onGround() != player.getDeltaMovement().y() < 0) { @@ -53,10 +55,6 @@ public static void onPlayerTick(PlayerTickEvent.Pre playerTickEvent) { ticksFallingMap.put(player, 0); } - if (player.isSpectator()) { - return; - } - Optional gliderMovementInfoOpt = calculateGliderMovementInfo(player, true, ticksFallingMap); if (gliderMovementInfoOpt.isEmpty()) { return; @@ -69,11 +67,13 @@ public static void onPlayerTick(PlayerTickEvent.Pre playerTickEvent) { } double oldHorizontalSpeed = player.getDeltaMovement().horizontalDistance(); - double x = Math.cos(Math.toRadians(player.yHeadRot + 90)) * (gliderMovementInfo.acceleration() + oldHorizontalSpeed * MOVEMENT_CHANGE_EFFECT); - double z = Math.sin(Math.toRadians(player.yHeadRot + 90)) * (gliderMovementInfo.acceleration() + oldHorizontalSpeed * MOVEMENT_CHANGE_EFFECT); + double x = Math.cos(Math.toRadians(player.yHeadRot + 90)) + * (gliderMovementInfo.acceleration() + oldHorizontalSpeed * MOVEMENT_CHANGE_EFFECT); + double z = Math.sin(Math.toRadians(player.yHeadRot + 90)) + * (gliderMovementInfo.acceleration() + oldHorizontalSpeed * MOVEMENT_CHANGE_EFFECT); - - Vec3 newDeltaMovement = new Vec3(player.getDeltaMovement().x() * (1 - MOVEMENT_CHANGE_EFFECT) + x, verticalSpeed, player.getDeltaMovement().z() * (1 - MOVEMENT_CHANGE_EFFECT) + z); + Vec3 newDeltaMovement = new Vec3(player.getDeltaMovement().x() * (1 - MOVEMENT_CHANGE_EFFECT) + x, + verticalSpeed, player.getDeltaMovement().z() * (1 - MOVEMENT_CHANGE_EFFECT) + z); double speed = newDeltaMovement.length(); if (speed > gliderMovementInfo.maxSpeed()) { newDeltaMovement = newDeltaMovement.scale(gliderMovementInfo.maxSpeed() / newDeltaMovement.length()); @@ -92,16 +92,23 @@ public static void onPlayerTick(PlayerTickEvent.Pre playerTickEvent) { gliderMovementInfo.cause().onHangGliderTick(player); } - public static Optional calculateGliderMovementInfo(Player player, boolean displayDisabledMessage, Map ticksFallingMap) { - if (!player.onGround() - && player.getDeltaMovement().y() < 0 - && !player.isShiftKeyDown() - && !player.isInWater() - && !player.isPassenger() - && ticksFallingMap.getOrDefault(player, 0) > 12) { - Optional disabledReason = IntegrationManager.getFirst(integration -> integration.hangGliderDisabledReason(player)); - Optional gliderMovementInfo = IntegrationManager.getFirst(integration -> integration.getGliderMovementInfo(player)); - if (displayDisabledMessage && disabledReason.isPresent() && gliderMovementInfo.isPresent()) { + public static Optional calculateGliderMovementInfo(Player player, + boolean displayDisabledMessage, Map ticksFallingMap) { + if (areGlideConditionsMet(player, ticksFallingMap)) { + + List infos = new ArrayList<>(); + IntegrationManager.forAll(integration -> integration.getGliderMovementInfo(player).ifPresent(infos::add)); + + Optional disabledReason = Optional.empty(); + Optional gliderMovementInfo = Optional.empty(); + if (!infos.isEmpty()) { + disabledReason = infos.getFirst().cause().hangGliderDisabledReason(player); + // Don't enable flight if a disabled reason is present + if (disabledReason.isEmpty()) { + gliderMovementInfo = Optional.of(infos.getFirst()); + } + } + if (displayDisabledMessage && disabledReason.isPresent()) { player.displayClientMessage(EIOLang.GLIDER_DISABLED.copy().append(disabledReason.get()), true); } return gliderMovementInfo; @@ -110,6 +117,18 @@ public static Optional calculateGliderMovementInfo(Player pl return Optional.empty(); } + public static boolean isGliding(Player player) { + Map ticksFallingMap = player instanceof ServerPlayer ? TICKS_FALLING_SERVER + : TICKS_FALLING_CLIENT; + return calculateGliderMovementInfo(player, false, ticksFallingMap).isPresent(); + } + + private static boolean areGlideConditionsMet(Player player, Map ticksFallingMap) { + return !player.isSpectator() && !player.onGround() && player.getDeltaMovement().y() < 0 + && !player.isShiftKeyDown() && !player.isInWater() && !player.isPassenger() + && ticksFallingMap.getOrDefault(player, 0) > 12; + } + private static class ClientClassLoadingProtection { private static void playSound(Player player) { if (player instanceof LocalPlayer localPlayer && !isGliderPlaying()) { @@ -118,7 +137,8 @@ private static void playSound(Player player) { } private static boolean isGliderPlaying() { - for (SoundInstance soundInstance : Minecraft.getInstance().getSoundManager().soundEngine.instanceBySource.get(SoundSource.PLAYERS)) { + for (SoundInstance soundInstance : Minecraft.getInstance().getSoundManager().soundEngine.instanceBySource + .get(SoundSource.PLAYERS)) { if (soundInstance instanceof WindSoundInstance) { return true; } @@ -131,6 +151,7 @@ private static boolean isGliderPlaying() { private static class WindSoundInstance extends AbstractTickableSoundInstance { private final LocalPlayer player; private int time; + WindSoundInstance(LocalPlayer player) { super(SoundEvents.ELYTRA_FLYING, SoundSource.PLAYERS, SoundInstance.createUnseededRandom()); this.player = player; @@ -143,11 +164,13 @@ private static class WindSoundInstance extends AbstractTickableSoundInstance { public void tick() { ++this.time; - if (!this.player.isRemoved() && (this.time <= 20 || PlayerMovementHandler.calculateGliderMovementInfo(player, false, TICKS_FALLING_CLIENT).isPresent())) { + if (!this.player.isRemoved() && (this.time <= 20 + || PlayerMovementHandler.calculateGliderMovementInfo(player, false, TICKS_FALLING_CLIENT) + .isPresent())) { this.x = this.player.getX(); this.y = this.player.getY(); this.z = this.player.getZ(); - float f = (float)this.player.getDeltaMovement().lengthSqr(); + float f = (float) this.player.getDeltaMovement().lengthSqr(); if (f >= 1.0E-7D) { this.volume = Mth.clamp(f / 4.0F, 0.0F, 1.0F); } else { diff --git a/enderio-base/src/main/java/com/enderio/base/common/init/EIODataComponents.java b/enderio-base/src/main/java/com/enderio/base/common/init/EIODataComponents.java index f87ba5d9bb..f75b3d155a 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/init/EIODataComponents.java +++ b/enderio-base/src/main/java/com/enderio/base/common/init/EIODataComponents.java @@ -69,6 +69,9 @@ public class EIODataComponents { builder -> builder.persistent(EntityFilterCapability.Component.CODEC) .networkSynchronized(EntityFilterCapability.Component.STREAM_CODEC)); + public static Supplier> TRAVEL_ITEM = DATA_COMPONENT_TYPES.registerComponentType( + "travel_item", builder -> builder.persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL)); + public static void register(IEventBus bus) { DATA_COMPONENT_TYPES.register(bus); } diff --git a/enderio-base/src/main/java/com/enderio/base/common/init/EIOItems.java b/enderio-base/src/main/java/com/enderio/base/common/init/EIOItems.java index 5ae9de5db9..0a6f9b05a0 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/init/EIOItems.java +++ b/enderio-base/src/main/java/com/enderio/base/common/init/EIOItems.java @@ -334,8 +334,7 @@ public class EIOItems { // return tempMap; // }); - // public static final RegiliteItem GLIDER = - // gliderItem("glider"); + public static final RegiliteItem GLIDER = gliderItem("glider"); private static RegiliteItem grindingBall(String name, GrindingBallData grindingBallData) { return ITEM_REGISTRY @@ -352,7 +351,7 @@ private static RegiliteItem grindingBall(String name, GrindingBall private static RegiliteItem gliderItem(String name) { return dumbItem(name, HangGliderItem::new).addItemTags(EIOTags.Items.GLIDER) - .setTab(EIOCreativeTabs.MAIN) + .setTab(EIOCreativeTabs.GEAR) .setModelProvider((prov, ctx) -> GliderItemModel.create(ctx.get(), prov)); } diff --git a/enderio-base/src/main/java/com/enderio/base/common/integrations/EnderIOSelfClientIntegration.java b/enderio-base/src/main/java/com/enderio/base/common/integrations/EnderIOSelfClientIntegration.java index 0af9cda763..40d8ed8120 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/integrations/EnderIOSelfClientIntegration.java +++ b/enderio-base/src/main/java/com/enderio/base/common/integrations/EnderIOSelfClientIntegration.java @@ -1,62 +1,48 @@ package com.enderio.base.common.integrations; import com.enderio.base.api.integration.ClientIntegration; +import com.enderio.base.client.EnderIOBaseClient; +import com.enderio.base.common.init.EIOItems; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.datafixers.util.Pair; +import java.util.Optional; import net.minecraft.client.Minecraft; -import net.minecraft.client.model.geom.ModelLayers; -import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.core.Holder; -import net.minecraft.world.item.DyeColor; -import net.minecraft.world.level.block.entity.BannerPattern; - -import java.util.ArrayList; -import java.util.List; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; public class EnderIOSelfClientIntegration implements ClientIntegration { public static final ClientIntegration INSTANCE = new EnderIOSelfClientIntegration(); - private static final ModelPart FLAG = Minecraft.getInstance().getEntityModels().bakeLayer(ModelLayers.BANNER).getChild("flag"); - - private static final List, DyeColor>> PATTERNS = createRandomPattern(); @Override - public void renderHangGlider(PoseStack posestack, MultiBufferSource buffer, int light, int overlay, AbstractClientPlayer player, float pPartialTick) { -// posestack.pushPose(); -// posestack.scale(1.5f,1.5f,1.5f); -// posestack.translate(0, -0.6f, 0.7f); -// Optional activeGliderItem = EnderIOSelfIntegration.INSTANCE.getActiveGliderItem(player); -// if (activeGliderItem.isEmpty()) -// return; -// BakedModel bakedModel = ClientSetup.GLIDER_MODELS.get(activeGliderItem.get()); -// if (bakedModel == null) -// return; -// if (player.isShiftKeyDown()) -// posestack.translate(0, 0.05, 0); -// Minecraft.getInstance().getItemRenderer().render(EIOItems.COLORED_HANG_GLIDERS.get(DyeColor.CYAN).asStack(), ItemDisplayContext.NONE, false, posestack, buffer, light, overlay, bakedModel); -// posestack.scale(0.2f, 0.2f, 0.2f); -// posestack.translate(0, -1f, .5-0.06f); -// for (int i = 0; i < 17 && i < PATTERNS.size() && i > 0; ++i) { -// Pair, DyeColor> pair = PATTERNS.get(i); -// float[] afloat = pair.getSecond().getTextureDiffuseColors(); -// pair.getFirst().unwrapKey().map(Sheets::getBannerMaterial) -// .ifPresent(material -> -// FLAG.render(posestack, material.buffer(buffer, RenderType::entityNoOutline), light, overlay, afloat[0], afloat[1], afloat[2], 1.0F) -// ); -// } -// posestack.popPose(); - } + public void renderHangGlider(PoseStack posestack, MultiBufferSource buffer, int light, int overlay, + AbstractClientPlayer player, float pPartialTick) { + Optional activeGliderItem = EnderIOSelfIntegration.INSTANCE.getActiveGliderItem(player); + if (activeGliderItem.isEmpty()) { + return; + } + BakedModel bakedModel = EnderIOBaseClient.GLIDER_MODELS.get(activeGliderItem.get()); + if (bakedModel == null) { + return; + } - private static List, DyeColor>> createRandomPattern() { - List, DyeColor>> patterns = new ArrayList<>(); - // TODO: 1.20.6: Banner patterns changed, but idk what this even does. - /*Random random = new Random(); - for (int i = random.nextInt(3); i < 6; i++) { - patterns.add(new Pair<>( - BuiltInRegistries.BANNER_PATTERN.getRandom(new LegacyRandomSource(random.nextInt())).orElseThrow(), DyeColor.values()[random.nextInt(DyeColor.values().length)])); - }*/ - return patterns; + posestack.pushPose(); + posestack.scale(1.5f, 1.5f, 1.5f); + posestack.translate(0, -0.6f, 0.7f); + + if (player.isShiftKeyDown()) { + posestack.translate(0, 0.05, 0); + } + Minecraft.getInstance() + .getItemRenderer() + .render(EIOItems.GLIDER.asItem().getDefaultInstance(), ItemDisplayContext.NONE, false, posestack, + buffer, light, overlay, bakedModel); + + posestack.scale(0.2f, 0.2f, 0.2f); + posestack.translate(0, -1f, .5 - 0.06f); + posestack.popPose(); } + } diff --git a/enderio-base/src/main/java/com/enderio/base/common/item/misc/HangGliderItem.java b/enderio-base/src/main/java/com/enderio/base/common/item/misc/HangGliderItem.java index 9a3ca57b27..98446984a3 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/item/misc/HangGliderItem.java +++ b/enderio-base/src/main/java/com/enderio/base/common/item/misc/HangGliderItem.java @@ -1,17 +1,18 @@ package com.enderio.base.common.item.misc; +import javax.annotation.Nullable; import net.minecraft.core.Holder; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Equipable; import net.minecraft.world.item.Item; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nullable; - -public class HangGliderItem extends Item { +public class HangGliderItem extends Item implements Equipable { public HangGliderItem(Properties pProperties) { super(pProperties); @@ -34,6 +35,11 @@ public InteractionResult useOn(UseOnContext pContext) { return super.useOn(pContext); } + @Override + public EquipmentSlot getEquipmentSlot() { + return EquipmentSlot.CHEST; + } + @Nullable public Holder getEquipSound() { return SoundEvents.ARMOR_EQUIP_LEATHER; diff --git a/enderio-base/src/main/java/com/enderio/base/common/item/tool/TravelStaffItem.java b/enderio-base/src/main/java/com/enderio/base/common/item/tool/TravelStaffItem.java index 9add033abf..f3111ecc63 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/item/tool/TravelStaffItem.java +++ b/enderio-base/src/main/java/com/enderio/base/common/item/tool/TravelStaffItem.java @@ -9,6 +9,7 @@ import com.enderio.core.common.energy.ItemStackEnergy; import com.enderio.core.common.item.CreativeTabVariants; import com.enderio.core.common.util.TooltipUtil; +import java.util.List; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -24,15 +25,13 @@ import net.neoforged.neoforge.energy.ComponentEnergyStorage; import net.neoforged.neoforge.energy.IEnergyStorage; -import java.util.List; - public class TravelStaffItem extends Item implements AdvancedTooltipProvider, CreativeTabVariants { - public static ICapabilityProvider ENERGY_STORAGE_PROVIDER = - (stack, v) -> new ComponentEnergyStorage(stack, EIODataComponents.ENERGY.get(), TravelStaffItem.getMaxEnergy()); + public static ICapabilityProvider ENERGY_STORAGE_PROVIDER = (stack, + v) -> new ComponentEnergyStorage(stack, EIODataComponents.ENERGY.get(), TravelStaffItem.getMaxEnergy()); public TravelStaffItem(Properties properties) { - super(properties); + super(properties.component(EIODataComponents.TRAVEL_ITEM, true)); } @Override @@ -50,7 +49,8 @@ public InteractionResultHolder use(Level level, Player player, Intera @Override public InteractionResult useOn(UseOnContext context) { if (getActivationStatus(context.getItemInHand()).isBlock()) { - if (context.getPlayer() != null && tryPerformAction(context.getLevel(), context.getPlayer(), context.getItemInHand())) { + if (context.getPlayer() != null + && tryPerformAction(context.getLevel(), context.getPlayer(), context.getItemInHand())) { return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); } @@ -62,10 +62,10 @@ public InteractionResult useOn(UseOnContext context) { private boolean tryPerformAction(Level level, Player player, ItemStack stack) { boolean isCreative = player.isCreative(); - if (hasResources(stack) || isCreative) { - if (performAction(level, player,stack)) { + if (TravelHandler.hasResources(stack) || isCreative) { + if (performAction(this, level, player)) { if (!level.isClientSide() && !isCreative) { - consumeResources(stack); + TravelHandler.consumeResources(stack); } return true; @@ -81,15 +81,15 @@ private boolean tryPerformAction(Level level, Player player, ItemStack stack) { * Perform your action * @return true if it was a success and you want to consume the resources */ - public boolean performAction(Level level, Player player, ItemStack stack) { + public boolean performAction(Item item, Level level, Player player) { if (player.isShiftKeyDown()) { if (TravelHandler.shortTeleport(level, player)) { - player.getCooldowns().addCooldown(this, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); + player.getCooldowns().addCooldown(item, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); return true; } } else { if (TravelHandler.blockTeleport(level, player)) { - player.getCooldowns().addCooldown(this, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); + player.getCooldowns().addCooldown(item, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); return true; } } @@ -100,14 +100,6 @@ public static int getMaxEnergy() { return BaseConfig.COMMON.ITEMS.TRAVELLING_STAFF_MAX_ENERGY.get(); } - public boolean hasResources(ItemStack stack) { - return ItemStackEnergy.hasEnergy(stack, BaseConfig.COMMON.ITEMS.TRAVELLING_STAFF_ENERGY_USE.get()); - } - - public void consumeResources(ItemStack stack) { - ItemStackEnergy.extractEnergy(stack, BaseConfig.COMMON.ITEMS.TRAVELLING_STAFF_ENERGY_USE.get(), false); - } - protected ActivationStatus getActivationStatus(ItemStack stack) { return ActivationStatus.ALL; } @@ -141,8 +133,10 @@ public int getBarColor(ItemStack pStack) { } @Override - public void addCommonTooltips(ItemStack itemStack, @org.jetbrains.annotations.Nullable Player player, List tooltips) { - String energy = String.format("%,d", ItemStackEnergy.getEnergyStored(itemStack)) + "/" + String.format("%,d", ItemStackEnergy.getMaxEnergyStored(itemStack)); + public void addCommonTooltips(ItemStack itemStack, @org.jetbrains.annotations.Nullable Player player, + List tooltips) { + String energy = String.format("%,d", ItemStackEnergy.getEnergyStored(itemStack)) + "/" + + String.format("%,d", ItemStackEnergy.getMaxEnergyStored(itemStack)); tooltips.add(TooltipUtil.styledWithArgs(EIOLang.ENERGY_AMOUNT, energy)); } diff --git a/enderio-base/src/main/java/com/enderio/base/data/model/item/GliderItemModel.java b/enderio-base/src/main/java/com/enderio/base/data/model/item/GliderItemModel.java index d1a46f27f1..3725ef0a77 100644 --- a/enderio-base/src/main/java/com/enderio/base/data/model/item/GliderItemModel.java +++ b/enderio-base/src/main/java/com/enderio/base/data/model/item/GliderItemModel.java @@ -11,8 +11,13 @@ public class GliderItemModel { public static void create(Item item, ItemModelProvider prov) { ResourceLocation registryName = BuiltInRegistries.ITEM.getKey(item); prov.getBuilder(registryName.getNamespace() + ":enderio_glider/" + registryName.getPath()) - .parent(prov.getExistingFile(EnderIO.loc("glider/glider3d"))) - .texture("0", registryName.getNamespace() + ":models/glider/" + registryName.getPath()); + .parent(prov.getExistingFile(EnderIO.loc("glider/glider3d"))) + .texture("0", registryName.getNamespace() + ":block/glider/" + registryName.getPath()); + // TODO: Couln't get the texture loaded from the models directory so moved it to + // blocks + // TODO: This seems wrong but textures could only be found under either items or + // blocks +// .texture("0", registryName.getNamespace() + ":models/glider/" + registryName.getPath()); prov.basicItem(item); } } diff --git a/enderio-base/src/main/java/com/enderio/base/data/recipe/ItemRecipeProvider.java b/enderio-base/src/main/java/com/enderio/base/data/recipe/ItemRecipeProvider.java index 70f23772c5..036287ba91 100644 --- a/enderio-base/src/main/java/com/enderio/base/data/recipe/ItemRecipeProvider.java +++ b/enderio-base/src/main/java/com/enderio/base/data/recipe/ItemRecipeProvider.java @@ -3,6 +3,7 @@ import com.enderio.base.api.EnderIO; import com.enderio.base.common.init.EIOItems; import com.enderio.base.common.tag.EIOTags; +import java.util.concurrent.CompletableFuture; import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; @@ -14,8 +15,6 @@ import net.minecraft.world.item.Items; import net.neoforged.neoforge.common.Tags; -import java.util.concurrent.CompletableFuture; - public class ItemRecipeProvider extends RecipeProvider { public ItemRecipeProvider(PackOutput packOutput, CompletableFuture registries) { @@ -31,22 +30,24 @@ protected void buildRecipes(RecipeOutput recipeOutput) { private void addGliders(RecipeOutput recipeOutput) { ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.GLIDER_WING.get()) - .pattern(" D") - .pattern(" DL") - .pattern("DLL") - .define('D', EIOTags.Items.INGOTS_DARK_STEEL) - .define('L', Tags.Items.LEATHERS) - .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.DARK_STEEL_INGOT.get())) - .save(recipeOutput); - -// ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.GLIDER.get()) -// .pattern(" D ") -// .pattern("WDW") -// .define('D', EIOItems.DARK_STEEL_INGOT.get()) -// .define('W', EIOItems.GLIDER_WING.get()) -// .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.GLIDER_WING.get())) -// .save(recipeOutput); -// + .pattern(" D") + .pattern(" DL") + .pattern("DLL") + .define('D', EIOTags.Items.INGOTS_DARK_STEEL) + .define('L', Tags.Items.LEATHERS) + .unlockedBy("has_ingredient", + InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.DARK_STEEL_INGOT.get())) + .save(recipeOutput); + + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.GLIDER.get()) + .pattern(" D ") + .pattern("WDW") + .define('D', EIOItems.DARK_STEEL_INGOT.get()) + .define('W', EIOItems.GLIDER_WING.get()) + .unlockedBy("has_ingredient", + InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.GLIDER_WING.get())) + .save(recipeOutput); + // for (Map.Entry> dyeColorItemEntryEntry : EIOItems.COLORED_HANG_GLIDERS.entrySet()) { // ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS, dyeColorItemEntryEntry.getValue().get()) // .requires(EIOItems.GLIDER.get()) @@ -57,90 +58,89 @@ private void addGliders(RecipeOutput recipeOutput) { } private void addTools(RecipeOutput recipeOutput) { - ShapedRecipeBuilder - .shaped(RecipeCategory.TOOLS, EIOItems.YETA_WRENCH.get()) - .define('I', EIOTags.Items.INGOTS_COPPER_ALLOY) - .define('G', EIOTags.Items.GEARS_STONE) - .pattern("I I") - .pattern(" G ") - .pattern(" I ") - .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.COPPER_ALLOY_INGOT.get())) - .save(recipeOutput); - - ShapelessRecipeBuilder - .shapeless(RecipeCategory.TOOLS, EIOItems.COLD_FIRE_IGNITER.get()) - .requires(EIOTags.Items.INGOTS_DARK_STEEL) - .requires(Items.FLINT) - .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.DARK_STEEL_INGOT.get())) - .save(recipeOutput); - - ShapedRecipeBuilder - .shaped(RecipeCategory.TOOLS, EIOItems.COORDINATE_SELECTOR.get()) - .define('I', EIOTags.Items.INGOTS_COPPER_ALLOY) - .define('C', Items.COMPASS) - .define('E', Tags.Items.ENDER_PEARLS) - .pattern("IEI") - .pattern(" CI") - .pattern(" I") - .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.COPPER_ALLOY_INGOT.get())) - .save(recipeOutput); - - ShapedRecipeBuilder - .shaped(RecipeCategory.TOOLS, EIOItems.ELECTROMAGNET.get()) - .define('V', EIOTags.Items.GEMS_VIBRANT_CRYSTAL) - .define('C', EIOTags.Items.INGOTS_CONDUCTIVE_ALLOY) - .define('E', EIOTags.Items.INGOTS_COPPER_ALLOY) - .pattern("CVC") - .pattern("C C") - .pattern("E E") - .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.VIBRANT_CRYSTAL.get())) - .save(recipeOutput); - - ShapedRecipeBuilder - .shaped(RecipeCategory.TOOLS, EIOItems.EXPERIENCE_ROD.get()) - .pattern(" I") - .pattern(" E ") - .pattern("I ") - .define('I', EIOTags.Items.INGOTS_SOULARIUM) - .define('E', EIOTags.Items.INGOTS_ENERGETIC_ALLOY) - .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.SOULARIUM_INGOT)) - .save(recipeOutput); - - ShapedRecipeBuilder - .shaped(RecipeCategory.TOOLS, EIOItems.LEVITATION_STAFF.get()) - .define('C', EIOTags.Items.GEMS_PRESCIENT_CRYSTAL) - .define('R', EIOItems.INFINITY_ROD.get()) - .pattern(" C") - .pattern(" R ") - .pattern("R ") - .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.PULSATING_CRYSTAL.get())) - .save(recipeOutput); - - ShapedRecipeBuilder - .shaped(RecipeCategory.TOOLS, EIOItems.TRAVEL_STAFF.get()) - .define('C', EIOTags.Items.GEMS_ENDER_CRYSTAL) - .define('I', EIOTags.Items.INGOTS_DARK_STEEL) - .pattern(" C") - .pattern(" I ") - .pattern("I ") - .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.ENDER_CRYSTAL.get())) - .save(recipeOutput); + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.YETA_WRENCH.get()) + .define('I', EIOTags.Items.INGOTS_COPPER_ALLOY) + .define('G', EIOTags.Items.GEARS_STONE) + .pattern("I I") + .pattern(" G ") + .pattern(" I ") + .unlockedBy("has_ingredient", + InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.COPPER_ALLOY_INGOT.get())) + .save(recipeOutput); + + ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS, EIOItems.COLD_FIRE_IGNITER.get()) + .requires(EIOTags.Items.INGOTS_DARK_STEEL) + .requires(Items.FLINT) + .unlockedBy("has_ingredient", + InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.DARK_STEEL_INGOT.get())) + .save(recipeOutput); + + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.COORDINATE_SELECTOR.get()) + .define('I', EIOTags.Items.INGOTS_COPPER_ALLOY) + .define('C', Items.COMPASS) + .define('E', Tags.Items.ENDER_PEARLS) + .pattern("IEI") + .pattern(" CI") + .pattern(" I") + .unlockedBy("has_ingredient", + InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.COPPER_ALLOY_INGOT.get())) + .save(recipeOutput); + + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.ELECTROMAGNET.get()) + .define('V', EIOTags.Items.GEMS_VIBRANT_CRYSTAL) + .define('C', EIOTags.Items.INGOTS_CONDUCTIVE_ALLOY) + .define('E', EIOTags.Items.INGOTS_COPPER_ALLOY) + .pattern("CVC") + .pattern("C C") + .pattern("E E") + .unlockedBy("has_ingredient", + InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.VIBRANT_CRYSTAL.get())) + .save(recipeOutput); + + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.EXPERIENCE_ROD.get()) + .pattern(" I") + .pattern(" E ") + .pattern("I ") + .define('I', EIOTags.Items.INGOTS_SOULARIUM) + .define('E', EIOTags.Items.INGOTS_ENERGETIC_ALLOY) + .unlockedBy("has_ingredient", InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.SOULARIUM_INGOT)) + .save(recipeOutput); + + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.LEVITATION_STAFF.get()) + .define('C', EIOTags.Items.GEMS_PRESCIENT_CRYSTAL) + .define('R', EIOItems.INFINITY_ROD.get()) + .pattern(" C") + .pattern(" R ") + .pattern("R ") + .unlockedBy("has_ingredient", + InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.PULSATING_CRYSTAL.get())) + .save(recipeOutput); + + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, EIOItems.TRAVEL_STAFF.get()) + .define('C', EIOTags.Items.GEMS_ENDER_CRYSTAL) + .define('I', EIOTags.Items.INGOTS_DARK_STEEL) + .pattern(" C") + .pattern(" I ") + .pattern("I ") + .unlockedBy("has_ingredient", + InventoryChangeTrigger.TriggerInstance.hasItems(EIOItems.ENDER_CRYSTAL.get())) + .save(recipeOutput); } private void eraseFilterRecipes(RecipeOutput recipeOutput) { ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, EIOItems.BASIC_ITEM_FILTER) - .requires(EIOItems.BASIC_ITEM_FILTER) - .unlockedBy("has_ingredient", has(EIOItems.BASIC_ITEM_FILTER)) - .save(recipeOutput, EnderIO.loc("erase_basic_item_filter")); + .requires(EIOItems.BASIC_ITEM_FILTER) + .unlockedBy("has_ingredient", has(EIOItems.BASIC_ITEM_FILTER)) + .save(recipeOutput, EnderIO.loc("erase_basic_item_filter")); ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, EIOItems.ADVANCED_ITEM_FILTER) - .requires(EIOItems.ADVANCED_ITEM_FILTER) - .unlockedBy("has_ingredient", has(EIOItems.ADVANCED_ITEM_FILTER)) - .save(recipeOutput, EnderIO.loc("erase_advanced_item_filter")); + .requires(EIOItems.ADVANCED_ITEM_FILTER) + .unlockedBy("has_ingredient", has(EIOItems.ADVANCED_ITEM_FILTER)) + .save(recipeOutput, EnderIO.loc("erase_advanced_item_filter")); ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, EIOItems.BASIC_FLUID_FILTER) - .requires(EIOItems.BASIC_FLUID_FILTER) - .unlockedBy("has_ingredient", has(EIOItems.BASIC_FLUID_FILTER)) - .save(recipeOutput, EnderIO.loc("erase_basic_fluid_filter")); + .requires(EIOItems.BASIC_FLUID_FILTER) + .unlockedBy("has_ingredient", has(EIOItems.BASIC_FLUID_FILTER)) + .save(recipeOutput, EnderIO.loc("erase_basic_fluid_filter")); } } diff --git a/enderio-base/src/main/java/com/enderio/base/mixin/GliderRotationMixin.java b/enderio-base/src/main/java/com/enderio/base/mixin/GliderRotationMixin.java index 105092e7b0..243643f89c 100644 --- a/enderio-base/src/main/java/com/enderio/base/mixin/GliderRotationMixin.java +++ b/enderio-base/src/main/java/com/enderio/base/mixin/GliderRotationMixin.java @@ -1,21 +1,23 @@ package com.enderio.base.mixin; +import com.enderio.base.client.renderer.glider.ActiveGliderRenderLayer; +import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(LivingEntityRenderer.class) public class GliderRotationMixin { - // TODO: NEO-PORT: Glider mixin - /*@Inject(method = "setupRotations", - at = @At( - value = "INVOKE", - target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lcom/mojang/math/Quaternion;)V", - ordinal = 0, shift = At.Shift.AFTER), - remap = false) - public void enderio$rotatePlayerInGlider(LivingEntity pEntityLiving, PoseStack pMatrixStack, float pAgeInTicks, float pRotationYaw, float pPartialTicks, CallbackInfo ci) { - if (pEntityLiving instanceof Player player && PlayerMovementHandler.calculateGliderMovementInfo(player, false).isPresent()) { - ActiveGliderRenderLayer.setupAnim(player, pMatrixStack); + @Inject(method = "setupRotations", at = @At(value = "RETURN"), cancellable = true, remap = false) + public void test(LivingEntity entity, PoseStack poseStack, float bob, float yBodyRot, float partialTick, + float scale, CallbackInfo ci) { + if (entity instanceof Player player) { + ActiveGliderRenderLayer.setupAnim(player, poseStack); } - }*/ + } } diff --git a/enderio-base/src/main/java/com/enderio/base/mixin/LivingEntityMixin.java b/enderio-base/src/main/java/com/enderio/base/mixin/LivingEntityMixin.java deleted file mode 100644 index 197cf9632e..0000000000 --- a/enderio-base/src/main/java/com/enderio/base/mixin/LivingEntityMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.enderio.base.mixin; - -import com.enderio.base.common.tag.EIOTags; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(LivingEntity.class) -public class LivingEntityMixin { - - /** - * Mixin to allow everything with the enderio:tools/glider tag in the Chestplate Slot - * @param pItem - * @param cir - */ - @Inject(method = "getEquipmentSlotForItem", at = @At(value = "HEAD"), cancellable = true, remap = false) - private void enderio$allowTagGlidersInChestplateSlot(ItemStack pItem, CallbackInfoReturnable cir) { - if (pItem.is(EIOTags.Items.GLIDER)) { - cir.setReturnValue(EquipmentSlot.CHEST); - } - } -} diff --git a/enderio-base/src/main/resources/assets/enderio/models/glider/glider3d.json b/enderio-base/src/main/resources/assets/enderio/models/glider/glider3d.json new file mode 100644 index 0000000000..c059bf1c30 --- /dev/null +++ b/enderio-base/src/main/resources/assets/enderio/models/glider/glider3d.json @@ -0,0 +1,32 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "elements": [ + { + "from": [7.39165, -3, 5.38761], + "to": [23.39165, 29, 5.38761], + "rotation": {"angle": 22.5, "axis": "y", "origin": [15.39165, 13, 5.38761]}, + "faces": { + "north": {"uv": [4, 8, 8, 0], "rotation": 180, "texture": "#0"}, + "south": {"uv": [4, 0, 8, 8], "texture": "#0"} + } + }, + { + "from": [-7.39065, -3, 5.38761], + "to": [8.60935, 29, 5.38761], + "rotation": {"angle": -22.5, "axis": "y", "origin": [0.60935, 13, 5.38761]}, + "faces": { + "north": {"uv": [4, 0, 0, 8], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 8], "texture": "#0"} + } + }, + { + "from": [-8, 8, -8], + "to": [24, 8, 8], + "faces": { + "up": {"uv": [8, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 0, 16, 4], "texture": "#0"} + } + } + ] +} diff --git a/enderio-base/src/main/resources/assets/enderio/textures/block/glider/glider.png b/enderio-base/src/main/resources/assets/enderio/textures/block/glider/glider.png new file mode 100644 index 0000000000..1a69dc28e0 Binary files /dev/null and b/enderio-base/src/main/resources/assets/enderio/textures/block/glider/glider.png differ diff --git a/enderio-base/src/main/resources/assets/enderio/textures/item/glider.png b/enderio-base/src/main/resources/assets/enderio/textures/item/glider.png new file mode 100644 index 0000000000..1c80f3103c Binary files /dev/null and b/enderio-base/src/main/resources/assets/enderio/textures/item/glider.png differ diff --git a/enderio-base/src/main/resources/enderiobase.mixins.json b/enderio-base/src/main/resources/enderiobase.mixins.json index 509fdb2a9c..307e169b1c 100644 --- a/enderio-base/src/main/resources/enderiobase.mixins.json +++ b/enderio-base/src/main/resources/enderiobase.mixins.json @@ -2,9 +2,6 @@ "required" : true, "package" : "com.enderio.base.mixin", "compatibilityLevel" : "JAVA_17", - "mixins" : [ - "LivingEntityMixin" - ], "client" : [ "GliderRotationMixin" ],