From 5d13535ef91ab81d9cc59eda59288d85fd69e8a4 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 24 Sep 2024 15:41:06 -0400 Subject: [PATCH 001/159] Remove wireless charging station --- .../global_wireless_charging_station.json | 7 -- ...dimensional_wireless_charging_station.json | 7 -- .../local_wireless_charging_station.json | 7 -- .../lang/en_us.json | 3 - .../global_wireless_charging_station.json | 11 -- ...dimensional_wireless_charging_station.json | 11 -- .../local_wireless_charging_station.json | 11 -- .../global_wireless_charging_station.json | 3 - ...dimensional_wireless_charging_station.json | 3 - .../item/local_wireless_charging_station.json | 3 - .../global_wireless_charging_station.json | 21 ---- ...dimensional_wireless_charging_station.json | 21 ---- .../local_wireless_charging_station.json | 21 ---- .../assembler.json | 33 ----- .../craft.json | 30 ----- .../assembler.json | 33 ----- .../craft.json | 30 ----- .../assembler.json | 33 ----- .../craft.json | 30 ----- .../tags/block/mineable/pickaxe.json | 3 - .../tags/block/needs_stone_tool.json | 3 - .../EIMachines.java | 20 ---- ...chineItemRecipesServerDatagenProvider.java | 46 ------- .../WirelessChargerMachineBlockEntity.java | 113 ------------------ .../component/WirelessChargingComponent.java | 89 -------------- 25 files changed, 592 deletions(-) delete mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/global_wireless_charging_station.json delete mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/interdimensional_wireless_charging_station.json delete mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/local_wireless_charging_station.json delete mode 100644 src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json delete mode 100644 src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json delete mode 100644 src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json delete mode 100644 src/generated/resources/assets/extended_industrialization/models/item/global_wireless_charging_station.json delete mode 100644 src/generated/resources/assets/extended_industrialization/models/item/interdimensional_wireless_charging_station.json delete mode 100644 src/generated/resources/assets/extended_industrialization/models/item/local_wireless_charging_station.json delete mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/global_wireless_charging_station.json delete mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/interdimensional_wireless_charging_station.json delete mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/local_wireless_charging_station.json delete mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/global_wireless_charging_station/assembler.json delete mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/global_wireless_charging_station/craft.json delete mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/interdimensional_wireless_charging_station/assembler.json delete mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/interdimensional_wireless_charging_station/craft.json delete mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/local_wireless_charging_station/assembler.json delete mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/local_wireless_charging_station/craft.json delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/WirelessChargerMachineBlockEntity.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/WirelessChargingComponent.java diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/global_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/blockstates/global_wireless_charging_station.json deleted file mode 100644 index b5e8577b..00000000 --- a/src/generated/resources/assets/extended_industrialization/blockstates/global_wireless_charging_station.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "extended_industrialization:block/global_wireless_charging_station" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/interdimensional_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/blockstates/interdimensional_wireless_charging_station.json deleted file mode 100644 index 005b2094..00000000 --- a/src/generated/resources/assets/extended_industrialization/blockstates/interdimensional_wireless_charging_station.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "extended_industrialization:block/interdimensional_wireless_charging_station" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/local_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/blockstates/local_wireless_charging_station.json deleted file mode 100644 index 98aa0aeb..00000000 --- a/src/generated/resources/assets/extended_industrialization/blockstates/local_wireless_charging_station.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "extended_industrialization:block/local_wireless_charging_station" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 317411cc..0d525695 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -14,16 +14,13 @@ "block.extended_industrialization.electric_farmer": "Electric Farmer", "block.extended_industrialization.electric_honey_extractor": "Electric Honey Extractor", "block.extended_industrialization.electric_waste_collector": "Electric Waste Collector", - "block.extended_industrialization.global_wireless_charging_station": "Global Wireless Charging Station", "block.extended_industrialization.honey": "Honey", "block.extended_industrialization.hv_solar_panel": "HV Solar Panel", - "block.extended_industrialization.interdimensional_wireless_charging_station": "Interdimensional Wireless Charging Station", "block.extended_industrialization.large_configurable_chest": "Large Configurable Chest", "block.extended_industrialization.large_electric_furnace": "Large Electric Furnace", "block.extended_industrialization.large_electric_macerator": "Large Electric Macerator", "block.extended_industrialization.large_steam_furnace": "Large Steam Furnace", "block.extended_industrialization.large_steam_macerator": "Large Steam Macerator", - "block.extended_industrialization.local_wireless_charging_station": "Local Wireless Charging Station", "block.extended_industrialization.lv_solar_panel": "LV Solar Panel", "block.extended_industrialization.machine_chainer": "Machine Chainer", "block.extended_industrialization.machine_chainer_relay": "Machine Chainer Relay", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json deleted file mode 100644 index cbd26897..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "casing": "hv", - "default_overlays": { - "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", - "item_auto": "modern_industrialization:block/overlays/item_auto", - "output": "modern_industrialization:block/overlays/output", - "side": "extended_industrialization:block/machines/wireless_charging_station/global/overlay_side", - "top": "extended_industrialization:block/machines/wireless_charging_station/global/overlay_top" - }, - "loader": "modern_industrialization:machine" -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json deleted file mode 100644 index 2f844bc3..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "casing": "ev", - "default_overlays": { - "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", - "item_auto": "modern_industrialization:block/overlays/item_auto", - "output": "modern_industrialization:block/overlays/output", - "side": "extended_industrialization:block/machines/wireless_charging_station/interdimensional/overlay_side", - "top": "extended_industrialization:block/machines/wireless_charging_station/interdimensional/overlay_top" - }, - "loader": "modern_industrialization:machine" -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json deleted file mode 100644 index 87b282b9..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "casing": "mv", - "default_overlays": { - "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", - "item_auto": "modern_industrialization:block/overlays/item_auto", - "output": "modern_industrialization:block/overlays/output", - "side": "extended_industrialization:block/machines/wireless_charging_station/local/overlay_side", - "top": "extended_industrialization:block/machines/wireless_charging_station/local/overlay_top" - }, - "loader": "modern_industrialization:machine" -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/global_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/item/global_wireless_charging_station.json deleted file mode 100644 index 76f199b4..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/item/global_wireless_charging_station.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "extended_industrialization:block/global_wireless_charging_station" -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/interdimensional_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/item/interdimensional_wireless_charging_station.json deleted file mode 100644 index c4249252..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/item/interdimensional_wireless_charging_station.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "extended_industrialization:block/interdimensional_wireless_charging_station" -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/local_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/item/local_wireless_charging_station.json deleted file mode 100644 index 618de552..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/item/local_wireless_charging_station.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "extended_industrialization:block/local_wireless_charging_station" -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/global_wireless_charging_station.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/global_wireless_charging_station.json deleted file mode 100644 index aabfc03c..00000000 --- a/src/generated/resources/data/extended_industrialization/loot_table/blocks/global_wireless_charging_station.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "extended_industrialization:global_wireless_charging_station" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "extended_industrialization:blocks/global_wireless_charging_station" -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/interdimensional_wireless_charging_station.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/interdimensional_wireless_charging_station.json deleted file mode 100644 index bf562baa..00000000 --- a/src/generated/resources/data/extended_industrialization/loot_table/blocks/interdimensional_wireless_charging_station.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "extended_industrialization:interdimensional_wireless_charging_station" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "extended_industrialization:blocks/interdimensional_wireless_charging_station" -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/local_wireless_charging_station.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/local_wireless_charging_station.json deleted file mode 100644 index 44001b8e..00000000 --- a/src/generated/resources/data/extended_industrialization/loot_table/blocks/local_wireless_charging_station.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "extended_industrialization:local_wireless_charging_station" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "extended_industrialization:blocks/local_wireless_charging_station" -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/global_wireless_charging_station/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/global_wireless_charging_station/assembler.json deleted file mode 100644 index e058c2c0..00000000 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/global_wireless_charging_station/assembler.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "modern_industrialization:assembler", - "duration": 200, - "eu": 8, - "item_inputs": [ - { - "amount": 2, - "item": "modern_industrialization:sodium_battery" - }, - { - "amount": 4, - "item": "modern_industrialization:digital_circuit" - }, - { - "amount": 1, - "item": "modern_industrialization:kanthal_coil" - }, - { - "amount": 1, - "item": "modern_industrialization:aluminum_cable" - }, - { - "amount": 1, - "item": "modern_industrialization:turbo_machine_hull" - } - ], - "item_outputs": [ - { - "amount": 1, - "item": "extended_industrialization:global_wireless_charging_station" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/global_wireless_charging_station/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/global_wireless_charging_station/craft.json deleted file mode 100644 index 1afb75ba..00000000 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/global_wireless_charging_station/craft.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "B": { - "item": "modern_industrialization:sodium_battery" - }, - "C": { - "item": "modern_industrialization:digital_circuit" - }, - "H": { - "item": "modern_industrialization:turbo_machine_hull" - }, - "c": { - "item": "modern_industrialization:kanthal_coil" - }, - "w": { - "item": "modern_industrialization:aluminum_cable" - } - }, - "pattern": [ - "CcC", - "BHB", - "CwC" - ], - "result": { - "count": 1, - "id": "extended_industrialization:global_wireless_charging_station" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/interdimensional_wireless_charging_station/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/interdimensional_wireless_charging_station/assembler.json deleted file mode 100644 index b30303fb..00000000 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/interdimensional_wireless_charging_station/assembler.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "modern_industrialization:assembler", - "duration": 200, - "eu": 8, - "item_inputs": [ - { - "amount": 2, - "item": "modern_industrialization:cadmium_battery" - }, - { - "amount": 4, - "item": "modern_industrialization:processing_unit" - }, - { - "amount": 1, - "item": "modern_industrialization:superconductor_coil" - }, - { - "amount": 1, - "item": "modern_industrialization:annealed_copper_cable" - }, - { - "amount": 1, - "item": "modern_industrialization:highly_advanced_machine_hull" - } - ], - "item_outputs": [ - { - "amount": 1, - "item": "extended_industrialization:interdimensional_wireless_charging_station" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/interdimensional_wireless_charging_station/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/interdimensional_wireless_charging_station/craft.json deleted file mode 100644 index 933cfbb4..00000000 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/interdimensional_wireless_charging_station/craft.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "B": { - "item": "modern_industrialization:cadmium_battery" - }, - "C": { - "item": "modern_industrialization:processing_unit" - }, - "H": { - "item": "modern_industrialization:highly_advanced_machine_hull" - }, - "c": { - "item": "modern_industrialization:superconductor_coil" - }, - "w": { - "item": "modern_industrialization:annealed_copper_cable" - } - }, - "pattern": [ - "CcC", - "BHB", - "CwC" - ], - "result": { - "count": 1, - "id": "extended_industrialization:interdimensional_wireless_charging_station" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/local_wireless_charging_station/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/local_wireless_charging_station/assembler.json deleted file mode 100644 index 013214e6..00000000 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/local_wireless_charging_station/assembler.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "modern_industrialization:assembler", - "duration": 200, - "eu": 8, - "item_inputs": [ - { - "amount": 2, - "item": "modern_industrialization:silicon_battery" - }, - { - "amount": 4, - "item": "modern_industrialization:electronic_circuit" - }, - { - "amount": 1, - "item": "modern_industrialization:cupronickel_coil" - }, - { - "amount": 1, - "item": "modern_industrialization:electrum_cable" - }, - { - "amount": 1, - "item": "modern_industrialization:advanced_machine_hull" - } - ], - "item_outputs": [ - { - "amount": 1, - "item": "extended_industrialization:local_wireless_charging_station" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/local_wireless_charging_station/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/local_wireless_charging_station/craft.json deleted file mode 100644 index eb8d0b35..00000000 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/local_wireless_charging_station/craft.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "B": { - "item": "modern_industrialization:silicon_battery" - }, - "C": { - "item": "modern_industrialization:electronic_circuit" - }, - "H": { - "item": "modern_industrialization:advanced_machine_hull" - }, - "c": { - "item": "modern_industrialization:cupronickel_coil" - }, - "w": { - "item": "modern_industrialization:electrum_cable" - } - }, - "pattern": [ - "CcC", - "BHB", - "CwC" - ], - "result": { - "count": 1, - "id": "extended_industrialization:local_wireless_charging_station" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 5d1a2ee0..09a68bf7 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -12,15 +12,12 @@ "extended_industrialization:electric_farmer", "extended_industrialization:electric_honey_extractor", "extended_industrialization:electric_waste_collector", - "extended_industrialization:global_wireless_charging_station", "extended_industrialization:hv_solar_panel", - "extended_industrialization:interdimensional_wireless_charging_station", "extended_industrialization:large_configurable_chest", "extended_industrialization:large_electric_furnace", "extended_industrialization:large_electric_macerator", "extended_industrialization:large_steam_furnace", "extended_industrialization:large_steam_macerator", - "extended_industrialization:local_wireless_charging_station", "extended_industrialization:lv_solar_panel", "extended_industrialization:machine_chainer", "extended_industrialization:machine_chainer_relay", diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index 5d1a2ee0..09a68bf7 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -12,15 +12,12 @@ "extended_industrialization:electric_farmer", "extended_industrialization:electric_honey_extractor", "extended_industrialization:electric_waste_collector", - "extended_industrialization:global_wireless_charging_station", "extended_industrialization:hv_solar_panel", - "extended_industrialization:interdimensional_wireless_charging_station", "extended_industrialization:large_configurable_chest", "extended_industrialization:large_electric_furnace", "extended_industrialization:large_electric_macerator", "extended_industrialization:large_steam_furnace", "extended_industrialization:large_steam_macerator", - "extended_industrialization:local_wireless_charging_station", "extended_industrialization:lv_solar_panel", "extended_industrialization:machine_chainer", "extended_industrialization:machine_chainer_relay", diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index 48073749..76a4927d 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -28,7 +28,6 @@ import net.swedz.extended_industrialization.machines.blockentity.SolarBoilerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarPanelMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.UniversalTransformerMachineBlockEntity; -import net.swedz.extended_industrialization.machines.blockentity.WirelessChargerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.ElectricBreweryMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.SteamBreweryMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.fluidharvesting.ElectricFluidHarvestingMachineBlockEntity; @@ -394,25 +393,6 @@ public static void singleBlockSpecial(SingleBlockSpecialMachinesMIHookContext ho ); } - hook.register( - "Local Wireless Charging Station", "local_wireless_charging_station", "wireless_charging_station/local", - CableTier.MV.casing, false, true, true, false, - (bep) -> new WirelessChargerMachineBlockEntity(bep, EI.id("local_wireless_charging_station"), CableTier.MV, (m, p) -> m.getBlockPos().closerThan(p.blockPosition(), EIConfig.localWirelessChargingStationRange)), - WirelessChargerMachineBlockEntity::registerEnergyApi - ); - hook.register( - "Global Wireless Charging Station", "global_wireless_charging_station", "wireless_charging_station/global", - CableTier.HV.casing, false, true, true, false, - (bep) -> new WirelessChargerMachineBlockEntity(bep, EI.id("global_wireless_charging_station"), CableTier.HV, (m, p) -> m.getLevel() == p.level()), - WirelessChargerMachineBlockEntity::registerEnergyApi - ); - hook.register( - "Interdimensional Wireless Charging Station", "interdimensional_wireless_charging_station", "wireless_charging_station/interdimensional", - CableTier.EV.casing, false, true, true, false, - (bep) -> new WirelessChargerMachineBlockEntity(bep, EI.id("interdimensional_wireless_charging_station"), CableTier.EV, (m, p) -> true), - WirelessChargerMachineBlockEntity::registerEnergyApi - ); - hook.register( "Large Configurable Chest", "large_configurable_chest", "large_configurable_chest", Casings.LARGE_STEEL_CRATE, false, false, false, false, diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java index 1dca3026..157f0667 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java @@ -538,51 +538,6 @@ private static void solarPanel(RecipeOutput output) ); } - private static void wirelessChargingStation(RecipeOutput output) - { - addBasicCraftingMachineRecipes( - "local_wireless_charging_station", - (builder) -> builder - .define('C', "modern_industrialization:electronic_circuit") - .define('c', "modern_industrialization:cupronickel_coil") - .define('B', "modern_industrialization:silicon_battery") - .define('H', "modern_industrialization:advanced_machine_hull") - .define('w', "modern_industrialization:electrum_cable") - .pattern("CcC") - .pattern("BHB") - .pattern("CwC"), - output - ); - - addBasicCraftingMachineRecipes( - "global_wireless_charging_station", - (builder) -> builder - .define('C', "modern_industrialization:digital_circuit") - .define('c', "modern_industrialization:kanthal_coil") - .define('B', "modern_industrialization:sodium_battery") - .define('H', "modern_industrialization:turbo_machine_hull") - .define('w', "modern_industrialization:aluminum_cable") - .pattern("CcC") - .pattern("BHB") - .pattern("CwC"), - output - ); - - addBasicCraftingMachineRecipes( - "interdimensional_wireless_charging_station", - (builder) -> builder - .define('C', "modern_industrialization:processing_unit") - .define('c', "modern_industrialization:superconductor_coil") - .define('B', "modern_industrialization:cadmium_battery") - .define('H', "modern_industrialization:highly_advanced_machine_hull") - .define('w', "modern_industrialization:annealed_copper_cable") - .pattern("CcC") - .pattern("BHB") - .pattern("CwC"), - output - ); - } - private static void largeConfigurableChest(RecipeOutput output) { addBasicCraftingMachineRecipes( @@ -627,7 +582,6 @@ protected void buildRecipes(RecipeOutput output) universalTransformer(output); machineChainer(output); solarPanel(output); - wirelessChargingStation(output); largeConfigurableChest(output); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/WirelessChargerMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/WirelessChargerMachineBlockEntity.java deleted file mode 100644 index a25b5aa6..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/WirelessChargerMachineBlockEntity.java +++ /dev/null @@ -1,113 +0,0 @@ -package net.swedz.extended_industrialization.machines.blockentity; - -import aztech.modern_industrialization.MICapabilities; -import aztech.modern_industrialization.api.energy.CableTier; -import aztech.modern_industrialization.api.energy.EnergyApi; -import aztech.modern_industrialization.api.energy.MIEnergyStorage; -import aztech.modern_industrialization.api.machine.component.EnergyAccess; -import aztech.modern_industrialization.api.machine.holder.EnergyComponentHolder; -import aztech.modern_industrialization.inventory.MIInventory; -import aztech.modern_industrialization.machines.BEP; -import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.machines.components.EnergyComponent; -import aztech.modern_industrialization.machines.components.OrientationComponent; -import aztech.modern_industrialization.machines.components.RedstoneControlComponent; -import aztech.modern_industrialization.machines.gui.MachineGuiParameters; -import aztech.modern_industrialization.machines.guicomponents.EnergyBar; -import aztech.modern_industrialization.machines.guicomponents.SlotPanel; -import aztech.modern_industrialization.machines.models.MachineModelClientData; -import aztech.modern_industrialization.util.Tickable; -import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.swedz.extended_industrialization.machines.component.WirelessChargingComponent; - -import java.util.function.BiPredicate; - -public final class WirelessChargerMachineBlockEntity extends MachineBlockEntity implements EnergyComponentHolder, Tickable -{ - private final RedstoneControlComponent redstoneControl; - - private final EnergyComponent energy; - private final MIEnergyStorage insertable; - - private final WirelessChargingComponent wirelessCharging; - - public WirelessChargerMachineBlockEntity(BEP bep, ResourceLocation blockId, CableTier tier, BiPredicate filter) - { - super( - bep, - new MachineGuiParameters.Builder(blockId, false).build(), - new OrientationComponent.Params(false, false, false) - ); - - redstoneControl = new RedstoneControlComponent(); - - energy = new EnergyComponent(this, () -> tier.eu * 100); - insertable = energy.buildInsertable((otherTier) -> otherTier == tier); - - wirelessCharging = new WirelessChargingComponent(this, energy, filter, () -> tier.eu * 8); - - this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(76, 39), energy::getEu, energy::getCapacity)); - - this.registerGuiComponent(new SlotPanel.Server(this) - .withRedstoneControl(redstoneControl)); - - this.registerComponents(energy, redstoneControl, wirelessCharging); - } - - @Override - public EnergyAccess getEnergyComponent() - { - return energy; - } - - @Override - public MIInventory getInventory() - { - return MIInventory.EMPTY; - } - - @Override - protected MachineModelClientData getMachineModelData() - { - MachineModelClientData data = new MachineModelClientData(); - orientation.writeModelData(data); - return data; - } - - @Override - public void tick() - { - if(level.isClientSide()) - { - return; - } - - if(redstoneControl.doAllowNormalOperation(this)) - { - wirelessCharging.tick(); - } - } - - @Override - protected ItemInteractionResult useItemOn(Player player, InteractionHand hand, Direction face) - { - ItemInteractionResult result = super.useItemOn(player, hand, face); - if(!result.consumesAction()) - { - result = redstoneControl.onUse(this, player, hand); - } - return result; - } - - public static void registerEnergyApi(BlockEntityType bet) - { - MICapabilities.onEvent((event) -> - event.registerBlockEntity(EnergyApi.SIDED, bet, (be, direction) -> - ((WirelessChargerMachineBlockEntity) be).insertable)); - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/WirelessChargingComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/WirelessChargingComponent.java deleted file mode 100644 index 9e63f36b..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/WirelessChargingComponent.java +++ /dev/null @@ -1,89 +0,0 @@ -package net.swedz.extended_industrialization.machines.component; - -import aztech.modern_industrialization.api.energy.EnergyApi; -import aztech.modern_industrialization.machines.IComponent; -import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.machines.components.EnergyComponent; -import aztech.modern_industrialization.util.Simulation; -import com.google.common.collect.Lists; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; -import net.swedz.tesseract.neoforge.compat.mi.helper.ChargeInventoryHelper; -import net.swedz.tesseract.neoforge.proxy.Proxies; - -import java.util.List; -import java.util.Optional; -import java.util.UUID; -import java.util.function.BiPredicate; -import java.util.function.Supplier; - -public final class WirelessChargingComponent implements IComponent.ServerOnly -{ - private final MachineBlockEntity machine; - - private final EnergyComponent energy; - - private final BiPredicate filter; - private final Supplier maxEuTransfer; - - public WirelessChargingComponent(MachineBlockEntity machine, EnergyComponent energy, BiPredicate filter, Supplier maxEuTransfer) - { - this.machine = machine; - this.energy = energy; - this.filter = filter; - this.maxEuTransfer = maxEuTransfer; - } - - private UUID getPlacerId() - { - return machine.placedBy.placerId; - } - - public Optional getPlayer() - { - ServerPlayer player = machine.getLevel().getServer().getPlayerList().getPlayer(this.getPlacerId()); - return player == null || !filter.test(machine, player) ? Optional.empty() : Optional.of(player); - } - - private long charge(Player player, long maxEu) - { - Inventory inventory = player.getInventory(); - - List items = Lists.newArrayList(); - items.addAll(inventory.armor); - items.addAll(inventory.items); - items.addAll(inventory.offhand); - items.addAll(Proxies.get(EIModSlotProxy.class).getContents(player, (stack) -> stack.getCapability(EnergyApi.ITEM) != null)); - - return ChargeInventoryHelper.charge(items, maxEu, false); - } - - public void tick() - { - Optional playerOptional = this.getPlayer(); - if(playerOptional.isPresent()) - { - Player player = playerOptional.get(); - - long eu = maxEuTransfer.get(); - eu = energy.consumeEu(eu, Simulation.SIMULATE); - eu = this.charge(player, eu); - energy.consumeEu(eu, Simulation.ACT); - } - } - - @Override - public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) - { - } - - @Override - public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) - { - } -} From 4738195e3385ff8b7ec13ae0b9a5f447e8653fa7 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 24 Sep 2024 18:48:23 -0400 Subject: [PATCH 002/159] Tiered multiblock shape building api (will be moved to Tesseract) --- .../tieredshapes/DataMultiblockTier.java | 9 ++ .../machines/tieredshapes/MultiblockTier.java | 16 +++ .../tieredshapes/MultiblockTieredShapes.java | 110 ++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMultiblockTier.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTier.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMultiblockTier.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMultiblockTier.java new file mode 100644 index 00000000..ccfee0f2 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMultiblockTier.java @@ -0,0 +1,9 @@ +package net.swedz.extended_industrialization.machines.tieredshapes; + +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.block.Block; + +public interface DataMultiblockTier +{ + T wrap(ResourceKey key); +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTier.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTier.java new file mode 100644 index 00000000..7df7960e --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTier.java @@ -0,0 +1,16 @@ +package net.swedz.extended_industrialization.machines.tieredshapes; + +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +public interface MultiblockTier +{ + ResourceLocation blockId(); + + String getTranslationKey(); + + default Component getDisplayName() + { + return Component.translatable(this.getTranslationKey()); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java new file mode 100644 index 00000000..1f74c833 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java @@ -0,0 +1,110 @@ +package net.swedz.extended_industrialization.machines.tieredshapes; + +import aztech.modern_industrialization.compat.rei.machines.ReiMachineRecipes; +import aztech.modern_industrialization.machines.components.ActiveShapeComponent; +import aztech.modern_industrialization.machines.guicomponents.ShapeSelection; +import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBlockEntity; +import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.neoforged.bus.api.EventPriority; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.registries.datamaps.DataMapType; +import net.neoforged.neoforge.registries.datamaps.DataMapsUpdatedEvent; +import net.swedz.tesseract.neoforge.compat.mi.helper.CommonGuiComponents; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public abstract class MultiblockTieredShapes> +{ + protected final ResourceLocation machineId; + protected final DataMapType tierDataMap; + protected final Comparator tierSort; + + protected List tiers = List.of(); + protected Map tiersByBlock = Collections.unmodifiableMap(Maps.newHashMap()); + + protected ShapeTemplate[] shapeTemplates = new ShapeTemplate[0]; + + public MultiblockTieredShapes(ResourceLocation machineId, DataMapType tierDataMap, Comparator tierSort) + { + this.machineId = machineId; + this.tierDataMap = tierDataMap; + this.tierSort = tierSort; + } + + public ResourceLocation machineId() + { + return machineId; + } + + public List tiers() + { + return tiers; + } + + public Map tiersByBlock() + { + return tiersByBlock; + } + + public ShapeTemplate[] shapeTemplates() + { + return shapeTemplates; + } + + private void invalidateTiers() + { + List newTiers = Lists.newArrayList(); + + BuiltInRegistries.BLOCK.getDataMap(tierDataMap).forEach((block, tier) -> + newTiers.add(tier.wrap(block))); + + newTiers.sort(tierSort); + + tiers = Collections.unmodifiableList(newTiers); + tiersByBlock = tiers.stream().collect(Collectors.toMap(MultiblockTier::blockId, Function.identity())); + } + + protected abstract void invalidateShapeTemplates(); + + private void invalidateRecipeViewerShapes() + { + ReiMachineRecipes.multiblockShapes.removeIf((e) -> e.machine().equals(machineId)); + int index = 0; + for(ShapeTemplate shapeTemplate : shapeTemplates) + { + ReiMachineRecipes.registerMultiblockShape(machineId, shapeTemplate, "" + index); + index++; + } + } + + private void invalidate() + { + this.invalidateTiers(); + this.invalidateShapeTemplates(); + this.invalidateRecipeViewerShapes(); + } + + public ShapeSelection.Server createShapeSelectionGuiComponent(MultiblockMachineBlockEntity machine, ActiveShapeComponent activeShape, boolean useArrows) + { + List tierNames = tiers.stream().map(MultiblockTier::getDisplayName).toList(); + return CommonGuiComponents.rangedShapeSelection(machine, activeShape, tierNames, useArrows); + } + + public final void register() + { + NeoForge.EVENT_BUS.addListener(EventPriority.LOWEST, DataMapsUpdatedEvent.class, (event) -> + event.ifRegistry(Registries.BLOCK, (registry) -> this.invalidate())); + } +} From fcf16eb728eb107b8c3a270eab1e0286db598314 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 24 Sep 2024 18:48:47 -0400 Subject: [PATCH 003/159] Initial tesla tower setup --- .../blockstates/tesla_tower.json | 7 + .../lang/en_us.json | 2 + .../models/block/tesla_tower.json | 11 ++ .../models/item/tesla_tower.json | 3 + .../data_maps/block/tesla_tower_tier.json | 7 + .../loot_table/blocks/tesla_tower.json | 21 +++ .../tags/block/mineable/pickaxe.json | 1 + .../tags/block/needs_stone_tool.json | 1 + .../swedz/extended_industrialization/EI.java | 2 + .../EIDataMaps.java | 7 + .../EIMachines.java | 7 + .../provider/LanguageDatagenProvider.java | 2 + .../datamaps/DataMapDatagenProvider.java | 9 ++ .../datamap/TeslaTowerTierData.java | 38 +++++ .../TeslaReceiverMachineBlockEntity.java | 118 +++++++++++++++ .../teslatower/TeslaTowerBlockEntity.java | 78 ++++++++++ .../teslatower/TeslaTowerShapes.java | 141 ++++++++++++++++++ .../multiblock/teslatower/TeslaTowerTier.java | 14 ++ .../component/TeslaNetworkComponent.java | 57 +++++++ 19 files changed, 526 insertions(+) create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/tesla_tower.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/tesla_tower.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_tower.json create mode 100644 src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_tower.json create mode 100644 src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/TeslaNetworkComponent.java diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/tesla_tower.json b/src/generated/resources/assets/extended_industrialization/blockstates/tesla_tower.json new file mode 100644 index 00000000..34f81325 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/tesla_tower.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/tesla_tower" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 0d525695..29ca8ca9 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -41,6 +41,7 @@ "block.extended_industrialization.steel_plated_bricks": "Steel Plated Bricks", "block.extended_industrialization.steel_solar_boiler": "Steel Solar Boiler", "block.extended_industrialization.steel_waste_collector": "Steel Waste Collector", + "block.extended_industrialization.tesla_tower": "Tesla Tower", "block.extended_industrialization.universal_transformer": "Universal Transformer", "item.extended_industrialization.blazing_essence_bucket": "Blazing Essence Bucket", "item.extended_industrialization.canned_food": "Canned Food", @@ -94,6 +95,7 @@ "tag.item.extended_industrialization.farmer_voidable": "Farmer Voidable", "tag.item.extended_industrialization.photovoltaic_cell": "Photovoltaic Cells", "tag.item.extended_industrialization.rainbow_dyeable": "Rainbow Dyeable", + "teslatower_tier.extended_industrialization.modern_industrialization.cupronickel_coil": "Cupronickel", "text.extended_industrialization.activated": "Activated", "text.extended_industrialization.brewery_brews_multiple": "Brews %s potions at a time.", "text.extended_industrialization.brewery_requires_blazing_essence": "Requires %s to brew potions.", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/tesla_tower.json b/src/generated/resources/assets/extended_industrialization/models/block/tesla_tower.json new file mode 100644 index 00000000..d205c25c --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/tesla_tower.json @@ -0,0 +1,11 @@ +{ + "casing": "clean_stainless_steel_machine_casing", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/tesla_tower/overlay_front", + "front_active": "extended_industrialization:block/machines/tesla_tower/overlay_front_active", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_tower.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_tower.json new file mode 100644 index 00000000..7d4b4165 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/tesla_tower.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/tesla_tower" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json b/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json new file mode 100644 index 00000000..2d819f70 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json @@ -0,0 +1,7 @@ +{ + "values": { + "modern_industrialization:cupronickel_coil": { + "cableTier": "lv" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_tower.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_tower.json new file mode 100644 index 00000000..5597b01b --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_tower.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:tesla_tower" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/tesla_tower" +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 09a68bf7..9ace1458 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -33,6 +33,7 @@ "extended_industrialization:steel_plated_bricks", "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", + "extended_industrialization:tesla_tower", "extended_industrialization:universal_transformer" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index 09a68bf7..9ace1458 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -33,6 +33,7 @@ "extended_industrialization:steel_plated_bricks", "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", + "extended_industrialization:tesla_tower", "extended_industrialization:universal_transformer" ] } \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EI.java b/src/main/java/net/swedz/extended_industrialization/EI.java index 83996b1c..4c795696 100644 --- a/src/main/java/net/swedz/extended_industrialization/EI.java +++ b/src/main/java/net/swedz/extended_industrialization/EI.java @@ -16,6 +16,7 @@ import net.neoforged.neoforge.registries.datamaps.RegisterDataMapTypesEvent; import net.swedz.extended_industrialization.datagen.DatagenDelegator; import net.swedz.extended_industrialization.machines.blockentity.multiblock.LargeElectricFurnaceBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; import net.swedz.extended_industrialization.network.EIPackets; import net.swedz.tesseract.neoforge.api.MCIdentifiable; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; @@ -81,5 +82,6 @@ public EI(IEventBus bus, ModContainer container) NeoForge.EVENT_BUS.addListener(EventPriority.LOWEST, DataMapsUpdatedEvent.class, (event) -> event.ifRegistry(Registries.BLOCK, (registry) -> LargeElectricFurnaceBlockEntity.initTiers())); + TeslaTowerBlockEntity.registerTieredShapes(); } } diff --git a/src/main/java/net/swedz/extended_industrialization/EIDataMaps.java b/src/main/java/net/swedz/extended_industrialization/EIDataMaps.java index 08ec9243..2e34af47 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIDataMaps.java +++ b/src/main/java/net/swedz/extended_industrialization/EIDataMaps.java @@ -8,6 +8,7 @@ import net.swedz.extended_industrialization.datamap.FarmerSimpleTallCropSize; import net.swedz.extended_industrialization.datamap.FertilizerPotency; import net.swedz.extended_industrialization.datamap.LargeElectricFurnaceTier; +import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; public final class EIDataMaps { @@ -26,10 +27,16 @@ public final class EIDataMaps .synced(LargeElectricFurnaceTier.CODEC, true) .build(); + public static final DataMapType TESLA_TOWER_TIER = DataMapType + .builder(EI.id("tesla_tower_tier"), Registries.BLOCK, TeslaTowerTierData.CODEC) + .synced(TeslaTowerTierData.CODEC, true) + .build(); + public static void init(RegisterDataMapTypesEvent event) { event.register(FARMER_SIMPLE_TALL_CROP_SIZE); event.register(FERTILIZER_POTENCY); event.register(LARGE_ELECTRIC_FURNACE_TIER); + event.register(TESLA_TOWER_TIER); } } diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index 76a4927d..d1fd2268 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -36,6 +36,7 @@ import net.swedz.extended_industrialization.machines.blockentity.multiblock.ProcessingArrayBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.farmer.ElectricFarmerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.farmer.SteamFarmerBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; import net.swedz.extended_industrialization.machines.component.fluidharvesting.honeyextractor.HoneyExtractorBehavior; import net.swedz.extended_industrialization.machines.component.fluidharvesting.wastecollector.WasteCollectorBehavior; import net.swedz.extended_industrialization.machines.recipe.BreweryMachineRecipeType; @@ -215,6 +216,12 @@ public static void multiblocks(MultiblockMachinesMIHookContext hook) ReiMachineRecipes.registerWorkstation(MI.id("steel_macerator"), EI.id("large_electric_macerator")); ReiMachineRecipes.registerWorkstation(MI.id("electric_macerator"), EI.id("large_electric_macerator")); } + + hook.register( + "Tesla Tower", "tesla_tower", "tesla_tower", + CLEAN_STAINLESS_STEEL, true, false, false, + TeslaTowerBlockEntity::new + ); } public static void singleBlockCrafting(SingleBlockCraftingMachinesMIHookContext hook) diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java index ac6251c2..06d39a8e 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java @@ -52,5 +52,7 @@ protected void addTranslations() this.add("lef_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "cupronickel_coil"), "Cupronickel"); this.add("lef_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "kanthal_coil"), "Kanthal"); + + this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "cupronickel_coil"), "Cupronickel"); } } diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java index 4d32b0c2..3ba69f74 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java @@ -1,6 +1,7 @@ package net.swedz.extended_industrialization.datagen.server.provider.datamaps; import aztech.modern_industrialization.MI; +import aztech.modern_industrialization.api.energy.CableTier; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -12,6 +13,7 @@ import net.swedz.extended_industrialization.datamap.FarmerSimpleTallCropSize; import net.swedz.extended_industrialization.datamap.FertilizerPotency; import net.swedz.extended_industrialization.datamap.LargeElectricFurnaceTier; +import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; import net.swedz.tesseract.neoforge.registry.holder.FluidHolder; public final class DataMapDatagenProvider extends DataMapProvider @@ -33,6 +35,8 @@ protected void gather() this.addLargeElectricFurnaceTier(MI.id("cupronickel_coil"), 8, 0.75f); this.addLargeElectricFurnaceTier(MI.id("kanthal_coil"), 32, 0.75f); + + this.addTeslaTowerTier(MI.id("cupronickel_coil"), CableTier.LV); } private void addFarmerSimpleTallCropSize(ResourceLocation block, int maxHeight) @@ -55,6 +59,11 @@ private void addLargeElectricFurnaceTier(ResourceLocation block, int batchSize, this.builder(EIDataMaps.LARGE_ELECTRIC_FURNACE_TIER).add(block, new LargeElectricFurnaceTier(batchSize, euCostMultiplier), false); } + private void addTeslaTowerTier(ResourceLocation block, CableTier cableTier) + { + this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block, new TeslaTowerTierData(cableTier), false); + } + @Override public String getName() { diff --git a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java new file mode 100644 index 00000000..c33170e1 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java @@ -0,0 +1,38 @@ +package net.swedz.extended_industrialization.datamap; + +import aztech.modern_industrialization.api.energy.CableTier; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.block.Block; +import net.swedz.extended_industrialization.EIDataMaps; +import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; +import net.swedz.extended_industrialization.machines.tieredshapes.DataMultiblockTier; + +import java.util.Map; + +public record TeslaTowerTierData(CableTier cableTier) implements DataMultiblockTier +{ + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance + .group( + Codec.STRING.xmap(CableTier::getTier, (tier) -> tier.name).fieldOf("cableTier").forGetter(TeslaTowerTierData::cableTier) + ) + .apply(instance, TeslaTowerTierData::new)); + + @Override + public TeslaTowerTier wrap(ResourceKey key) + { + return new TeslaTowerTier(key.location(), cableTier); + } + + public static TeslaTowerTierData getFor(Block block) + { + return BuiltInRegistries.BLOCK.getData(EIDataMaps.TESLA_TOWER_TIER, BuiltInRegistries.BLOCK.getResourceKey(block).orElseThrow()); + } + + public static Map, TeslaTowerTierData> getAll() + { + return BuiltInRegistries.BLOCK.getDataMap(EIDataMaps.TESLA_TOWER_TIER); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java new file mode 100644 index 00000000..411b09df --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -0,0 +1,118 @@ +package net.swedz.extended_industrialization.machines.blockentity; + +import aztech.modern_industrialization.MICapabilities; +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.api.energy.EnergyApi; +import aztech.modern_industrialization.api.energy.MIEnergyStorage; +import aztech.modern_industrialization.inventory.MIInventory; +import aztech.modern_industrialization.machines.BEP; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.components.CasingComponent; +import aztech.modern_industrialization.machines.components.OrientationComponent; +import aztech.modern_industrialization.machines.components.RedstoneControlComponent; +import aztech.modern_industrialization.machines.gui.MachineGuiParameters; +import aztech.modern_industrialization.machines.guicomponents.SlotPanel; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.machines.component.TeslaNetworkComponent; +import net.swedz.extended_industrialization.mixin.mi.accessor.CasingComponentAccessor; +import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; + +import java.util.Optional; + +public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity +{ + private final RedstoneControlComponent redstoneControl; + private final CasingComponent casing; + + private final InputOutputDirectionalBlockCapabilityCache energyOutputCache; + private final MIEnergyStorage insertable; + + private final TeslaNetworkComponent teslaNetwork; + + public TeslaReceiverMachineBlockEntity(BEP bep) + { + super( + bep, + new MachineGuiParameters.Builder(EI.id("tesla_receiver"), true).backgroundHeight(180).build(), + new OrientationComponent.Params(true, false, false) + ); + + redstoneControl = new RedstoneControlComponent(); + casing = new CasingComponent(); + + energyOutputCache = new InputOutputDirectionalBlockCapabilityCache<>(EnergyApi.SIDED); + insertable = new MIEnergyStorage.NoExtract() + { + @Override + public boolean canConnect(CableTier cableTier) + { + return false; + } + + @Override + public long receive(long maxReceive, boolean simulate) + { + if(!redstoneControl.doAllowNormalOperation(TeslaReceiverMachineBlockEntity.this)) + { + return 0; + } + MIEnergyStorage target = energyOutputCache.output(level, worldPosition, orientation.outputDirection); + return target != null && target.canConnect(((CasingComponentAccessor) casing).getCurrentTier()) ? target.receive(maxReceive, simulate) : 0; + } + + @Override + public long getAmount() + { + MIEnergyStorage target = energyOutputCache.output(level, worldPosition, orientation.outputDirection); + return target != null ? target.getAmount() : 0; + } + + @Override + public long getCapacity() + { + MIEnergyStorage target = energyOutputCache.output(level, worldPosition, orientation.outputDirection); + return target != null ? target.getCapacity() : 0; + } + + @Override + public boolean canReceive() + { + return redstoneControl.doAllowNormalOperation(TeslaReceiverMachineBlockEntity.this); + } + }; + + teslaNetwork = new TeslaNetworkComponent(Optional.of(() -> insertable), Optional.empty()); + + this.registerComponents(redstoneControl, casing, teslaNetwork); + + this.registerGuiComponent(new SlotPanel.Server(this) + .withRedstoneControl(redstoneControl) + .withCasing(casing)); + } + + @Override + public MIInventory getInventory() + { + return MIInventory.EMPTY; + } + + @Override + protected MachineModelClientData getMachineModelData() + { + MachineModelClientData data = new MachineModelClientData(); + orientation.writeModelData(data); + return data; + } + + public static void registerEnergyApi(BlockEntityType bet) + { + MICapabilities.onEvent((event) -> + event.registerBlockEntity(EnergyApi.SIDED, bet, (be, direction) -> + { + TeslaReceiverMachineBlockEntity machine = (TeslaReceiverMachineBlockEntity) be; + return machine.orientation.outputDirection == direction ? null : machine.insertable; + })); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java new file mode 100644 index 00000000..ccf2b5a3 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -0,0 +1,78 @@ +package net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower; + +import aztech.modern_industrialization.api.machine.component.EnergyAccess; +import aztech.modern_industrialization.api.machine.holder.EnergyListComponentHolder; +import aztech.modern_industrialization.machines.BEP; +import aztech.modern_industrialization.machines.components.EnergyComponent; +import aztech.modern_industrialization.machines.components.RedstoneControlComponent; +import aztech.modern_industrialization.machines.gui.MachineGuiParameters; +import aztech.modern_industrialization.machines.guicomponents.SlotPanel; +import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; +import aztech.modern_industrialization.machines.multiblocks.ShapeMatcher; +import com.google.common.collect.Lists; +import net.swedz.extended_industrialization.EI; +import net.swedz.tesseract.neoforge.compat.mi.helper.CommonGuiComponents; +import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; + +import java.util.List; + +public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder +{ + private final RedstoneControlComponent redstoneControl; + + private final List energyInputs = Lists.newArrayList(); + + public TeslaTowerBlockEntity(BEP bep) + { + super( + bep, + new MachineGuiParameters.Builder(EI.id("tesla_tower"), false).backgroundHeight(200).build(), + SHAPES.shapeTemplates() + ); + + redstoneControl = new RedstoneControlComponent(); + + this.registerComponents(redstoneControl); + + // TODO display more data on this screen + this.registerGuiComponent(CommonGuiComponents.standardMultiblockScreen(this, isActive)); + + this.registerGuiComponent(SHAPES.createShapeSelectionGuiComponent(this, activeShape, true)); + + this.registerGuiComponent(new SlotPanel.Server(this) + .withRedstoneControl(redstoneControl)); + } + + @Override + public List getEnergyComponents() + { + return energyInputs; + } + + @Override + public void onSuccessfulMatch(ShapeMatcher shapeMatcher) + { + energyInputs.clear(); + for(HatchBlockEntity hatch : shapeMatcher.getMatchedHatches()) + { + hatch.appendEnergyInputs(energyInputs); + } + } + + // TODO custom linking checks for cable tier of hatches, they must all match + + @Override + public void tick() + { + super.tick(); + + // TODO + } + + private static final TeslaTowerShapes SHAPES = new TeslaTowerShapes(); + + public static void registerTieredShapes() + { + SHAPES.register(); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java new file mode 100644 index 00000000..2582f9c3 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -0,0 +1,141 @@ +package net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower; + +import aztech.modern_industrialization.MI; +import aztech.modern_industrialization.machines.models.MachineCasings; +import aztech.modern_industrialization.machines.multiblocks.HatchFlags; +import aztech.modern_industrialization.machines.multiblocks.HatchType; +import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; +import aztech.modern_industrialization.machines.multiblocks.SimpleMember; +import net.minecraft.world.level.block.Blocks; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIDataMaps; +import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; +import net.swedz.extended_industrialization.machines.tieredshapes.MultiblockTieredShapes; + +import java.util.Comparator; + +public final class TeslaTowerShapes extends MultiblockTieredShapes +{ + TeslaTowerShapes() + { + super( + EI.id("tesla_tower"), + EIDataMaps.TESLA_TOWER_TIER, + Comparator.comparing(TeslaTowerTier::cableTier) + ); + } + + private static String[][] formatPattern(String[][] input) + { + int rows = input[0].length; + int columns = input.length; + + String[][] result = new String[rows][columns]; + + for(int row = 0; row < rows; row++) + { + for(int column = 0; column < columns; column++) + { + result[row][column] = input[column][row]; + } + } + + return result; + } + + private String[][] pattern() + { + String[] layerPipe = { + " ", + " ", + " ", + " P ", + " ", + " ", + " " + }; + String[] layerPipeWithCoil = { + " ", + " WWW ", + " W W ", + " W P W ", + " W W ", + " WWW ", + " " + }; + String[] ballEnd = { + " ", + " ", + " WWW ", + " WWW ", + " WWW ", + " ", + " " + }; + String[] ballMiddle = { + " ", + " WWW ", + " WWWWW ", + " WWWWW ", + " WWWWW ", + " WWW ", + " " + }; + return new String[][]{ + { + " SSSSS ", + "SSCCCSS", + "SCCCCCS", + "SCCPCCS", + "SCCCCCS", + "SSCCCSS", + " SS#SS " + }, + { + " ", + " CCC ", + " C C ", + " C P C ", + " C C ", + " CCC ", + " " + }, + layerPipe, + layerPipe, + layerPipeWithCoil, + layerPipe, + layerPipeWithCoil, + layerPipe, + layerPipeWithCoil, + layerPipe, + layerPipeWithCoil, + layerPipe, + ballEnd, + ballMiddle, + ballMiddle, + ballMiddle, + ballEnd + }; + } + + @Override + protected void invalidateShapeTemplates() + { + shapeTemplates = new ShapeTemplate[tiers.size()]; + + for(int i = 0; i < tiers.size(); i++) + { + TeslaTowerTier tier = tiers.get(i); + + ShapeTemplate.LayeredBuilder builder = new ShapeTemplate.LayeredBuilder( + MachineCasings.CLEAN_STAINLESS_STEEL, + formatPattern(this.pattern()) + ); + builder.key('S', SimpleMember.forBlockId(MI.id("clean_stainless_steel_machine_casing")), new HatchFlags.Builder().with(HatchType.ENERGY_INPUT).build()); + builder.key('P', SimpleMember.forBlockId(MI.id("stainless_steel_machine_casing_pipe")), HatchFlags.NO_HATCH); + builder.key('C', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); + builder.key('W', SimpleMember.forBlock(() -> Blocks.WHITE_WOOL), HatchFlags.NO_HATCH); + shapeTemplates[i] = builder.build(); + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java new file mode 100644 index 00000000..c4fdbe36 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java @@ -0,0 +1,14 @@ +package net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower; + +import aztech.modern_industrialization.api.energy.CableTier; +import net.minecraft.resources.ResourceLocation; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.machines.tieredshapes.MultiblockTier; + +public record TeslaTowerTier(ResourceLocation blockId, CableTier cableTier) implements MultiblockTier +{ + public String getTranslationKey() + { + return "teslatower_tier.%s.%s.%s".formatted(EI.ID, blockId.getNamespace(), blockId.getPath()); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/TeslaNetworkComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/TeslaNetworkComponent.java new file mode 100644 index 00000000..44eb9e77 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/TeslaNetworkComponent.java @@ -0,0 +1,57 @@ +package net.swedz.extended_industrialization.machines.component; + +import aztech.modern_industrialization.api.energy.MIEnergyStorage; +import aztech.modern_industrialization.machines.IComponent; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; + +import java.util.Optional; +import java.util.function.Supplier; + +public class TeslaNetworkComponent implements IComponent.ServerOnly +{ + private final Optional> insertable; + private final Optional> extractable; + + public TeslaNetworkComponent(Optional> insertable, + Optional> extractable) + { + this.insertable = insertable; + this.extractable = extractable; + } + + public boolean canInsert() + { + return insertable.isPresent(); + } + + public MIEnergyStorage insertable() + { + return insertable.orElseThrow().get(); + } + + public boolean canExtract() + { + return extractable.isPresent(); + } + + public MIEnergyStorage extractable() + { + return extractable.orElseThrow().get(); + } + + public void tick() + { + // TODO + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + } +} From d5ce9537ac8258bd045a77777885532f72f0b933 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 25 Sep 2024 00:06:03 -0400 Subject: [PATCH 004/159] Add calibrator item --- gradle.properties | 4 +- .../lang/en_us.json | 5 + .../models/item/tesla_calibrator.json | 6 ++ .../EIComponents.java | 5 + .../extended_industrialization/EIItems.java | 2 + .../extended_industrialization/EIText.java | 4 + .../EITooltips.java | 3 + .../item/TeslaCalibratorItem.java | 86 ++++++++++++++++++ .../textures/item/tesla_calibrator.png | Bin 0 -> 835 bytes 9 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_calibrator.json create mode 100644 src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java create mode 100644 src/main/resources/assets/extended_industrialization/textures/item/tesla_calibrator.png diff --git a/gradle.properties b/gradle.properties index 753e84f0..d818dcbd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -39,8 +39,8 @@ grandpower_version=3.0.0 cloth_config_version=15.0.127 emi_version=1.1.10+1.21 emi_version_range=[1.1.10, 1.2-) -tesseract_version=1.5.3-beta-1.21.1 -tesseract_version_range=[1.5.2-beta-, 1.6-) +tesseract_version=1.5.4-beta-1.21.1 +tesseract_version_range=[1.5.4-beta-, 1.6-) mi_tweaks_version=1.5.3-beta-1.21.1 mi_tweaks_version_range=[1.5.0-beta-, 1.6-) mixinextras_version=0.3.5 diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 29ca8ca9..c31713a4 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -71,6 +71,7 @@ "item.extended_industrialization.potassium_hydroxide_bucket": "Potassium Hydroxide Bucket", "item.extended_industrialization.steam_chainsaw": "Steam Chainsaw", "item.extended_industrialization.steel_combine": "Steel Combine", + "item.extended_industrialization.tesla_calibrator": "Tesla Calibrator", "item.extended_industrialization.tin_can": "Tin Can", "item.extended_industrialization.ultimate_laser_drill": "Ultimate Laser Drill", "itemGroup.extended_industrialization.extended_industrialization": "Extended Industrialization", @@ -188,6 +189,10 @@ "text.extended_industrialization.steam_chainsaw_1": "- Press %s on still or flowing water to fill.", "text.extended_industrialization.steam_chainsaw_2": "- Place fuel inside the chainsaw using %s.", "text.extended_industrialization.steam_chainsaw_3": "- Toggle Silk Touch with %s + %s.", + "text.extended_industrialization.tesla_calibrator_clear": "Cleared link from tesla calibrator.", + "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected Tesla Tower.", + "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", + "text.extended_industrialization.tesla_calibrator_selected": "Selected Tesla Tower for calibration.", "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", "text.extended_industrialization.universal_transformer_to_tier_input": "Casing for cable tier to convert to (LV by default).", "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected." diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_calibrator.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_calibrator.json new file mode 100644 index 00000000..60a49cf2 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/tesla_calibrator.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "extended_industrialization:item/tesla_calibrator" + } +} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIComponents.java b/src/main/java/net/swedz/extended_industrialization/EIComponents.java index 19da11d4..395d9444 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIComponents.java +++ b/src/main/java/net/swedz/extended_industrialization/EIComponents.java @@ -1,6 +1,7 @@ package net.swedz.extended_industrialization; import com.mojang.serialization.Codec; +import net.minecraft.core.GlobalPos; import net.minecraft.core.component.DataComponentType; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.util.ExtraCodecs; @@ -42,6 +43,10 @@ public final class EIComponents "rainbow", (b) -> b.persistent(RainbowDataComponent.CODEC).networkSynchronized(RainbowDataComponent.STREAM_CODEC) ); + public static final Supplier> SELECTED_POSITION = create( + "selected_position", + (b) -> b.persistent(GlobalPos.CODEC).networkSynchronized(GlobalPos.STREAM_CODEC) + ); public static void init(IEventBus bus) { diff --git a/src/main/java/net/swedz/extended_industrialization/EIItems.java b/src/main/java/net/swedz/extended_industrialization/EIItems.java index ae6f7034..4cdc013b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIItems.java +++ b/src/main/java/net/swedz/extended_industrialization/EIItems.java @@ -17,6 +17,7 @@ import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.PhotovoltaicCellItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; +import net.swedz.extended_industrialization.item.TeslaCalibratorItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitAbility; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitArmorItem; @@ -67,6 +68,7 @@ public static void init(IEventBus bus) public static final ItemHolder CANNED_FOOD = create("canned_food", "Canned Food", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().usingConvertsTo(TIN_CAN).build())).tag(ItemTags.WOLF_FOOD, ItemTags.CAT_FOOD).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder NETHERITE_ROTARY_BLADE = create("netherite_rotary_blade", "Netherite Rotary Blade", Item::new, EISortOrder.PARTS).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder STEEL_COMBINE = create("steel_combine", "Steel Combine", Item::new, EISortOrder.PARTS).withModel(CommonModelBuilders::generated).register(); diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index f0935116..12450f22 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -96,6 +96,10 @@ public enum EIText implements TranslatableTextEnum STEAM_CHAINSAW_1("- Press %s on still or flowing water to fill."), STEAM_CHAINSAW_2("- Place fuel inside the chainsaw using %s."), STEAM_CHAINSAW_3("- Toggle Silk Touch with %s + %s."), + TESLA_CALIBRATOR_CLEAR("Cleared link from tesla calibrator."), + TESLA_CALIBRATOR_LINKED("Linked to %s"), + TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected Tesla Tower."), + TESLA_CALIBRATOR_SELECTED("Selected Tesla Tower for calibration."), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."); diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 9ecb2788..2487cbf4 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -5,6 +5,7 @@ import com.google.common.collect.Lists; import dev.technici4n.grandpower.api.ILongEnergyStorage; import net.minecraft.ChatFormatting; +import net.minecraft.core.GlobalPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.tags.ItemTags; @@ -44,6 +45,8 @@ public final class EITooltips public static final Parser ACTIVATED_BOOLEAN_PARSER = (value) -> value ? EIText.ACTIVATED.text().withStyle(ChatFormatting.GREEN) : EIText.DEACTIVATED.text().withStyle(ChatFormatting.RED); + public static final Parser GLOBAL_POS_PARSER = Parser.GLOBAL_POS.withStyle(DEFAULT_STYLE); + public static final Parser KEYBIND_PARSER = Parser.KEYBIND.withStyle(NUMBER_TEXT); public static final TooltipAttachment ENERGY_STORED_ITEM = TooltipAttachment.singleLineOptional( diff --git a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java new file mode 100644 index 00000000..b50ac2ff --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java @@ -0,0 +1,86 @@ +package net.swedz.extended_industrialization.item; + +import net.minecraft.core.GlobalPos; +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.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.swedz.extended_industrialization.EIComponents; +import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; + +import java.util.List; + +import static aztech.modern_industrialization.MITooltips.*; +import static net.swedz.extended_industrialization.EITooltips.*; + +public final class TeslaCalibratorItem extends Item +{ + public TeslaCalibratorItem(Properties properties) + { + super(properties.stacksTo(1)); + } + + @Override + public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) + { + Player player = context.getPlayer(); + if(player != null) + { + InteractionHand usedHand = context.getHand(); + ItemStack itemStack = player.getItemInHand(usedHand); + BlockEntity hitBlockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); + if(!context.getLevel().isClientSide()) + { + if(player.isShiftKeyDown() && hitBlockEntity instanceof TeslaTowerBlockEntity) + { + itemStack.set(EIComponents.SELECTED_POSITION, GlobalPos.of(context.getLevel().dimension(), context.getClickedPos())); + player.displayClientMessage(EIText.TESLA_CALIBRATOR_SELECTED.text(), true); + } + else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachineBlockEntity receiver) + { + // TODO set pos in receiver + player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_SUCCESS.text(), true); + } + } + return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); + } + return InteractionResult.PASS; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) + { + if(player.isShiftKeyDown()) + { + player.getItemInHand(usedHand).remove(EIComponents.SELECTED_POSITION); + player.displayClientMessage(EIText.TESLA_CALIBRATOR_CLEAR.text(), true); + return InteractionResultHolder.sidedSuccess(player.getItemInHand(usedHand), level.isClientSide()); + } + return super.use(level, player, usedHand); + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag isAdvanced) + { + if(stack.has(EIComponents.SELECTED_POSITION)) + { + GlobalPos position = stack.get(EIComponents.SELECTED_POSITION); + tooltipComponents.add(EIText.TESLA_CALIBRATOR_LINKED.text(GLOBAL_POS_PARSER.parse(position)).withStyle(DEFAULT_STYLE)); + } + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return !newStack.is(oldStack.getItem()); + } +} diff --git a/src/main/resources/assets/extended_industrialization/textures/item/tesla_calibrator.png b/src/main/resources/assets/extended_industrialization/textures/item/tesla_calibrator.png new file mode 100644 index 0000000000000000000000000000000000000000..d69ef1752749ee750446601983722b256492fd68 GIT binary patch literal 835 zcmV-J1HAl+P)4Tx04UFukxM8n4#ug)4d}b zOJ%DpJT_hn8*8=}wn{0FlC6yuv5~I-xua%MqntXOU*9?3*E!#T;6cu`+^TM{?1Gbw z$F!;G8Lj4-Fts$(NI*B;{P@I3ii+domVjDsx>Oeb8};c0*Mxv3JZR>fg7Ca>|7szx zct<#5F6wFFQ{hfWE+~Ajbfd^GinBfkRc6FVC5MC~!dkYBjWRYD9ZR@RIGVO>$q!By zIjwk2v6Wjff9|PX7+$a^CzLL;jX0x>lR(2@g(Y$n=#teI#U&~Gu?qfH-=7edA+9A% zaSXGJh3@-NfAG6oH`CiwObW-K`pNU&+M#9(zBWDY^U(9Yjv(|17k0_Nd;kOQqHmV8 z=sq;8!`Wp?Gq&M;16m&Px}*D2NMc8oPqsJ?O|v z_FRQ`*OvG8=NZ30V&5nka*3Qc>Tm!6010qNS#tmYE+GH_E+GL2Tm1h300C!7L_t(I zPmPklOT$nQ$1gPgek+Zgk`ycd(Ek$&K~yT^OqyL;~`gYFTH%f$4Bh;l#x7RPbf$fsTNDT(~b zJvE^-l0EYyesgBni=`6(3fNbx%BL0OT7$O{v=Xqq?Hi~dZ!vaj}?40Hr>-752W-meBI@}Ri zO64VD^H0Ce{{68{FZVZ`1K;=AgG@lo&!8$c&o6IsJoruzBA3WZ%#XnHqkRdg*6MXO z2yQi|$g(W@nrtTXcSzS4$|Im64ApQ@=7>QQMeHRd0aV4@Fd$<&f3MeLFDbpk$?<`R zQi3255s~Y Date: Wed, 25 Sep 2024 14:28:55 -0400 Subject: [PATCH 005/159] Set up tesla network internals --- build.gradle | 1 + .../blockstates/tesla_receiver.json | 7 + .../lang/en_us.json | 4 + .../models/block/tesla_receiver.json | 13 ++ .../models/item/tesla_receiver.json | 3 + .../loot_table/blocks/tesla_receiver.json | 21 +++ .../tags/block/mineable/pickaxe.json | 1 + .../tags/block/needs_stone_tool.json | 1 + .../EIComponents.java | 20 +-- .../EIMachines.java | 8 + .../extended_industrialization/EIText.java | 3 + .../EITooltips.java | 3 +- .../item/TeslaCalibratorItem.java | 24 ++- .../TeslaReceiverMachineBlockEntity.java | 85 ++++----- .../component/TeslaNetworkComponent.java | 57 ------- .../component/tesla/TeslaNetwork.java | 85 +++++++++ .../component/tesla/TeslaNetworkHolder.java | 9 + .../component/tesla/TeslaNetworkKey.java | 50 ++++++ .../component/tesla/TeslaNetworks.java | 27 +++ .../tesla/receiver/TeslaReceiver.java | 59 +++++++ .../receiver/TeslaReceiverComponent.java | 161 ++++++++++++++++++ ...eslaNetworkHolderMinecraftServerMixin.java | 22 +++ .../extended_industrialization.mixins.json | 1 + src/main/resources/interfaces.json | 5 + 24 files changed, 543 insertions(+), 127 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/tesla_receiver.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/tesla_receiver.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_receiver.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_receiver.json delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/TeslaNetworkComponent.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkKey.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java create mode 100644 src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java create mode 100644 src/main/resources/interfaces.json diff --git a/build.gradle b/build.gradle index 7e23d9c7..84e60252 100644 --- a/build.gradle +++ b/build.gradle @@ -274,6 +274,7 @@ neoForge { accessTransformers = [ "src/main/resources/${mod_id}.accesstransformer.cfg" ] + interfaceInjectionData.from "src/main/resources/interfaces.json" parchment { mappingsVersion = project.parchment_mappings_version diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/tesla_receiver.json b/src/generated/resources/assets/extended_industrialization/blockstates/tesla_receiver.json new file mode 100644 index 00000000..1faf6c9d --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/tesla_receiver.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/tesla_receiver" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index c31713a4..ef66bdd9 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -41,6 +41,7 @@ "block.extended_industrialization.steel_plated_bricks": "Steel Plated Bricks", "block.extended_industrialization.steel_solar_boiler": "Steel Solar Boiler", "block.extended_industrialization.steel_waste_collector": "Steel Waste Collector", + "block.extended_industrialization.tesla_receiver": "Tesla Receiver", "block.extended_industrialization.tesla_tower": "Tesla Tower", "block.extended_industrialization.universal_transformer": "Universal Transformer", "item.extended_industrialization.blazing_essence_bucket": "Blazing Essence Bucket", @@ -190,9 +191,12 @@ "text.extended_industrialization.steam_chainsaw_2": "- Place fuel inside the chainsaw using %s.", "text.extended_industrialization.steam_chainsaw_3": "- Toggle Silk Touch with %s + %s.", "text.extended_industrialization.tesla_calibrator_clear": "Cleared link from tesla calibrator.", + "text.extended_industrialization.tesla_calibrator_link_failed_no_selection": "Failed to link receiver because no Tesla Tower is selected.", "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected Tesla Tower.", "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", "text.extended_industrialization.tesla_calibrator_selected": "Selected Tesla Tower for calibration.", + "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", + "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any Tesla Tower", "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", "text.extended_industrialization.universal_transformer_to_tier_input": "Casing for cable tier to convert to (LV by default).", "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected." diff --git a/src/generated/resources/assets/extended_industrialization/models/block/tesla_receiver.json b/src/generated/resources/assets/extended_industrialization/models/block/tesla_receiver.json new file mode 100644 index 00000000..eb485bd9 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/tesla_receiver.json @@ -0,0 +1,13 @@ +{ + "casing": "lv", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output", + "side": "extended_industrialization:block/machines/tesla_receiver/overlay_side", + "side_active": "extended_industrialization:block/machines/tesla_receiver/overlay_side_active", + "top": "extended_industrialization:block/machines/tesla_receiver/overlay_top", + "top_active": "extended_industrialization:block/machines/tesla_receiver/overlay_top_active" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_receiver.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_receiver.json new file mode 100644 index 00000000..06fafd32 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/tesla_receiver.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/tesla_receiver" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_receiver.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_receiver.json new file mode 100644 index 00000000..d36e0461 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_receiver.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:tesla_receiver" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/tesla_receiver" +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 9ace1458..dbade603 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -33,6 +33,7 @@ "extended_industrialization:steel_plated_bricks", "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", + "extended_industrialization:tesla_receiver", "extended_industrialization:tesla_tower", "extended_industrialization:universal_transformer" ] diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index 9ace1458..dbade603 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -33,6 +33,7 @@ "extended_industrialization:steel_plated_bricks", "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", + "extended_industrialization:tesla_receiver", "extended_industrialization:tesla_tower", "extended_industrialization:universal_transformer" ] diff --git a/src/main/java/net/swedz/extended_industrialization/EIComponents.java b/src/main/java/net/swedz/extended_industrialization/EIComponents.java index 395d9444..98e923e7 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIComponents.java +++ b/src/main/java/net/swedz/extended_industrialization/EIComponents.java @@ -1,7 +1,6 @@ package net.swedz.extended_industrialization; import com.mojang.serialization.Codec; -import net.minecraft.core.GlobalPos; import net.minecraft.core.component.DataComponentType; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.util.ExtraCodecs; @@ -11,6 +10,7 @@ import net.swedz.extended_industrialization.component.RainbowDataComponent; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfig; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import java.util.function.Supplier; import java.util.function.UnaryOperator; @@ -19,33 +19,33 @@ public final class EIComponents { private static final DeferredRegister.DataComponents COMPONENTS = DeferredRegister.createDataComponents(EI.ID); - public static final Supplier> HIDE_BAR = create( + public static final Supplier> HIDE_BAR = create( "hide_bar", (b) -> b.persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL) ); - public static final Supplier> SOLAR_TICKS = create( + public static final Supplier> SOLAR_TICKS = create( "solar_ticks", (b) -> b.persistent(ExtraCodecs.POSITIVE_INT).networkSynchronized(ByteBufCodecs.VAR_INT) ); - public static final Supplier> MACHINE_CONFIG = create( + public static final Supplier> MACHINE_CONFIG = create( "machine_config", (b) -> b.persistent(MachineConfig.CODEC).networkSynchronized(MachineConfig.STREAM_CODEC) ); - public static final Supplier> ELECTRIC_TOOL_SPEED = create( + public static final Supplier> ELECTRIC_TOOL_SPEED = create( "electric_tool_speed", (b) -> b.persistent(ExtraCodecs.intRange(ElectricToolItem.SPEED_MIN, ElectricToolItem.SPEED_MAX)).networkSynchronized(ByteBufCodecs.VAR_INT) ); - public static final Supplier> ACTIVATED = create( + public static final Supplier> ACTIVATED = create( "activated", (b) -> b.persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL) ); - public static final Supplier> RAINBOW = create( + public static final Supplier> RAINBOW = create( "rainbow", (b) -> b.persistent(RainbowDataComponent.CODEC).networkSynchronized(RainbowDataComponent.STREAM_CODEC) ); - public static final Supplier> SELECTED_POSITION = create( - "selected_position", - (b) -> b.persistent(GlobalPos.CODEC).networkSynchronized(GlobalPos.STREAM_CODEC) + public static final Supplier> SELECTED_TESLA_NETWORK = create( + "selected_tesla_network", + (b) -> b.persistent(TeslaNetworkKey.CODEC).networkSynchronized(TeslaNetworkKey.STREAM_CODEC) ); public static void init(IEventBus bus) diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index d1fd2268..17c0db41 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -27,6 +27,7 @@ import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarBoilerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarPanelMachineBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.UniversalTransformerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.ElectricBreweryMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.SteamBreweryMachineBlockEntity; @@ -406,5 +407,12 @@ public static void singleBlockSpecial(SingleBlockSpecialMachinesMIHookContext ho LargeConfigurableChestMachineBlockEntity::new, MachineBlockEntity::registerItemApi ); + + hook.register( + "Tesla Receiver", "tesla_receiver", "tesla_receiver", + CableTier.LV.casing, false, true, true, true, + TeslaReceiverMachineBlockEntity::new, + TeslaReceiverMachineBlockEntity::registerEnergyApi + ); } } diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 12450f22..f3c0b5fc 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -98,8 +98,11 @@ public enum EIText implements TranslatableTextEnum STEAM_CHAINSAW_3("- Toggle Silk Touch with %s + %s."), TESLA_CALIBRATOR_CLEAR("Cleared link from tesla calibrator."), TESLA_CALIBRATOR_LINKED("Linked to %s"), + TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION("Failed to link receiver because no Tesla Tower is selected."), TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected Tesla Tower."), TESLA_CALIBRATOR_SELECTED("Selected Tesla Tower for calibration."), + TESLA_RECEIVER_LINKED("Linked to %s"), + TESLA_RECEIVER_NO_LINK("Not linked to any Tesla Tower"), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."); diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 2487cbf4..7e786f53 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -14,6 +14,7 @@ import net.swedz.extended_industrialization.item.PhotovoltaicCellItem; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitArmorItem; import net.swedz.extended_industrialization.machines.blockentity.multiblock.LargeElectricFurnaceBlockEntity; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import net.swedz.tesseract.neoforge.tooltip.BiParser; import net.swedz.tesseract.neoforge.tooltip.Parser; import net.swedz.tesseract.neoforge.tooltip.TooltipAttachment; @@ -45,7 +46,7 @@ public final class EITooltips public static final Parser ACTIVATED_BOOLEAN_PARSER = (value) -> value ? EIText.ACTIVATED.text().withStyle(ChatFormatting.GREEN) : EIText.DEACTIVATED.text().withStyle(ChatFormatting.RED); - public static final Parser GLOBAL_POS_PARSER = Parser.GLOBAL_POS.withStyle(DEFAULT_STYLE); + public static final Parser TESLA_NETWORK_KEY_PARSER = (key) -> Parser.GLOBAL_POS.withStyle(DEFAULT_STYLE).parse(GlobalPos.of(key.dimension(), key.pos())); public static final Parser KEYBIND_PARSER = Parser.KEYBIND.withStyle(NUMBER_TEXT); diff --git a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java index b50ac2ff..767db039 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java @@ -1,6 +1,5 @@ package net.swedz.extended_industrialization.item; -import net.minecraft.core.GlobalPos; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -16,6 +15,7 @@ import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import java.util.List; @@ -42,13 +42,21 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { if(player.isShiftKeyDown() && hitBlockEntity instanceof TeslaTowerBlockEntity) { - itemStack.set(EIComponents.SELECTED_POSITION, GlobalPos.of(context.getLevel().dimension(), context.getClickedPos())); + itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new TeslaNetworkKey(context.getLevel(), context.getClickedPos())); player.displayClientMessage(EIText.TESLA_CALIBRATOR_SELECTED.text(), true); } else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachineBlockEntity receiver) { - // TODO set pos in receiver - player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_SUCCESS.text(), true); + if(itemStack.has(EIComponents.SELECTED_TESLA_NETWORK)) + { + TeslaNetworkKey key = itemStack.get(EIComponents.SELECTED_TESLA_NETWORK); + receiver.setNetwork(key); + player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_SUCCESS.text(), true); + } + else + { + player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION.text(), true); + } } } return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); @@ -61,7 +69,7 @@ public InteractionResultHolder use(Level level, Player player, Intera { if(player.isShiftKeyDown()) { - player.getItemInHand(usedHand).remove(EIComponents.SELECTED_POSITION); + player.getItemInHand(usedHand).remove(EIComponents.SELECTED_TESLA_NETWORK); player.displayClientMessage(EIText.TESLA_CALIBRATOR_CLEAR.text(), true); return InteractionResultHolder.sidedSuccess(player.getItemInHand(usedHand), level.isClientSide()); } @@ -71,10 +79,10 @@ public InteractionResultHolder use(Level level, Player player, Intera @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag isAdvanced) { - if(stack.has(EIComponents.SELECTED_POSITION)) + if(stack.has(EIComponents.SELECTED_TESLA_NETWORK)) { - GlobalPos position = stack.get(EIComponents.SELECTED_POSITION); - tooltipComponents.add(EIText.TESLA_CALIBRATOR_LINKED.text(GLOBAL_POS_PARSER.parse(position)).withStyle(DEFAULT_STYLE)); + TeslaNetworkKey key = stack.get(EIComponents.SELECTED_TESLA_NETWORK); + tooltipComponents.add(EIText.TESLA_CALIBRATOR_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(key)).withStyle(DEFAULT_STYLE)); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 411b09df..6fab8b24 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -1,9 +1,7 @@ package net.swedz.extended_industrialization.machines.blockentity; import aztech.modern_industrialization.MICapabilities; -import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.EnergyApi; -import aztech.modern_industrialization.api.energy.MIEnergyStorage; import aztech.modern_industrialization.inventory.MIInventory; import aztech.modern_industrialization.machines.BEP; import aztech.modern_industrialization.machines.MachineBlockEntity; @@ -13,79 +11,57 @@ import aztech.modern_industrialization.machines.gui.MachineGuiParameters; import aztech.modern_industrialization.machines.guicomponents.SlotPanel; import aztech.modern_industrialization.machines.models.MachineModelClientData; +import com.google.common.collect.Lists; +import net.minecraft.network.chat.Style; import net.minecraft.world.level.block.entity.BlockEntityType; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.machines.component.TeslaNetworkComponent; -import net.swedz.extended_industrialization.mixin.mi.accessor.CasingComponentAccessor; -import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; +import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; +import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; +import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine; -import java.util.Optional; +import java.util.List; -public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity +import static net.swedz.extended_industrialization.EITooltips.*; + +public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate { private final RedstoneControlComponent redstoneControl; private final CasingComponent casing; - private final InputOutputDirectionalBlockCapabilityCache energyOutputCache; - private final MIEnergyStorage insertable; - - private final TeslaNetworkComponent teslaNetwork; + private final TeslaReceiverComponent teslaNetwork; public TeslaReceiverMachineBlockEntity(BEP bep) { super( bep, - new MachineGuiParameters.Builder(EI.id("tesla_receiver"), true).backgroundHeight(180).build(), + new MachineGuiParameters.Builder(EI.id("tesla_receiver"), false).backgroundHeight(175).build(), new OrientationComponent.Params(true, false, false) ); redstoneControl = new RedstoneControlComponent(); casing = new CasingComponent(); - energyOutputCache = new InputOutputDirectionalBlockCapabilityCache<>(EnergyApi.SIDED); - insertable = new MIEnergyStorage.NoExtract() + teslaNetwork = new TeslaReceiverComponent(this, () -> redstoneControl.doAllowNormalOperation(this), casing); + + this.registerComponents(redstoneControl, casing, teslaNetwork); + + this.registerGuiComponent(new ModularMultiblockGui.Server(0, 60, () -> { - @Override - public boolean canConnect(CableTier cableTier) - { - return false; - } + List text = Lists.newArrayList(); - @Override - public long receive(long maxReceive, boolean simulate) + if(teslaNetwork.hasNetwork()) { - if(!redstoneControl.doAllowNormalOperation(TeslaReceiverMachineBlockEntity.this)) - { - return 0; - } - MIEnergyStorage target = energyOutputCache.output(level, worldPosition, orientation.outputDirection); - return target != null && target.canConnect(((CasingComponentAccessor) casing).getCurrentTier()) ? target.receive(maxReceive, simulate) : 0; + text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(teslaNetwork.getNetworkKey()).copy().setStyle(Style.EMPTY)))); } - - @Override - public long getAmount() + else { - MIEnergyStorage target = energyOutputCache.output(level, worldPosition, orientation.outputDirection); - return target != null ? target.getAmount() : 0; + text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_NO_LINK.text(), 0xFF0000)); } - @Override - public long getCapacity() - { - MIEnergyStorage target = energyOutputCache.output(level, worldPosition, orientation.outputDirection); - return target != null ? target.getCapacity() : 0; - } - - @Override - public boolean canReceive() - { - return redstoneControl.doAllowNormalOperation(TeslaReceiverMachineBlockEntity.this); - } - }; - - teslaNetwork = new TeslaNetworkComponent(Optional.of(() -> insertable), Optional.empty()); - - this.registerComponents(redstoneControl, casing, teslaNetwork); + return text; + })); this.registerGuiComponent(new SlotPanel.Server(this) .withRedstoneControl(redstoneControl) @@ -101,18 +77,25 @@ public MIInventory getInventory() @Override protected MachineModelClientData getMachineModelData() { - MachineModelClientData data = new MachineModelClientData(); + MachineModelClientData data = new MachineModelClientData(casing.getCasing()); + // data.isActive = ...; // TODO check if the source is loaded orientation.writeModelData(data); return data; } + @Override + public TeslaReceiver getDelegateReceiver() + { + return teslaNetwork; + } + public static void registerEnergyApi(BlockEntityType bet) { MICapabilities.onEvent((event) -> event.registerBlockEntity(EnergyApi.SIDED, bet, (be, direction) -> { TeslaReceiverMachineBlockEntity machine = (TeslaReceiverMachineBlockEntity) be; - return machine.orientation.outputDirection == direction ? null : machine.insertable; + return machine.orientation.outputDirection == direction ? null : machine.teslaNetwork.insertable(); })); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/TeslaNetworkComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/TeslaNetworkComponent.java deleted file mode 100644 index 44eb9e77..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/TeslaNetworkComponent.java +++ /dev/null @@ -1,57 +0,0 @@ -package net.swedz.extended_industrialization.machines.component; - -import aztech.modern_industrialization.api.energy.MIEnergyStorage; -import aztech.modern_industrialization.machines.IComponent; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; - -import java.util.Optional; -import java.util.function.Supplier; - -public class TeslaNetworkComponent implements IComponent.ServerOnly -{ - private final Optional> insertable; - private final Optional> extractable; - - public TeslaNetworkComponent(Optional> insertable, - Optional> extractable) - { - this.insertable = insertable; - this.extractable = extractable; - } - - public boolean canInsert() - { - return insertable.isPresent(); - } - - public MIEnergyStorage insertable() - { - return insertable.orElseThrow().get(); - } - - public boolean canExtract() - { - return extractable.isPresent(); - } - - public MIEnergyStorage extractable() - { - return extractable.orElseThrow().get(); - } - - public void tick() - { - // TODO - } - - @Override - public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) - { - } - - @Override - public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) - { - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java new file mode 100644 index 00000000..a88c5b17 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -0,0 +1,85 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.api.energy.MIEnergyStorage; +import com.google.common.collect.Sets; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; + +import java.util.Set; + +public final class TeslaNetwork implements MIEnergyStorage.NoExtract +{ + private final TeslaNetworkKey key; + + private final Set receivers = Sets.newHashSet(); + + public TeslaNetwork(TeslaNetworkKey key) + { + this.key = key; + } + + public TeslaNetworkKey key() + { + return key; + } + + public void add(TeslaReceiver receiver) + { + receivers.add(receiver); + } + + public void remove(TeslaReceiver receiver) + { + receivers.remove(receiver); + } + + public int size() + { + return receivers.size(); + } + + public boolean isEmpty() + { + return receivers.isEmpty(); + } + + @Override + public boolean canReceive() + { + return !receivers.isEmpty(); + } + + @Override + public long receive(long maxReceive, boolean simulate) + { + long amountReceived = 0; + int index = 0; + for(TeslaReceiver receiver : receivers) + { + int remainingStorages = receivers.size() - index; + long remainingAmountToReceive = maxReceive - amountReceived; + long amountToReceive = remainingAmountToReceive / remainingStorages; + amountReceived += receiver.receiveEnergy(amountToReceive, simulate); + index++; + } + return amountReceived; + } + + @Override + public long getAmount() + { + return receivers.stream().mapToLong(TeslaReceiver::getStoredEnergy).sum(); + } + + @Override + public long getCapacity() + { + return receivers.stream().mapToLong(TeslaReceiver::getEnergyCapacity).sum(); + } + + @Override + public boolean canConnect(CableTier cableTier) + { + return false; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java new file mode 100644 index 00000000..64be2bcb --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java @@ -0,0 +1,9 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +/** + * Injected into {@link net.minecraft.server.MinecraftServer} + */ +public interface TeslaNetworkHolder +{ + TeslaNetworks getTeslaNetworks(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkKey.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkKey.java new file mode 100644 index 00000000..66c9fec6 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkKey.java @@ -0,0 +1,50 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import io.netty.buffer.ByteBuf; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.Level; +import net.swedz.tesseract.neoforge.proxy.Proxies; +import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; + +public record TeslaNetworkKey(ResourceKey dimension, BlockPos pos) +{ + public static final MapCodec MAP_CODEC = RecordCodecBuilder.mapCodec((instance) -> instance + .group( + Level.RESOURCE_KEY_CODEC.fieldOf("dimension").forGetter(TeslaNetworkKey::dimension), + BlockPos.CODEC.fieldOf("pos").forGetter(TeslaNetworkKey::pos) + ) + .apply(instance, TeslaNetworkKey::new)); + public static final Codec CODEC = MAP_CODEC.codec(); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceKey.streamCodec(Registries.DIMENSION), + TeslaNetworkKey::dimension, + BlockPos.STREAM_CODEC, + TeslaNetworkKey::pos, + TeslaNetworkKey::new + ); + + public TeslaNetworkKey(Level level, BlockPos pos) + { + this(level.dimension(), pos); + } + + public ServerLevel level() + { + TesseractProxy proxy = Proxies.get(TesseractProxy.class); + return proxy.hasServer() ? proxy.getServer().getLevel(dimension) : null; + } + + @Override + public int hashCode() + { + int dimensionHashCode = (31 * dimension.registry().hashCode() + dimension.location().hashCode()); + return 31 * dimensionHashCode + pos.hashCode(); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java new file mode 100644 index 00000000..e5ff6c29 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java @@ -0,0 +1,27 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +import com.google.common.collect.Maps; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; + +import java.util.Map; + +public final class TeslaNetworks +{ + private final Map networks = Maps.newHashMap(); + + public TeslaNetwork get(TeslaNetworkKey key) + { + return networks.computeIfAbsent(key, TeslaNetwork::new); + } + + public TeslaNetwork get(Level level, BlockPos pos) + { + return this.get(new TeslaNetworkKey(level, pos)); + } + + public void forget(TeslaNetwork network) + { + networks.remove(network.key()); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java new file mode 100644 index 00000000..b272dbbf --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -0,0 +1,59 @@ +package net.swedz.extended_industrialization.machines.component.tesla.receiver; + +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; + +public interface TeslaReceiver +{ + boolean hasNetwork(); + + TeslaNetworkKey getNetworkKey(); + + void setNetwork(TeslaNetworkKey key); + + long receiveEnergy(long maxReceive, boolean simulate); + + long getStoredEnergy(); + + long getEnergyCapacity(); + + interface Delegate extends TeslaReceiver + { + TeslaReceiver getDelegateReceiver(); + + @Override + default boolean hasNetwork() + { + return this.getDelegateReceiver().hasNetwork(); + } + + @Override + default TeslaNetworkKey getNetworkKey() + { + return this.getDelegateReceiver().getNetworkKey(); + } + + @Override + default void setNetwork(TeslaNetworkKey key) + { + this.getDelegateReceiver().setNetwork(key); + } + + @Override + default long receiveEnergy(long maxReceive, boolean simulate) + { + return this.getDelegateReceiver().receiveEnergy(maxReceive, simulate); + } + + @Override + default long getStoredEnergy() + { + return this.getDelegateReceiver().getStoredEnergy(); + } + + @Override + default long getEnergyCapacity() + { + return this.getDelegateReceiver().getEnergyCapacity(); + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java new file mode 100644 index 00000000..337c0404 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -0,0 +1,161 @@ +package net.swedz.extended_industrialization.machines.component.tesla.receiver; + +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.api.energy.EnergyApi; +import aztech.modern_industrialization.api.energy.MIEnergyStorage; +import aztech.modern_industrialization.machines.IComponent; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.components.CasingComponent; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworks; +import net.swedz.extended_industrialization.mixin.mi.accessor.CasingComponentAccessor; +import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; +import net.swedz.tesseract.neoforge.proxy.Proxies; +import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; + +import java.util.Optional; +import java.util.function.Supplier; + +public class TeslaReceiverComponent implements IComponent.ServerOnly, TeslaReceiver +{ + private final InputOutputDirectionalBlockCapabilityCache energyOutputCache; + private final MIEnergyStorage insertable; + + private Optional networkKey = Optional.empty(); + + public TeslaReceiverComponent(MachineBlockEntity machine, Supplier canOperate, CasingComponent casing) + { + energyOutputCache = new InputOutputDirectionalBlockCapabilityCache<>(EnergyApi.SIDED); + insertable = new MIEnergyStorage.NoExtract() + { + @Override + public boolean canConnect(CableTier cableTier) + { + return false; + } + + @Override + public long receive(long maxReceive, boolean simulate) + { + if(!canOperate.get()) + { + return 0; + } + MIEnergyStorage target = energyOutputCache.output(machine.getLevel(), machine.getBlockPos(), machine.orientation.outputDirection); + return target != null && target.canConnect(((CasingComponentAccessor) casing).getCurrentTier()) ? target.receive(maxReceive, simulate) : 0; + } + + @Override + public long getAmount() + { + MIEnergyStorage target = energyOutputCache.output(machine.getLevel(), machine.getBlockPos(), machine.orientation.outputDirection); + return target != null ? target.getAmount() : 0; + } + + @Override + public long getCapacity() + { + MIEnergyStorage target = energyOutputCache.output(machine.getLevel(), machine.getBlockPos(), machine.orientation.outputDirection); + return target != null ? target.getCapacity() : 0; + } + + @Override + public boolean canReceive() + { + return canOperate.get(); + } + }; + } + + public MIEnergyStorage insertable() + { + return insertable; + } + + @Override + public boolean hasNetwork() + { + return networkKey.isPresent(); + } + + @Override + public TeslaNetworkKey getNetworkKey() + { + return networkKey.orElseThrow(); + } + + @Override + public void setNetwork(TeslaNetworkKey key) + { + TesseractProxy proxy = Proxies.get(TesseractProxy.class); + if(!proxy.hasServer()) + { + throw new IllegalStateException("Cannot set network of a receiver from the client"); + } + TeslaNetworks networks = proxy.getServer().getTeslaNetworks(); + + if(this.hasNetwork()) + { + TeslaNetwork oldNetwork = networks.get(this.getNetworkKey()); + oldNetwork.remove(this); + if(oldNetwork.isEmpty()) + { + networks.forget(oldNetwork); + } + } + + networkKey = Optional.ofNullable(key); + + if(this.hasNetwork()) + { + networks.get(this.getNetworkKey()).add(this); + } + } + + @Override + public long receiveEnergy(long maxReceive, boolean simulate) + { + return insertable.receive(maxReceive, simulate); + } + + @Override + public long getStoredEnergy() + { + return insertable.getAmount(); + } + + @Override + public long getEnergyCapacity() + { + return insertable.getCapacity(); + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + if(this.hasNetwork()) + { + TeslaNetworkKey key = this.getNetworkKey(); + TeslaNetworkKey.CODEC.encodeStart(NbtOps.INSTANCE, key).result().ifPresent((t) -> tag.put("network_key", t)); + } + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + if(tag.contains("network_key", Tag.TAG_COMPOUND)) + { + CompoundTag keyTag = tag.getCompound("network_key"); + this.setNetwork(TeslaNetworkKey.CODEC.parse(NbtOps.INSTANCE, keyTag).result().orElse(null)); + } + else + { + this.setNetwork(null); + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java new file mode 100644 index 00000000..6618825c --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java @@ -0,0 +1,22 @@ +package net.swedz.extended_industrialization.mixin; + +import net.minecraft.server.MinecraftServer; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkHolder; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworks; +import org.spongepowered.asm.mixin.Implements; +import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(MinecraftServer.class) +@Implements(@Interface(iface = TeslaNetworkHolder.class, prefix = "teslaNetwork$")) +public class TeslaNetworkHolderMinecraftServerMixin +{ + @Unique + private final TeslaNetworks teslaNetworks = new TeslaNetworks(); + + public TeslaNetworks teslaNetwork$getTeslaNetworks() + { + return teslaNetworks; + } +} diff --git a/src/main/resources/extended_industrialization.mixins.json b/src/main/resources/extended_industrialization.mixins.json index c2e3335e..52da8cb8 100644 --- a/src/main/resources/extended_industrialization.mixins.json +++ b/src/main/resources/extended_industrialization.mixins.json @@ -7,6 +7,7 @@ "ArmorDyeRecipeIgnoreRainbowItemsMixin", "RainbowDyedItemColorMixin", "RemoveRainbowWhenDyeingMixin", + "TeslaNetworkHolderMinecraftServerMixin", "mi.accessor.CasingComponentAccessor", "mi.accessor.ConfigurableItemStackAccessor", "mi.accessor.RedstoneControlComponentAccessor", diff --git a/src/main/resources/interfaces.json b/src/main/resources/interfaces.json new file mode 100644 index 00000000..09e47f6a --- /dev/null +++ b/src/main/resources/interfaces.json @@ -0,0 +1,5 @@ +{ + "net/minecraft/server/MinecraftServer": [ + "net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder" + ] +} \ No newline at end of file From 89dbdd4ff8c92e8b202b689fc5d01f866491bc39 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 25 Sep 2024 15:19:35 -0400 Subject: [PATCH 006/159] Energy transmitting --- .../lang/en_us.json | 13 +- .../extended_industrialization/EIText.java | 13 +- .../item/TeslaCalibratorItem.java | 3 +- .../TeslaReceiverMachineBlockEntity.java | 51 ++++++-- .../teslatower/TeslaTowerBlockEntity.java | 67 +++++++++- .../component/tesla/TeslaNetworkPart.java | 10 ++ .../tesla/receiver/TeslaReceiver.java | 9 +- .../receiver/TeslaReceiverComponent.java | 22 ++++ .../tesla/transmitter/TeslaTransmitter.java | 38 ++++++ .../TeslaTransmitterComponent.java | 115 ++++++++++++++++++ 10 files changed, 311 insertions(+), 30 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index ef66bdd9..8edde77c 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -190,13 +190,16 @@ "text.extended_industrialization.steam_chainsaw_1": "- Press %s on still or flowing water to fill.", "text.extended_industrialization.steam_chainsaw_2": "- Place fuel inside the chainsaw using %s.", "text.extended_industrialization.steam_chainsaw_3": "- Toggle Silk Touch with %s + %s.", - "text.extended_industrialization.tesla_calibrator_clear": "Cleared link from tesla calibrator.", - "text.extended_industrialization.tesla_calibrator_link_failed_no_selection": "Failed to link receiver because no Tesla Tower is selected.", - "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected Tesla Tower.", + "text.extended_industrialization.tesla_calibrator_clear": "Cleared selection from tesla calibrator.", + "text.extended_industrialization.tesla_calibrator_link_failed_no_selection": "Failed to link receiver because no transmitter is selected.", + "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected transmitter.", "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", - "text.extended_industrialization.tesla_calibrator_selected": "Selected Tesla Tower for calibration.", + "text.extended_industrialization.tesla_calibrator_selected": "Selected transmitter for calibration.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", - "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any Tesla Tower", + "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", + "text.extended_industrialization.tesla_transmitter_has_network": "Established connection", + "text.extended_industrialization.tesla_transmitter_no_network": "No network found", + "text.extended_industrialization.tesla_transmitter_receivers": "Receivers: %d", "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", "text.extended_industrialization.universal_transformer_to_tier_input": "Casing for cable tier to convert to (LV by default).", "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected." diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index f3c0b5fc..3b53c988 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -96,13 +96,16 @@ public enum EIText implements TranslatableTextEnum STEAM_CHAINSAW_1("- Press %s on still or flowing water to fill."), STEAM_CHAINSAW_2("- Place fuel inside the chainsaw using %s."), STEAM_CHAINSAW_3("- Toggle Silk Touch with %s + %s."), - TESLA_CALIBRATOR_CLEAR("Cleared link from tesla calibrator."), + TESLA_CALIBRATOR_CLEAR("Cleared selection from tesla calibrator."), TESLA_CALIBRATOR_LINKED("Linked to %s"), - TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION("Failed to link receiver because no Tesla Tower is selected."), - TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected Tesla Tower."), - TESLA_CALIBRATOR_SELECTED("Selected Tesla Tower for calibration."), + TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION("Failed to link receiver because no transmitter is selected."), + TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), + TESLA_CALIBRATOR_SELECTED("Selected transmitter for calibration."), TESLA_RECEIVER_LINKED("Linked to %s"), - TESLA_RECEIVER_NO_LINK("Not linked to any Tesla Tower"), + TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), + TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), + TESLA_TRANSMITTER_HAS_NETWORK("Established connection"), + TESLA_TRANSMITTER_NO_NETWORK("No network found"), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."); diff --git a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java index 767db039..52059de3 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java @@ -16,6 +16,7 @@ import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import java.util.List; @@ -40,7 +41,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) BlockEntity hitBlockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); if(!context.getLevel().isClientSide()) { - if(player.isShiftKeyDown() && hitBlockEntity instanceof TeslaTowerBlockEntity) + if(player.isShiftKeyDown() && hitBlockEntity instanceof TeslaTransmitter) { itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new TeslaNetworkKey(context.getLevel(), context.getClickedPos())); player.displayClientMessage(EIText.TESLA_CALIBRATOR_SELECTED.text(), true); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 6fab8b24..e5c635d5 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -30,7 +30,7 @@ public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity im private final RedstoneControlComponent redstoneControl; private final CasingComponent casing; - private final TeslaReceiverComponent teslaNetwork; + private final TeslaReceiverComponent receiver; public TeslaReceiverMachineBlockEntity(BEP bep) { @@ -43,17 +43,17 @@ public TeslaReceiverMachineBlockEntity(BEP bep) redstoneControl = new RedstoneControlComponent(); casing = new CasingComponent(); - teslaNetwork = new TeslaReceiverComponent(this, () -> redstoneControl.doAllowNormalOperation(this), casing); + receiver = new TeslaReceiverComponent(this, () -> redstoneControl.doAllowNormalOperation(this), casing); - this.registerComponents(redstoneControl, casing, teslaNetwork); + this.registerComponents(redstoneControl, casing, receiver); this.registerGuiComponent(new ModularMultiblockGui.Server(0, 60, () -> { List text = Lists.newArrayList(); - if(teslaNetwork.hasNetwork()) + if(receiver.hasNetwork()) { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(teslaNetwork.getNetworkKey()).copy().setStyle(Style.EMPTY)))); + text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(receiver.getNetworkKey()).copy().setStyle(Style.EMPTY)))); } else { @@ -86,7 +86,44 @@ protected MachineModelClientData getMachineModelData() @Override public TeslaReceiver getDelegateReceiver() { - return teslaNetwork; + return receiver; + } + + @Override + public void setRemoved() + { + super.setRemoved(); + + if(level.isClientSide()) + { + return; + } + + receiver.removeFromNetwork(); + } + + @Override + public void clearRemoved() + { + super.clearRemoved(); + + if(level.isClientSide()) + { + return; + } + + receiver.addToNetwork(); + } + + @Override + public void onChunkUnloaded() + { + if(level.isClientSide()) + { + return; + } + + receiver.removeFromNetwork(); } public static void registerEnergyApi(BlockEntityType bet) @@ -95,7 +132,7 @@ public static void registerEnergyApi(BlockEntityType bet) event.registerBlockEntity(EnergyApi.SIDED, bet, (be, direction) -> { TeslaReceiverMachineBlockEntity machine = (TeslaReceiverMachineBlockEntity) be; - return machine.orientation.outputDirection == direction ? null : machine.teslaNetwork.insertable(); + return machine.orientation.outputDirection == direction ? null : machine.receiver.insertable(); })); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index ccf2b5a3..a60e1b8a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower; +import aztech.modern_industrialization.MIText; import aztech.modern_industrialization.api.machine.component.EnergyAccess; import aztech.modern_industrialization.api.machine.holder.EnergyListComponentHolder; import aztech.modern_industrialization.machines.BEP; @@ -10,18 +11,27 @@ import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; import aztech.modern_industrialization.machines.multiblocks.ShapeMatcher; import com.google.common.collect.Lists; +import net.minecraft.world.level.Level; import net.swedz.extended_industrialization.EI; -import net.swedz.tesseract.neoforge.compat.mi.helper.CommonGuiComponents; +import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; +import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; +import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine; import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; import java.util.List; -public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder +public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate { private final RedstoneControlComponent redstoneControl; private final List energyInputs = Lists.newArrayList(); + private final TeslaTransmitterComponent transmitter; + public TeslaTowerBlockEntity(BEP bep) { super( @@ -32,10 +42,34 @@ public TeslaTowerBlockEntity(BEP bep) redstoneControl = new RedstoneControlComponent(); + transmitter = new TeslaTransmitterComponent(this, energyInputs); + this.registerComponents(redstoneControl); - // TODO display more data on this screen - this.registerGuiComponent(CommonGuiComponents.standardMultiblockScreen(this, isActive)); + this.registerGuiComponent(new ModularMultiblockGui.Server(0, ModularMultiblockGui.HEIGHT, () -> + { + List text = Lists.newArrayList(); + + text.add(this.isShapeValid() ? new ModularMultiblockGuiLine(MIText.MultiblockShapeValid.text()) : new ModularMultiblockGuiLine(MIText.MultiblockShapeInvalid.text(), 0xFF0000)); + + if(this.isShapeValid()) + { + if(transmitter.hasNetwork()) + { + TeslaNetwork network = level.getServer().getTeslaNetworks().get(transmitter.getNetworkKey()); + + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_HAS_NETWORK.text())); + + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_RECEIVERS.text(network.size()))); + } + else + { + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_NETWORK.text(), 0xFF0000)); + } + } + + return text; + })); this.registerGuiComponent(SHAPES.createShapeSelectionGuiComponent(this, activeShape, true)); @@ -59,6 +93,20 @@ public void onSuccessfulMatch(ShapeMatcher shapeMatcher) } } + @Override + public TeslaTransmitter getDelegateTransmitter() + { + return transmitter; + } + + @Override + public void setLevel(Level level) + { + super.setLevel(level); + + transmitter.setNetwork(new TeslaNetworkKey(level, worldPosition)); + } + // TODO custom linking checks for cable tier of hatches, they must all match @Override @@ -66,7 +114,16 @@ public void tick() { super.tick(); - // TODO + if(level.isClientSide()) + { + return; + } + + if(redstoneControl.doAllowNormalOperation(this)) + { + // TODO limit transmit rate + transmitter.transmitEnergy(Long.MAX_VALUE); + } } private static final TeslaTowerShapes SHAPES = new TeslaTowerShapes(); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java new file mode 100644 index 00000000..023a8a61 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java @@ -0,0 +1,10 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +public interface TeslaNetworkPart +{ + boolean hasNetwork(); + + TeslaNetworkKey getNetworkKey(); + + void setNetwork(TeslaNetworkKey key); +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index b272dbbf..d00544c4 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,15 +1,10 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; -public interface TeslaReceiver +public interface TeslaReceiver extends TeslaNetworkPart { - boolean hasNetwork(); - - TeslaNetworkKey getNetworkKey(); - - void setNetwork(TeslaNetworkKey key); - long receiveEnergy(long maxReceive, boolean simulate); long getStoredEnergy(); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 337c0404..44ef3976 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -135,6 +135,28 @@ public long getEnergyCapacity() return insertable.getCapacity(); } + public void removeFromNetwork() + { + if(this.hasNetwork()) + { + TesseractProxy proxy = Proxies.get(TesseractProxy.class); + TeslaNetworks networks = proxy.getServer().getTeslaNetworks(); + + networks.get(this.getNetworkKey()).remove(this); + } + } + + public void addToNetwork() + { + if(this.hasNetwork()) + { + TesseractProxy proxy = Proxies.get(TesseractProxy.class); + TeslaNetworks networks = proxy.getServer().getTeslaNetworks(); + + networks.get(this.getNetworkKey()).add(this); + } + } + @Override public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java new file mode 100644 index 00000000..ebe76389 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -0,0 +1,38 @@ +package net.swedz.extended_industrialization.machines.component.tesla.transmitter; + +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; + +public interface TeslaTransmitter extends TeslaNetworkPart +{ + long transmitEnergy(long maxTransmit); + + interface Delegate extends TeslaTransmitter + { + TeslaTransmitter getDelegateTransmitter(); + + @Override + default boolean hasNetwork() + { + return this.getDelegateTransmitter().hasNetwork(); + } + + @Override + default TeslaNetworkKey getNetworkKey() + { + return this.getDelegateTransmitter().getNetworkKey(); + } + + @Override + default void setNetwork(TeslaNetworkKey key) + { + this.getDelegateTransmitter().setNetwork(key); + } + + @Override + default long transmitEnergy(long maxTransmit) + { + return this.getDelegateTransmitter().transmitEnergy(maxTransmit); + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java new file mode 100644 index 00000000..2bd4e564 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -0,0 +1,115 @@ +package net.swedz.extended_industrialization.machines.component.tesla.transmitter; + +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.api.energy.MIEnergyStorage; +import aztech.modern_industrialization.machines.IComponent; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.components.EnergyComponent; +import aztech.modern_industrialization.util.Simulation; +import dev.technici4n.grandpower.api.EnergyStorageUtil; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworks; + +import java.util.List; +import java.util.Optional; + +public class TeslaTransmitterComponent implements IComponent.ServerOnly, TeslaTransmitter +{ + private final MachineBlockEntity machine; + + private final MIEnergyStorage energyStorage; + + private Optional networkKey = Optional.empty(); + + public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs) + { + this.machine = machine; + + // TODO some kind of helper method for this would be nice + energyStorage = new MIEnergyStorage.NoInsert() + { + @Override + public boolean canConnect(CableTier cableTier) + { + return false; + } + + @Override + public long extract(long maxExtract, boolean simulate) + { + long remaining = maxExtract; + long extracted = 0; + for(EnergyComponent energyComponent : energyInputs) + { + if(remaining > 0) + { + extracted += energyComponent.consumeEu(remaining, simulate ? Simulation.SIMULATE : Simulation.ACT); + remaining -= extracted; + } + } + return extracted; + } + + @Override + public long getAmount() + { + return energyInputs.stream().mapToLong(EnergyComponent::getEu).sum(); + } + + @Override + public long getCapacity() + { + return energyInputs.stream().mapToLong(EnergyComponent::getCapacity).sum(); + } + + @Override + public boolean canExtract() + { + return true; + } + }; + } + + @Override + public boolean hasNetwork() + { + return networkKey.isPresent(); + } + + @Override + public TeslaNetworkKey getNetworkKey() + { + return networkKey.orElseThrow(); + } + + @Override + public void setNetwork(TeslaNetworkKey key) + { + networkKey = Optional.ofNullable(key); + } + + @Override + public long transmitEnergy(long maxTransmit) + { + if(this.hasNetwork()) + { + TeslaNetworks networks = machine.getLevel().getServer().getTeslaNetworks(); + TeslaNetwork network = networks.get(this.getNetworkKey()); + return EnergyStorageUtil.move(energyStorage, network, maxTransmit); + } + return 0; + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + } +} From aaecf8a80b11a13ed3909b1bb64dda3419af0527 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 25 Sep 2024 17:00:48 -0400 Subject: [PATCH 007/159] Minor code cleanup --- .../tesla/transmitter/TeslaTransmitterComponent.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index 2bd4e564..556f9217 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -44,11 +44,12 @@ public long extract(long maxExtract, boolean simulate) long extracted = 0; for(EnergyComponent energyComponent : energyInputs) { - if(remaining > 0) + if(remaining == 0) { - extracted += energyComponent.consumeEu(remaining, simulate ? Simulation.SIMULATE : Simulation.ACT); - remaining -= extracted; + break; } + extracted += energyComponent.consumeEu(remaining, simulate ? Simulation.SIMULATE : Simulation.ACT); + remaining -= extracted; } return extracted; } From a004604d9febd501af29a478b413d4eb45cb6b32 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 25 Sep 2024 21:25:14 -0400 Subject: [PATCH 008/159] Require all energy hatches to be the same tier --- .../teslatower/SameCableTierShapeMatcher.java | 67 +++++++++++++++++++ .../teslatower/TeslaTowerBlockEntity.java | 6 +- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java new file mode 100644 index 00000000..aed536d4 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java @@ -0,0 +1,67 @@ +package net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower; + +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.machines.blockentities.hatches.EnergyHatch; +import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; +import aztech.modern_industrialization.machines.multiblocks.ShapeMatcher; +import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; + +public class SameCableTierShapeMatcher extends ShapeMatcher +{ + public SameCableTierShapeMatcher(Level level, BlockPos controllerPos, Direction controllerDirection, ShapeTemplate template) + { + super(level, controllerPos, controllerDirection, template); + } + + @Override + public void rematch(Level level) + { + this.unlinkHatches(); + matchSuccessful = true; + + for(BlockPos pos : simpleMembers.keySet()) + { + int originalHatchCount = matchedHatches.size(); + if(!this.matches(pos, level, matchedHatches)) + { + matchSuccessful = false; + } + else if(originalHatchCount != matchedHatches.size()) + { + CableTier cableTier = null; + for(HatchBlockEntity hatch : matchedHatches) + { + if(hatch instanceof EnergyHatch energyHatch) + { + if(cableTier == null) + { + cableTier = energyHatch.getCableTier(); + } + if(cableTier != energyHatch.getCableTier()) + { + matchSuccessful = false; + break; + } + } + } + } + } + + if(!matchSuccessful) + { + matchedHatches.clear(); + } + else + { + for(HatchBlockEntity hatch : matchedHatches) + { + hatch.link(template.hatchCasing); + } + } + + needsRematch = false; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index a60e1b8a..ef0bab97 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -107,7 +107,11 @@ public void setLevel(Level level) transmitter.setNetwork(new TeslaNetworkKey(level, worldPosition)); } - // TODO custom linking checks for cable tier of hatches, they must all match + @Override + protected ShapeMatcher createShapeMatcher() + { + return new SameCableTierShapeMatcher(level, worldPosition, orientation.facingDirection, this.getActiveShape()); + } @Override public void tick() From 334395e7bf70e083ecc1d624ff192aaf6d1213ad Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 25 Sep 2024 22:00:27 -0400 Subject: [PATCH 009/159] Simplify multiple hatch type check --- .../teslatower/SameCableTierShapeMatcher.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java index aed536d4..1715dde7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java @@ -5,10 +5,13 @@ import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; import aztech.modern_industrialization.machines.multiblocks.ShapeMatcher; import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; +import com.google.common.collect.Sets; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.Level; +import java.util.Set; + public class SameCableTierShapeMatcher extends ShapeMatcher { public SameCableTierShapeMatcher(Level level, BlockPos controllerPos, Direction controllerDirection, ShapeTemplate template) @@ -31,16 +34,13 @@ public void rematch(Level level) } else if(originalHatchCount != matchedHatches.size()) { - CableTier cableTier = null; + Set tiers = Sets.newHashSet(); for(HatchBlockEntity hatch : matchedHatches) { if(hatch instanceof EnergyHatch energyHatch) { - if(cableTier == null) - { - cableTier = energyHatch.getCableTier(); - } - if(cableTier != energyHatch.getCableTier()) + tiers.add(energyHatch.getCableTier()); + if(tiers.size() > 1) { matchSuccessful = false; break; From c7a3bc75aa60f4fd22803eb2aca56d77f061f873 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 26 Sep 2024 02:17:31 -0400 Subject: [PATCH 010/159] Prevent tower from linking with multiple energy hatch tiers --- .../lang/en_us.json | 1 + .../extended_industrialization/EIText.java | 1 + .../teslatower/SameCableTierShapeMatcher.java | 9 +++++++ .../teslatower/TeslaTowerBlockEntity.java | 24 ++++++++++++++++--- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 8edde77c..ace2034c 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -198,6 +198,7 @@ "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_transmitter_has_network": "Established connection", + "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", "text.extended_industrialization.tesla_transmitter_no_network": "No network found", "text.extended_industrialization.tesla_transmitter_receivers": "Receivers: %d", "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 3b53c988..7a2752b4 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -106,6 +106,7 @@ public enum EIText implements TranslatableTextEnum TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), TESLA_TRANSMITTER_HAS_NETWORK("Established connection"), TESLA_TRANSMITTER_NO_NETWORK("No network found"), + TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java index 1715dde7..1fb8a00a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java @@ -14,11 +14,18 @@ public class SameCableTierShapeMatcher extends ShapeMatcher { + protected boolean hasMismatchingHatches; + public SameCableTierShapeMatcher(Level level, BlockPos controllerPos, Direction controllerDirection, ShapeTemplate template) { super(level, controllerPos, controllerDirection, template); } + public boolean hasMismatchingHatches() + { + return hasMismatchingHatches; + } + @Override public void rematch(Level level) { @@ -42,6 +49,7 @@ else if(originalHatchCount != matchedHatches.size()) tiers.add(energyHatch.getCableTier()); if(tiers.size() > 1) { + hasMismatchingHatches = true; matchSuccessful = false; break; } @@ -56,6 +64,7 @@ else if(originalHatchCount != matchedHatches.size()) } else { + hasMismatchingHatches = false; for(HatchBlockEntity hatch : matchedHatches) { hatch.link(template.hatchCasing); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index ef0bab97..ec0de456 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -67,6 +67,13 @@ public TeslaTowerBlockEntity(BEP bep) text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_NETWORK.text(), 0xFF0000)); } } + else + { + if(this.getShapeMatcher().hasMismatchingHatches()) + { + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_MISMATCHING_HATCHES.text(), 0xFF0000, true)); + } + } return text; })); @@ -84,8 +91,10 @@ public List getEnergyComponents() } @Override - public void onSuccessfulMatch(ShapeMatcher shapeMatcher) + public void onMatchSuccessful() { + super.onMatchSuccessful(); + energyInputs.clear(); for(HatchBlockEntity hatch : shapeMatcher.getMatchedHatches()) { @@ -108,9 +117,18 @@ public void setLevel(Level level) } @Override - protected ShapeMatcher createShapeMatcher() + public ShapeMatcher createShapeMatcher() + { + return new SameCableTierShapeMatcher( + level, worldPosition, orientation.facingDirection, + this.getActiveShape() + ); + } + + @Override + public SameCableTierShapeMatcher getShapeMatcher() { - return new SameCableTierShapeMatcher(level, worldPosition, orientation.facingDirection, this.getActiveShape()); + return (SameCableTierShapeMatcher) shapeMatcher; } @Override From e501a3e6a4208edf74f948428d2f2559c63e1326 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 26 Sep 2024 04:35:21 -0400 Subject: [PATCH 011/159] Require that receivers are the same voltage as the network --- .../lang/en_us.json | 1 + .../extended_industrialization/EIText.java | 1 + .../TeslaReceiverMachineBlockEntity.java | 22 ++++++-- .../teslatower/TeslaTowerBlockEntity.java | 10 ++++ .../component/tesla/TeslaNetwork.java | 52 ++++++++++++++++--- .../component/tesla/TeslaNetworkPart.java | 4 ++ .../tesla/receiver/TeslaReceiver.java | 16 ++++++ .../receiver/TeslaReceiverComponent.java | 31 +++++++++-- .../tesla/transmitter/TeslaTransmitter.java | 7 +++ .../TeslaTransmitterComponent.java | 7 +++ 10 files changed, 138 insertions(+), 13 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index ace2034c..a14bba8b 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -196,6 +196,7 @@ "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", "text.extended_industrialization.tesla_calibrator_selected": "Selected transmitter for calibration.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", + "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Missing %s hull", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_transmitter_has_network": "Established connection", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 7a2752b4..5db32007 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -102,6 +102,7 @@ public enum EIText implements TranslatableTextEnum TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), TESLA_CALIBRATOR_SELECTED("Selected transmitter for calibration."), TESLA_RECEIVER_LINKED("Linked to %s"), + TESLA_RECEIVER_MISMATCHING_VOLTAGE("Missing %s hull"), TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), TESLA_TRANSMITTER_HAS_NETWORK("Established connection"), diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index e5c635d5..eb0728e2 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -13,6 +13,7 @@ import aztech.modern_industrialization.machines.models.MachineModelClientData; import com.google.common.collect.Lists; import net.minecraft.network.chat.Style; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntityType; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; @@ -41,7 +42,20 @@ public TeslaReceiverMachineBlockEntity(BEP bep) ); redstoneControl = new RedstoneControlComponent(); - casing = new CasingComponent(); + casing = new CasingComponent() + { + @Override + protected void setCasingStack(ItemStack stack) + { + super.setCasingStack(stack); + + // TODO this check doesnt work properly + if(level != null && !level.isClientSide()) + { + receiver.addToNetwork(); + } + } + }; receiver = new TeslaReceiverComponent(this, () -> redstoneControl.doAllowNormalOperation(this), casing); @@ -51,9 +65,11 @@ public TeslaReceiverMachineBlockEntity(BEP bep) { List text = Lists.newArrayList(); - if(receiver.hasNetwork()) + if(this.hasNetwork()) { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(receiver.getNetworkKey()).copy().setStyle(Style.EMPTY)))); + text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(this.getNetworkKey()).copy().setStyle(Style.EMPTY)))); + + // TODO display EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE if the voltage of this receiver is not the same voltage as the network its linked to } else { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index ec0de456..28aa5f1b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -1,9 +1,11 @@ package net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower; import aztech.modern_industrialization.MIText; +import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.machine.component.EnergyAccess; import aztech.modern_industrialization.api.machine.holder.EnergyListComponentHolder; import aztech.modern_industrialization.machines.BEP; +import aztech.modern_industrialization.machines.blockentities.hatches.EnergyHatch; import aztech.modern_industrialization.machines.components.EnergyComponent; import aztech.modern_industrialization.machines.components.RedstoneControlComponent; import aztech.modern_industrialization.machines.gui.MachineGuiParameters; @@ -21,6 +23,8 @@ import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine; import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; +import net.swedz.tesseract.neoforge.proxy.Proxies; +import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; import java.util.List; @@ -95,11 +99,17 @@ public void onMatchSuccessful() { super.onMatchSuccessful(); + CableTier cableTier = null; energyInputs.clear(); for(HatchBlockEntity hatch : shapeMatcher.getMatchedHatches()) { hatch.appendEnergyInputs(energyInputs); + if(cableTier == null && hatch instanceof EnergyHatch energyHatch) + { + cableTier = energyHatch.getCableTier(); + } } + Proxies.get(TesseractProxy.class).getServer().getTeslaNetworks().get(this.getNetworkKey()).setCableTier(cableTier); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index a88c5b17..dddee6c7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -11,7 +11,10 @@ public final class TeslaNetwork implements MIEnergyStorage.NoExtract { private final TeslaNetworkKey key; - private final Set receivers = Sets.newHashSet(); + private final Set loadedReceivers = Sets.newHashSet(); + private final Set receivers = Sets.newHashSet(); + + private CableTier cableTier; public TeslaNetwork(TeslaNetworkKey key) { @@ -23,13 +26,46 @@ public TeslaNetworkKey key() return key; } + public CableTier getCableTier() + { + return cableTier; + } + + public void setCableTier(CableTier cableTier) + { + this.cableTier = cableTier; + this.updateAll(); + } + + private void updateAll() + { + for(TeslaReceiver receiver : loadedReceivers) + { + this.update(receiver); + } + } + + private void update(TeslaReceiver receiver) + { + if(receiver.canReceiveFrom(this)) + { + receivers.add(receiver); + } + else + { + receivers.remove(receiver); + } + } + public void add(TeslaReceiver receiver) { - receivers.add(receiver); + loadedReceivers.add(receiver); + this.update(receiver); } public void remove(TeslaReceiver receiver) { + loadedReceivers.remove(receiver); receivers.remove(receiver); } @@ -46,20 +82,22 @@ public boolean isEmpty() @Override public boolean canReceive() { - return !receivers.isEmpty(); + return true; } @Override public long receive(long maxReceive, boolean simulate) { long amountReceived = 0; + long remaining = maxReceive; int index = 0; for(TeslaReceiver receiver : receivers) { int remainingStorages = receivers.size() - index; - long remainingAmountToReceive = maxReceive - amountReceived; - long amountToReceive = remainingAmountToReceive / remainingStorages; - amountReceived += receiver.receiveEnergy(amountToReceive, simulate); + long amountToReceive = remainingStorages == 1 ? remaining : remaining / remainingStorages; + long received = receiver.receiveEnergy(amountToReceive, simulate); + amountReceived += received; + remaining -= received; index++; } return amountReceived; @@ -80,6 +118,6 @@ public long getCapacity() @Override public boolean canConnect(CableTier cableTier) { - return false; + return this.cableTier == cableTier; } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java index 023a8a61..a6e9ebd8 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java @@ -1,5 +1,7 @@ package net.swedz.extended_industrialization.machines.component.tesla; +import net.minecraft.core.BlockPos; + public interface TeslaNetworkPart { boolean hasNetwork(); @@ -7,4 +9,6 @@ public interface TeslaNetworkPart TeslaNetworkKey getNetworkKey(); void setNetwork(TeslaNetworkKey key); + + BlockPos getPosition(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index d00544c4..6a7f5b92 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,10 +1,14 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; +import net.minecraft.core.BlockPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; public interface TeslaReceiver extends TeslaNetworkPart { + boolean canReceiveFrom(TeslaNetwork network); + long receiveEnergy(long maxReceive, boolean simulate); long getStoredEnergy(); @@ -15,6 +19,12 @@ interface Delegate extends TeslaReceiver { TeslaReceiver getDelegateReceiver(); + @Override + default boolean canReceiveFrom(TeslaNetwork network) + { + return this.getDelegateReceiver().canReceiveFrom(network); + } + @Override default boolean hasNetwork() { @@ -33,6 +43,12 @@ default void setNetwork(TeslaNetworkKey key) this.getDelegateReceiver().setNetwork(key); } + @Override + default BlockPos getPosition() + { + return this.getDelegateReceiver().getPosition(); + } + @Override default long receiveEnergy(long maxReceive, boolean simulate) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 44ef3976..a51c24f5 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -6,6 +6,7 @@ import aztech.modern_industrialization.machines.IComponent; import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.components.CasingComponent; +import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; @@ -13,7 +14,6 @@ import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworks; -import net.swedz.extended_industrialization.mixin.mi.accessor.CasingComponentAccessor; import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; @@ -21,8 +21,12 @@ import java.util.Optional; import java.util.function.Supplier; -public class TeslaReceiverComponent implements IComponent.ServerOnly, TeslaReceiver +public class TeslaReceiverComponent implements IComponent, TeslaReceiver { + private final MachineBlockEntity machine; + + private final Supplier cableTier; + private final InputOutputDirectionalBlockCapabilityCache energyOutputCache; private final MIEnergyStorage insertable; @@ -30,6 +34,10 @@ public class TeslaReceiverComponent implements IComponent.ServerOnly, TeslaRecei public TeslaReceiverComponent(MachineBlockEntity machine, Supplier canOperate, CasingComponent casing) { + this.machine = machine; + + cableTier = casing::getCableTier; + energyOutputCache = new InputOutputDirectionalBlockCapabilityCache<>(EnergyApi.SIDED); insertable = new MIEnergyStorage.NoExtract() { @@ -47,7 +55,7 @@ public long receive(long maxReceive, boolean simulate) return 0; } MIEnergyStorage target = energyOutputCache.output(machine.getLevel(), machine.getBlockPos(), machine.orientation.outputDirection); - return target != null && target.canConnect(((CasingComponentAccessor) casing).getCurrentTier()) ? target.receive(maxReceive, simulate) : 0; + return target != null && target.canConnect(TeslaReceiverComponent.this.getCableTier()) ? target.receive(maxReceive, simulate) : 0; } @Override @@ -77,6 +85,17 @@ public MIEnergyStorage insertable() return insertable; } + private CableTier getCableTier() + { + return cableTier.get(); + } + + @Override + public boolean canReceiveFrom(TeslaNetwork network) + { + return this.getCableTier() == network.getCableTier(); + } + @Override public boolean hasNetwork() { @@ -117,6 +136,12 @@ public void setNetwork(TeslaNetworkKey key) } } + @Override + public BlockPos getPosition() + { + return machine.getBlockPos(); + } + @Override public long receiveEnergy(long maxReceive, boolean simulate) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index ebe76389..6ea337c9 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.machines.component.tesla.transmitter; +import net.minecraft.core.BlockPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; @@ -29,6 +30,12 @@ default void setNetwork(TeslaNetworkKey key) this.getDelegateTransmitter().setNetwork(key); } + @Override + default BlockPos getPosition() + { + return this.getDelegateTransmitter().getPosition(); + } + @Override default long transmitEnergy(long maxTransmit) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index 556f9217..b32aed3d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -7,6 +7,7 @@ import aztech.modern_industrialization.machines.components.EnergyComponent; import aztech.modern_industrialization.util.Simulation; import dev.technici4n.grandpower.api.EnergyStorageUtil; +import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; @@ -92,6 +93,12 @@ public void setNetwork(TeslaNetworkKey key) networkKey = Optional.ofNullable(key); } + @Override + public BlockPos getPosition() + { + return machine.getBlockPos(); + } + @Override public long transmitEnergy(long maxTransmit) { From 8a3e3e7ab7d8a1feec52e51bf120085cde77a84a Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 26 Sep 2024 18:56:31 -0400 Subject: [PATCH 012/159] Clean up tesla transmitter loading & unloading --- .../lang/en_us.json | 3 +- .../extended_industrialization/EIText.java | 3 +- .../TeslaReceiverMachineBlockEntity.java | 43 +++++------- .../teslatower/TeslaTowerBlockEntity.java | 70 ++++++++++++++++--- .../component/tesla/TeslaNetwork.java | 35 ++++++++-- .../component/tesla/TeslaNetworkPart.java | 19 +++++ .../tesla/receiver/TeslaReceiver.java | 7 ++ .../receiver/TeslaReceiverComponent.java | 32 ++++----- .../tesla/transmitter/TeslaTransmitter.java | 7 ++ .../TeslaTransmitterComponent.java | 17 +++-- 10 files changed, 165 insertions(+), 71 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index a14bba8b..4b34954f 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -198,10 +198,11 @@ "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Missing %s hull", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", - "text.extended_industrialization.tesla_transmitter_has_network": "Established connection", + "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", "text.extended_industrialization.tesla_transmitter_no_network": "No network found", "text.extended_industrialization.tesla_transmitter_receivers": "Receivers: %d", + "text.extended_industrialization.tesla_transmitter_voltage": "Transmitting %s power", "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", "text.extended_industrialization.universal_transformer_to_tier_input": "Casing for cable tier to convert to (LV by default).", "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected." diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 5db32007..588a96b5 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -104,10 +104,11 @@ public enum EIText implements TranslatableTextEnum TESLA_RECEIVER_LINKED("Linked to %s"), TESLA_RECEIVER_MISMATCHING_VOLTAGE("Missing %s hull"), TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), + TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), - TESLA_TRANSMITTER_HAS_NETWORK("Established connection"), TESLA_TRANSMITTER_NO_NETWORK("No network found"), TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), + TESLA_TRANSMITTER_VOLTAGE("Transmitting %s power"), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index eb0728e2..2721ea6a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -17,6 +17,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; @@ -57,7 +58,7 @@ protected void setCasingStack(ItemStack stack) } }; - receiver = new TeslaReceiverComponent(this, () -> redstoneControl.doAllowNormalOperation(this), casing); + receiver = new TeslaReceiverComponent(this, () -> redstoneControl.doAllowNormalOperation(this), casing::getCableTier); this.registerComponents(redstoneControl, casing, receiver); @@ -67,9 +68,21 @@ protected void setCasingStack(ItemStack stack) if(this.hasNetwork()) { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(this.getNetworkKey()).copy().setStyle(Style.EMPTY)))); + TeslaNetwork network = this.getNetwork(); - // TODO display EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE if the voltage of this receiver is not the same voltage as the network its linked to + text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(this.getNetworkKey()).copy().setStyle(Style.EMPTY)), 0xFFFFFF, true)); + + if(network.isTransmitterLoaded()) + { + if(!receiver.canReceiveFrom(network)) + { + text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE.text(network.getCableTier().shortEnglishName()), 0xFF0000)); + } + } + else + { + text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_UNLOADED_TRANSMITTER.text(), 0xFF0000)); + } } else { @@ -118,30 +131,6 @@ public void setRemoved() receiver.removeFromNetwork(); } - @Override - public void clearRemoved() - { - super.clearRemoved(); - - if(level.isClientSide()) - { - return; - } - - receiver.addToNetwork(); - } - - @Override - public void onChunkUnloaded() - { - if(level.isClientSide()) - { - return; - } - - receiver.removeFromNetwork(); - } - public static void registerEnergyApi(BlockEntityType bet) { MICapabilities.onEvent((event) -> diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 28aa5f1b..74a5608c 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -23,8 +23,6 @@ import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine; import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; -import net.swedz.tesseract.neoforge.proxy.Proxies; -import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; import java.util.List; @@ -36,6 +34,8 @@ public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEnti private final TeslaTransmitterComponent transmitter; + private CableTier cableTier; + public TeslaTowerBlockEntity(BEP bep) { super( @@ -46,7 +46,7 @@ public TeslaTowerBlockEntity(BEP bep) redstoneControl = new RedstoneControlComponent(); - transmitter = new TeslaTransmitterComponent(this, energyInputs); + transmitter = new TeslaTransmitterComponent(this, energyInputs, () -> cableTier); this.registerComponents(redstoneControl); @@ -58,13 +58,20 @@ public TeslaTowerBlockEntity(BEP bep) if(this.isShapeValid()) { - if(transmitter.hasNetwork()) + if(this.hasNetwork()) { - TeslaNetwork network = level.getServer().getTeslaNetworks().get(transmitter.getNetworkKey()); - - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_HAS_NETWORK.text())); + TeslaNetwork network = this.getNetwork(); - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_RECEIVERS.text(network.size()))); + if(network.isTransmitterLoaded()) + { + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_VOLTAGE.text(network.getCableTier().shortEnglishName()))); + + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_RECEIVERS.text(network.size()))); + } + else + { + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_NETWORK.text(), 0xFF0000)); + } } else { @@ -109,7 +116,28 @@ public void onMatchSuccessful() cableTier = energyHatch.getCableTier(); } } - Proxies.get(TesseractProxy.class).getServer().getTeslaNetworks().get(this.getNetworkKey()).setCableTier(cableTier); + this.cableTier = cableTier; + if(this.hasNetwork()) + { + this.getNetwork().loadTransmitter(transmitter); + } + else + { + EI.LOGGER.error("Failed to load transmitter into the network because no network was set yet"); + } + } + + @Override + protected void onMatchFailure() + { + if(this.hasNetwork()) + { + this.getNetwork().unloadTransmitter(); + } + else + { + EI.LOGGER.error("Failed to unload transmitter into the network because no network was set yet"); + } } @Override @@ -123,7 +151,7 @@ public void setLevel(Level level) { super.setLevel(level); - transmitter.setNetwork(new TeslaNetworkKey(level, worldPosition)); + this.setNetwork(new TeslaNetworkKey(level, worldPosition)); } @Override @@ -154,7 +182,27 @@ public void tick() if(redstoneControl.doAllowNormalOperation(this)) { // TODO limit transmit rate - transmitter.transmitEnergy(Long.MAX_VALUE); + this.transmitEnergy(Long.MAX_VALUE); + } + } + + @Override + public void setRemoved() + { + super.setRemoved(); + + if(level.isClientSide()) + { + return; + } + + if(this.hasNetwork()) + { + this.getNetwork().unloadTransmitter(); + } + else + { + EI.LOGGER.error("Failed to unload transmitter into the network because no network was set yet"); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index dddee6c7..1bbd5971 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -4,7 +4,9 @@ import aztech.modern_industrialization.api.energy.MIEnergyStorage; import com.google.common.collect.Sets; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import java.util.Optional; import java.util.Set; public final class TeslaNetwork implements MIEnergyStorage.NoExtract @@ -14,7 +16,7 @@ public final class TeslaNetwork implements MIEnergyStorage.NoExtract private final Set loadedReceivers = Sets.newHashSet(); private final Set receivers = Sets.newHashSet(); - private CableTier cableTier; + private Optional transmitter = Optional.empty(); public TeslaNetwork(TeslaNetworkKey key) { @@ -26,17 +28,36 @@ public TeslaNetworkKey key() return key; } - public CableTier getCableTier() + public boolean isTransmitterLoaded() { - return cableTier; + return transmitter.isPresent(); } - public void setCableTier(CableTier cableTier) + public void loadTransmitter(TeslaTransmitter transmitter) { - this.cableTier = cableTier; + this.transmitter = Optional.of(transmitter); this.updateAll(); } + public void unloadTransmitter() + { + transmitter = Optional.empty(); + } + + public TeslaTransmitter getTransmitter() + { + return transmitter.orElseThrow(); + } + + public CableTier getCableTier() + { + if(!this.isTransmitterLoaded()) + { + throw new IllegalStateException("Cannot get cable tier from network without a transmitter"); + } + return this.getTransmitter().getCableTier(); + } + private void updateAll() { for(TeslaReceiver receiver : loadedReceivers) @@ -47,7 +68,7 @@ private void updateAll() private void update(TeslaReceiver receiver) { - if(receiver.canReceiveFrom(this)) + if(this.isTransmitterLoaded() && receiver.canReceiveFrom(this)) { receivers.add(receiver); } @@ -118,6 +139,6 @@ public long getCapacity() @Override public boolean canConnect(CableTier cableTier) { - return this.cableTier == cableTier; + return this.getCableTier() == cableTier; } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java index a6e9ebd8..a30bbeb6 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java @@ -1,6 +1,9 @@ package net.swedz.extended_industrialization.machines.component.tesla; +import aztech.modern_industrialization.api.energy.CableTier; import net.minecraft.core.BlockPos; +import net.swedz.tesseract.neoforge.proxy.Proxies; +import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; public interface TeslaNetworkPart { @@ -10,5 +13,21 @@ public interface TeslaNetworkPart void setNetwork(TeslaNetworkKey key); + default TeslaNetwork getNetwork() + { + if(!this.hasNetwork()) + { + throw new IllegalStateException("No network has been set"); + } + TesseractProxy proxy = Proxies.get(TesseractProxy.class); + if(!proxy.hasServer()) + { + throw new IllegalStateException("Cannot get network without a server"); + } + return proxy.getServer().getTeslaNetworks().get(this.getNetworkKey()); + } + BlockPos getPosition(); + + CableTier getCableTier(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 6a7f5b92..bf152ba7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; +import aztech.modern_industrialization.api.energy.CableTier; import net.minecraft.core.BlockPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; @@ -49,6 +50,12 @@ default BlockPos getPosition() return this.getDelegateReceiver().getPosition(); } + @Override + default CableTier getCableTier() + { + return this.getDelegateReceiver().getCableTier(); + } + @Override default long receiveEnergy(long maxReceive, boolean simulate) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index a51c24f5..6af6a370 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -5,7 +5,6 @@ import aztech.modern_industrialization.api.energy.MIEnergyStorage; import aztech.modern_industrialization.machines.IComponent; import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.machines.components.CasingComponent; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; @@ -21,10 +20,9 @@ import java.util.Optional; import java.util.function.Supplier; -public class TeslaReceiverComponent implements IComponent, TeslaReceiver +public class TeslaReceiverComponent implements IComponent.ServerOnly, TeslaReceiver { - private final MachineBlockEntity machine; - + private final MachineBlockEntity machine; private final Supplier cableTier; private final InputOutputDirectionalBlockCapabilityCache energyOutputCache; @@ -32,11 +30,10 @@ public class TeslaReceiverComponent implements IComponent, TeslaReceiver private Optional networkKey = Optional.empty(); - public TeslaReceiverComponent(MachineBlockEntity machine, Supplier canOperate, CasingComponent casing) + public TeslaReceiverComponent(MachineBlockEntity machine, Supplier canOperate, Supplier cableTier) { this.machine = machine; - - cableTier = casing::getCableTier; + this.cableTier = cableTier; energyOutputCache = new InputOutputDirectionalBlockCapabilityCache<>(EnergyApi.SIDED); insertable = new MIEnergyStorage.NoExtract() @@ -85,11 +82,6 @@ public MIEnergyStorage insertable() return insertable; } - private CableTier getCableTier() - { - return cableTier.get(); - } - @Override public boolean canReceiveFrom(TeslaNetwork network) { @@ -142,6 +134,12 @@ public BlockPos getPosition() return machine.getBlockPos(); } + @Override + public CableTier getCableTier() + { + return cableTier.get(); + } + @Override public long receiveEnergy(long maxReceive, boolean simulate) { @@ -164,10 +162,7 @@ public void removeFromNetwork() { if(this.hasNetwork()) { - TesseractProxy proxy = Proxies.get(TesseractProxy.class); - TeslaNetworks networks = proxy.getServer().getTeslaNetworks(); - - networks.get(this.getNetworkKey()).remove(this); + this.getNetwork().remove(this); } } @@ -175,10 +170,7 @@ public void addToNetwork() { if(this.hasNetwork()) { - TesseractProxy proxy = Proxies.get(TesseractProxy.class); - TeslaNetworks networks = proxy.getServer().getTeslaNetworks(); - - networks.get(this.getNetworkKey()).add(this); + this.getNetwork().add(this); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index 6ea337c9..ec9c540e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.machines.component.tesla.transmitter; +import aztech.modern_industrialization.api.energy.CableTier; import net.minecraft.core.BlockPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; @@ -36,6 +37,12 @@ default BlockPos getPosition() return this.getDelegateTransmitter().getPosition(); } + @Override + default CableTier getCableTier() + { + return this.getDelegateTransmitter().getCableTier(); + } + @Override default long transmitEnergy(long maxTransmit) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index b32aed3d..12e7396e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -12,10 +12,10 @@ import net.minecraft.nbt.CompoundTag; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworks; import java.util.List; import java.util.Optional; +import java.util.function.Supplier; public class TeslaTransmitterComponent implements IComponent.ServerOnly, TeslaTransmitter { @@ -23,9 +23,11 @@ public class TeslaTransmitterComponent implements IComponent.ServerOnly, TeslaTr private final MIEnergyStorage energyStorage; + private final Supplier cableTier; + private Optional networkKey = Optional.empty(); - public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs) + public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs, Supplier cableTier) { this.machine = machine; @@ -73,6 +75,8 @@ public boolean canExtract() return true; } }; + + this.cableTier = cableTier; } @Override @@ -99,13 +103,18 @@ public BlockPos getPosition() return machine.getBlockPos(); } + @Override + public CableTier getCableTier() + { + return cableTier.get(); + } + @Override public long transmitEnergy(long maxTransmit) { if(this.hasNetwork()) { - TeslaNetworks networks = machine.getLevel().getServer().getTeslaNetworks(); - TeslaNetwork network = networks.get(this.getNetworkKey()); + TeslaNetwork network = this.getNetwork(); return EnergyStorageUtil.move(energyStorage, network, maxTransmit); } return 0; From 0c1fc4e12e367f7b7177b7ba328c4d9fdcfdb248 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 26 Sep 2024 23:30:42 -0400 Subject: [PATCH 013/159] Require the chunk to be ticking for the transmitter to be considered loaded --- .../EIComponents.java | 6 ++-- .../EITooltips.java | 4 +-- .../WorldPos.java} | 36 ++++++++++++------- .../item/TeslaCalibratorItem.java | 9 +++-- .../teslatower/TeslaTowerBlockEntity.java | 4 +-- .../component/tesla/TeslaNetwork.java | 9 ++--- .../component/tesla/TeslaNetworkPart.java | 8 ++--- .../component/tesla/TeslaNetworks.java | 7 ++-- .../tesla/receiver/TeslaReceiver.java | 9 +++-- .../receiver/TeslaReceiverComponent.java | 19 +++++----- .../tesla/transmitter/TeslaTransmitter.java | 9 +++-- .../TeslaTransmitterComponent.java | 13 ++++--- 12 files changed, 71 insertions(+), 62 deletions(-) rename src/main/java/net/swedz/extended_industrialization/{machines/component/tesla/TeslaNetworkKey.java => api/WorldPos.java} (53%) diff --git a/src/main/java/net/swedz/extended_industrialization/EIComponents.java b/src/main/java/net/swedz/extended_industrialization/EIComponents.java index 98e923e7..d7f26ee6 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIComponents.java +++ b/src/main/java/net/swedz/extended_industrialization/EIComponents.java @@ -10,7 +10,7 @@ import net.swedz.extended_industrialization.component.RainbowDataComponent; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfig; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.api.WorldPos; import java.util.function.Supplier; import java.util.function.UnaryOperator; @@ -43,9 +43,9 @@ public final class EIComponents "rainbow", (b) -> b.persistent(RainbowDataComponent.CODEC).networkSynchronized(RainbowDataComponent.STREAM_CODEC) ); - public static final Supplier> SELECTED_TESLA_NETWORK = create( + public static final Supplier> SELECTED_TESLA_NETWORK = create( "selected_tesla_network", - (b) -> b.persistent(TeslaNetworkKey.CODEC).networkSynchronized(TeslaNetworkKey.STREAM_CODEC) + (b) -> b.persistent(WorldPos.CODEC).networkSynchronized(WorldPos.STREAM_CODEC) ); public static void init(IEventBus bus) diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 7e786f53..203b24c0 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -14,7 +14,7 @@ import net.swedz.extended_industrialization.item.PhotovoltaicCellItem; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitArmorItem; import net.swedz.extended_industrialization.machines.blockentity.multiblock.LargeElectricFurnaceBlockEntity; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.tesseract.neoforge.tooltip.BiParser; import net.swedz.tesseract.neoforge.tooltip.Parser; import net.swedz.tesseract.neoforge.tooltip.TooltipAttachment; @@ -46,7 +46,7 @@ public final class EITooltips public static final Parser ACTIVATED_BOOLEAN_PARSER = (value) -> value ? EIText.ACTIVATED.text().withStyle(ChatFormatting.GREEN) : EIText.DEACTIVATED.text().withStyle(ChatFormatting.RED); - public static final Parser TESLA_NETWORK_KEY_PARSER = (key) -> Parser.GLOBAL_POS.withStyle(DEFAULT_STYLE).parse(GlobalPos.of(key.dimension(), key.pos())); + public static final Parser TESLA_NETWORK_KEY_PARSER = (key) -> Parser.GLOBAL_POS.withStyle(DEFAULT_STYLE).parse(GlobalPos.of(key.dimension(), key.pos())); public static final Parser KEYBIND_PARSER = Parser.KEYBIND.withStyle(NUMBER_TEXT); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkKey.java b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java similarity index 53% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkKey.java rename to src/main/java/net/swedz/extended_industrialization/api/WorldPos.java index 66c9fec6..e1800db8 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkKey.java +++ b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla; +package net.swedz.extended_industrialization.api; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; @@ -13,24 +13,24 @@ import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; -public record TeslaNetworkKey(ResourceKey dimension, BlockPos pos) +public record WorldPos(ResourceKey dimension, BlockPos pos) { - public static final MapCodec MAP_CODEC = RecordCodecBuilder.mapCodec((instance) -> instance + public static final MapCodec MAP_CODEC = RecordCodecBuilder.mapCodec((instance) -> instance .group( - Level.RESOURCE_KEY_CODEC.fieldOf("dimension").forGetter(TeslaNetworkKey::dimension), - BlockPos.CODEC.fieldOf("pos").forGetter(TeslaNetworkKey::pos) + Level.RESOURCE_KEY_CODEC.fieldOf("dimension").forGetter(WorldPos::dimension), + BlockPos.CODEC.fieldOf("pos").forGetter(WorldPos::pos) ) - .apply(instance, TeslaNetworkKey::new)); - public static final Codec CODEC = MAP_CODEC.codec(); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + .apply(instance, WorldPos::new)); + public static final Codec CODEC = MAP_CODEC.codec(); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ResourceKey.streamCodec(Registries.DIMENSION), - TeslaNetworkKey::dimension, + WorldPos::dimension, BlockPos.STREAM_CODEC, - TeslaNetworkKey::pos, - TeslaNetworkKey::new + WorldPos::pos, + WorldPos::new ); - public TeslaNetworkKey(Level level, BlockPos pos) + public WorldPos(Level level, BlockPos pos) { this(level.dimension(), pos); } @@ -41,6 +41,18 @@ public ServerLevel level() return proxy.hasServer() ? proxy.getServer().getLevel(dimension) : null; } + public boolean isLoaded() + { + return this.level().isLoaded(pos); + } + + public boolean isTicking() + { + Level level = this.level(); + return level.tickRateManager().runsNormally() && + level.shouldTickBlocksAt(pos); + } + @Override public int hashCode() { diff --git a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java index 52059de3..007b2bee 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java @@ -14,8 +14,7 @@ import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; -import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import java.util.List; @@ -43,14 +42,14 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { if(player.isShiftKeyDown() && hitBlockEntity instanceof TeslaTransmitter) { - itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new TeslaNetworkKey(context.getLevel(), context.getClickedPos())); + itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new WorldPos(context.getLevel(), context.getClickedPos())); player.displayClientMessage(EIText.TESLA_CALIBRATOR_SELECTED.text(), true); } else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachineBlockEntity receiver) { if(itemStack.has(EIComponents.SELECTED_TESLA_NETWORK)) { - TeslaNetworkKey key = itemStack.get(EIComponents.SELECTED_TESLA_NETWORK); + WorldPos key = itemStack.get(EIComponents.SELECTED_TESLA_NETWORK); receiver.setNetwork(key); player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_SUCCESS.text(), true); } @@ -82,7 +81,7 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List loadedReceivers = Sets.newHashSet(); private final Set receivers = Sets.newHashSet(); private Optional transmitter = Optional.empty(); - public TeslaNetwork(TeslaNetworkKey key) + public TeslaNetwork(WorldPos key) { this.key = key; } - public TeslaNetworkKey key() + public WorldPos key() { return key; } public boolean isTransmitterLoaded() { - return transmitter.isPresent(); + return transmitter.isPresent() && transmitter.get().getPosition().isTicking(); } public void loadTransmitter(TeslaTransmitter transmitter) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java index a30bbeb6..837c6b78 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java @@ -1,7 +1,7 @@ package net.swedz.extended_industrialization.machines.component.tesla; import aztech.modern_industrialization.api.energy.CableTier; -import net.minecraft.core.BlockPos; +import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; @@ -9,9 +9,9 @@ public interface TeslaNetworkPart { boolean hasNetwork(); - TeslaNetworkKey getNetworkKey(); + WorldPos getNetworkKey(); - void setNetwork(TeslaNetworkKey key); + void setNetwork(WorldPos key); default TeslaNetwork getNetwork() { @@ -27,7 +27,7 @@ default TeslaNetwork getNetwork() return proxy.getServer().getTeslaNetworks().get(this.getNetworkKey()); } - BlockPos getPosition(); + WorldPos getPosition(); CableTier getCableTier(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java index e5ff6c29..7234ccea 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java @@ -3,21 +3,22 @@ import com.google.common.collect.Maps; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; +import net.swedz.extended_industrialization.api.WorldPos; import java.util.Map; public final class TeslaNetworks { - private final Map networks = Maps.newHashMap(); + private final Map networks = Maps.newHashMap(); - public TeslaNetwork get(TeslaNetworkKey key) + public TeslaNetwork get(WorldPos key) { return networks.computeIfAbsent(key, TeslaNetwork::new); } public TeslaNetwork get(Level level, BlockPos pos) { - return this.get(new TeslaNetworkKey(level, pos)); + return this.get(new WorldPos(level, pos)); } public void forget(TeslaNetwork network) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index bf152ba7..6ad2a099 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,10 +1,9 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; import aztech.modern_industrialization.api.energy.CableTier; -import net.minecraft.core.BlockPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import net.swedz.extended_industrialization.api.WorldPos; public interface TeslaReceiver extends TeslaNetworkPart { @@ -33,19 +32,19 @@ default boolean hasNetwork() } @Override - default TeslaNetworkKey getNetworkKey() + default WorldPos getNetworkKey() { return this.getDelegateReceiver().getNetworkKey(); } @Override - default void setNetwork(TeslaNetworkKey key) + default void setNetwork(WorldPos key) { this.getDelegateReceiver().setNetwork(key); } @Override - default BlockPos getPosition() + default WorldPos getPosition() { return this.getDelegateReceiver().getPosition(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 6af6a370..28501df7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -5,14 +5,13 @@ import aztech.modern_industrialization.api.energy.MIEnergyStorage; import aztech.modern_industrialization.machines.IComponent; import aztech.modern_industrialization.machines.MachineBlockEntity; -import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworks; +import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; @@ -28,7 +27,7 @@ public class TeslaReceiverComponent implements IComponent.ServerOnly, TeslaRecei private final InputOutputDirectionalBlockCapabilityCache energyOutputCache; private final MIEnergyStorage insertable; - private Optional networkKey = Optional.empty(); + private Optional networkKey = Optional.empty(); public TeslaReceiverComponent(MachineBlockEntity machine, Supplier canOperate, Supplier cableTier) { @@ -95,13 +94,13 @@ public boolean hasNetwork() } @Override - public TeslaNetworkKey getNetworkKey() + public WorldPos getNetworkKey() { return networkKey.orElseThrow(); } @Override - public void setNetwork(TeslaNetworkKey key) + public void setNetwork(WorldPos key) { TesseractProxy proxy = Proxies.get(TesseractProxy.class); if(!proxy.hasServer()) @@ -129,9 +128,9 @@ public void setNetwork(TeslaNetworkKey key) } @Override - public BlockPos getPosition() + public WorldPos getPosition() { - return machine.getBlockPos(); + return new WorldPos(machine.getLevel(), machine.getBlockPos()); } @Override @@ -179,8 +178,8 @@ public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) { if(this.hasNetwork()) { - TeslaNetworkKey key = this.getNetworkKey(); - TeslaNetworkKey.CODEC.encodeStart(NbtOps.INSTANCE, key).result().ifPresent((t) -> tag.put("network_key", t)); + WorldPos key = this.getNetworkKey(); + WorldPos.CODEC.encodeStart(NbtOps.INSTANCE, key).result().ifPresent((t) -> tag.put("network_key", t)); } } @@ -190,7 +189,7 @@ public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean i if(tag.contains("network_key", Tag.TAG_COMPOUND)) { CompoundTag keyTag = tag.getCompound("network_key"); - this.setNetwork(TeslaNetworkKey.CODEC.parse(NbtOps.INSTANCE, keyTag).result().orElse(null)); + this.setNetwork(WorldPos.CODEC.parse(NbtOps.INSTANCE, keyTag).result().orElse(null)); } else { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index ec9c540e..6cc9d2ef 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -1,9 +1,8 @@ package net.swedz.extended_industrialization.machines.component.tesla.transmitter; import aztech.modern_industrialization.api.energy.CableTier; -import net.minecraft.core.BlockPos; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import net.swedz.extended_industrialization.api.WorldPos; public interface TeslaTransmitter extends TeslaNetworkPart { @@ -20,19 +19,19 @@ default boolean hasNetwork() } @Override - default TeslaNetworkKey getNetworkKey() + default WorldPos getNetworkKey() { return this.getDelegateTransmitter().getNetworkKey(); } @Override - default void setNetwork(TeslaNetworkKey key) + default void setNetwork(WorldPos key) { this.getDelegateTransmitter().setNetwork(key); } @Override - default BlockPos getPosition() + default WorldPos getPosition() { return this.getDelegateTransmitter().getPosition(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index 12e7396e..6f3e8efa 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -7,11 +7,10 @@ import aztech.modern_industrialization.machines.components.EnergyComponent; import aztech.modern_industrialization.util.Simulation; import dev.technici4n.grandpower.api.EnergyStorageUtil; -import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkKey; +import net.swedz.extended_industrialization.api.WorldPos; import java.util.List; import java.util.Optional; @@ -25,7 +24,7 @@ public class TeslaTransmitterComponent implements IComponent.ServerOnly, TeslaTr private final Supplier cableTier; - private Optional networkKey = Optional.empty(); + private Optional networkKey = Optional.empty(); public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs, Supplier cableTier) { @@ -86,21 +85,21 @@ public boolean hasNetwork() } @Override - public TeslaNetworkKey getNetworkKey() + public WorldPos getNetworkKey() { return networkKey.orElseThrow(); } @Override - public void setNetwork(TeslaNetworkKey key) + public void setNetwork(WorldPos key) { networkKey = Optional.ofNullable(key); } @Override - public BlockPos getPosition() + public WorldPos getPosition() { - return machine.getBlockPos(); + return new WorldPos(machine.getLevel(), machine.getBlockPos()); } @Override From 6b0acea32192dc779ec716df6aa7b9520976f6c7 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 02:19:18 -0400 Subject: [PATCH 014/159] Properly remove networks from memory when no longer relevant --- .../teslatower/TeslaTowerBlockEntity.java | 2 +- .../component/tesla/TeslaNetwork.java | 23 ++++++++++++------- ...laNetworks.java => TeslaNetworkCache.java} | 6 ++--- .../component/tesla/TeslaNetworkHolder.java | 2 +- .../receiver/TeslaReceiverComponent.java | 19 +++------------ ...eslaNetworkHolderMinecraftServerMixin.java | 6 ++--- 6 files changed, 26 insertions(+), 32 deletions(-) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{TeslaNetworks.java => TeslaNetworkCache.java} (78%) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 28510b65..7ce4265e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -66,7 +66,7 @@ public TeslaTowerBlockEntity(BEP bep) { text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_VOLTAGE.text(network.getCableTier().shortEnglishName()))); - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_RECEIVERS.text(network.size()))); + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_RECEIVERS.text(network.receiverCount()))); } else { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index 093d62ce..037782d7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -12,18 +12,28 @@ public final class TeslaNetwork implements MIEnergyStorage.NoExtract { - private final WorldPos key; + private final TeslaNetworkCache cache; + private final WorldPos key; private final Set loadedReceivers = Sets.newHashSet(); private final Set receivers = Sets.newHashSet(); private Optional transmitter = Optional.empty(); - public TeslaNetwork(WorldPos key) + public TeslaNetwork(TeslaNetworkCache cache, WorldPos key) { + this.cache = cache; this.key = key; } + private void maybeForget() + { + if(transmitter.isEmpty() && loadedReceivers.isEmpty()) + { + cache.forget(this); + } + } + public WorldPos key() { return key; @@ -43,6 +53,7 @@ public void loadTransmitter(TeslaTransmitter transmitter) public void unloadTransmitter() { transmitter = Optional.empty(); + this.maybeForget(); } public TeslaTransmitter getTransmitter() @@ -89,18 +100,14 @@ public void remove(TeslaReceiver receiver) { loadedReceivers.remove(receiver); receivers.remove(receiver); + this.maybeForget(); } - public int size() + public int receiverCount() { return receivers.size(); } - public boolean isEmpty() - { - return receivers.isEmpty(); - } - @Override public boolean canReceive() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java similarity index 78% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java index 7234ccea..3d296738 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworks.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java @@ -7,13 +7,13 @@ import java.util.Map; -public final class TeslaNetworks +public final class TeslaNetworkCache { private final Map networks = Maps.newHashMap(); public TeslaNetwork get(WorldPos key) { - return networks.computeIfAbsent(key, TeslaNetwork::new); + return networks.computeIfAbsent(key, (k) -> new TeslaNetwork(this, key)); } public TeslaNetwork get(Level level, BlockPos pos) @@ -21,7 +21,7 @@ public TeslaNetwork get(Level level, BlockPos pos) return this.get(new WorldPos(level, pos)); } - public void forget(TeslaNetwork network) + void forget(TeslaNetwork network) { networks.remove(network.key()); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java index 64be2bcb..abc8bce7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java @@ -5,5 +5,5 @@ */ public interface TeslaNetworkHolder { - TeslaNetworks getTeslaNetworks(); + TeslaNetworkCache getTeslaNetworks(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 28501df7..8cf3623e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -9,9 +9,8 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworks; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; @@ -107,24 +106,12 @@ public void setNetwork(WorldPos key) { throw new IllegalStateException("Cannot set network of a receiver from the client"); } - TeslaNetworks networks = proxy.getServer().getTeslaNetworks(); - if(this.hasNetwork()) - { - TeslaNetwork oldNetwork = networks.get(this.getNetworkKey()); - oldNetwork.remove(this); - if(oldNetwork.isEmpty()) - { - networks.forget(oldNetwork); - } - } + this.removeFromNetwork(); networkKey = Optional.ofNullable(key); - if(this.hasNetwork()) - { - networks.get(this.getNetworkKey()).add(this); - } + this.addToNetwork(); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java index 6618825c..69784fb1 100644 --- a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java @@ -2,7 +2,7 @@ import net.minecraft.server.MinecraftServer; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkHolder; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworks; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkCache; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Mixin; @@ -13,9 +13,9 @@ public class TeslaNetworkHolderMinecraftServerMixin { @Unique - private final TeslaNetworks teslaNetworks = new TeslaNetworks(); + private final TeslaNetworkCache teslaNetworks = new TeslaNetworkCache(); - public TeslaNetworks teslaNetwork$getTeslaNetworks() + public TeslaNetworkCache teslaNetwork$getTeslaNetworks() { return teslaNetworks; } From fa32e6637c3ee85a3284d6371187a8bae85b6cd1 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 03:31:01 -0400 Subject: [PATCH 015/159] Track if a receiver is active --- .../TeslaReceiverMachineBlockEntity.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 2721ea6a..e5bb096c 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -6,11 +6,13 @@ import aztech.modern_industrialization.machines.BEP; import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.components.CasingComponent; +import aztech.modern_industrialization.machines.components.IsActiveComponent; import aztech.modern_industrialization.machines.components.OrientationComponent; import aztech.modern_industrialization.machines.components.RedstoneControlComponent; import aztech.modern_industrialization.machines.gui.MachineGuiParameters; import aztech.modern_industrialization.machines.guicomponents.SlotPanel; import aztech.modern_industrialization.machines.models.MachineModelClientData; +import aztech.modern_industrialization.util.Tickable; import com.google.common.collect.Lists; import net.minecraft.network.chat.Style; import net.minecraft.world.item.ItemStack; @@ -27,8 +29,10 @@ import static net.swedz.extended_industrialization.EITooltips.*; -public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate +public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable { + private final IsActiveComponent isActive; + private final RedstoneControlComponent redstoneControl; private final CasingComponent casing; @@ -42,6 +46,8 @@ public TeslaReceiverMachineBlockEntity(BEP bep) new OrientationComponent.Params(true, false, false) ); + isActive = new IsActiveComponent(); + redstoneControl = new RedstoneControlComponent(); casing = new CasingComponent() { @@ -60,7 +66,7 @@ protected void setCasingStack(ItemStack stack) receiver = new TeslaReceiverComponent(this, () -> redstoneControl.doAllowNormalOperation(this), casing::getCableTier); - this.registerComponents(redstoneControl, casing, receiver); + this.registerComponents(isActive, redstoneControl, casing, receiver); this.registerGuiComponent(new ModularMultiblockGui.Server(0, 60, () -> { @@ -107,7 +113,7 @@ public MIInventory getInventory() protected MachineModelClientData getMachineModelData() { MachineModelClientData data = new MachineModelClientData(casing.getCasing()); - // data.isActive = ...; // TODO check if the source is loaded + data.isActive = isActive.isActive; orientation.writeModelData(data); return data; } @@ -131,6 +137,25 @@ public void setRemoved() receiver.removeFromNetwork(); } + @Override + public void tick() + { + if(level.isClientSide()) + { + return; + } + + if(this.hasNetwork() && this.getNetwork().isTransmitterLoaded()) + { + TeslaNetwork network = this.getNetwork(); + isActive.updateActive(network.isTransmitterLoaded() && this.canReceiveFrom(network).isSuccess(), this); + } + else + { + isActive.updateActive(false, this); + } + } + public static void registerEnergyApi(BlockEntityType bet) { MICapabilities.onEvent((event) -> From 5c60532c6ed0113ebba57931acf038edab412080 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 03:31:21 -0400 Subject: [PATCH 016/159] Allow for different result states when checking if a receiver can receive from a network --- .../TeslaReceiverMachineBlockEntity.java | 3 ++- .../component/tesla/TeslaNetwork.java | 2 +- .../tesla/receiver/TeslaReceiver.java | 20 +++++++++++++++++-- .../receiver/TeslaReceiverComponent.java | 8 ++++++-- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index e5bb096c..3f6a2b49 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -80,7 +80,8 @@ protected void setCasingStack(ItemStack stack) if(network.isTransmitterLoaded()) { - if(!receiver.canReceiveFrom(network)) + ReceiveCheckResult result = this.canReceiveFrom(network); + if(result == ReceiveCheckResult.MISMATCHING_VOLTAGE) { text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE.text(network.getCableTier().shortEnglishName()), 0xFF0000)); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index 037782d7..733ee974 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -80,7 +80,7 @@ private void updateAll() private void update(TeslaReceiver receiver) { - if(this.isTransmitterLoaded() && receiver.canReceiveFrom(this)) + if(this.isTransmitterLoaded() && receiver.canReceiveFrom(this).isSuccess()) { receivers.add(receiver); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 6ad2a099..94125568 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -7,7 +7,7 @@ public interface TeslaReceiver extends TeslaNetworkPart { - boolean canReceiveFrom(TeslaNetwork network); + ReceiveCheckResult canReceiveFrom(TeslaNetwork network); long receiveEnergy(long maxReceive, boolean simulate); @@ -15,12 +15,28 @@ public interface TeslaReceiver extends TeslaNetworkPart long getEnergyCapacity(); + enum ReceiveCheckResult + { + SUCCESS, + MISMATCHING_VOLTAGE; + + public boolean isSuccess() + { + return this == SUCCESS; + } + + public boolean isFailure() + { + return !this.isSuccess(); + } + } + interface Delegate extends TeslaReceiver { TeslaReceiver getDelegateReceiver(); @Override - default boolean canReceiveFrom(TeslaNetwork network) + default ReceiveCheckResult canReceiveFrom(TeslaNetwork network) { return this.getDelegateReceiver().canReceiveFrom(network); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 8cf3623e..fcbcc683 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -81,9 +81,13 @@ public MIEnergyStorage insertable() } @Override - public boolean canReceiveFrom(TeslaNetwork network) + public ReceiveCheckResult canReceiveFrom(TeslaNetwork network) { - return this.getCableTier() == network.getCableTier(); + if(this.getCableTier() != network.getCableTier()) + { + return ReceiveCheckResult.MISMATCHING_VOLTAGE; + } + return ReceiveCheckResult.SUCCESS; } @Override From 44243314984299a78af1ec7219b19d133faf7b3d Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 03:35:28 -0400 Subject: [PATCH 017/159] Require server-side when getting server-side level --- .../net/swedz/extended_industrialization/api/WorldPos.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java index e1800db8..aaa104e1 100644 --- a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java +++ b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java @@ -38,7 +38,11 @@ public WorldPos(Level level, BlockPos pos) public ServerLevel level() { TesseractProxy proxy = Proxies.get(TesseractProxy.class); - return proxy.hasServer() ? proxy.getServer().getLevel(dimension) : null; + if(!proxy.hasServer()) + { + throw new IllegalStateException("Cannot get level from world position on the client"); + } + return proxy.getServer().getLevel(dimension); } public boolean isLoaded() From b39c0364392628f93a68f8910d90cdbd689750db Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 03:47:19 -0400 Subject: [PATCH 018/159] Display error when no energy hatches on tower --- .../extended_industrialization/lang/en_us.json | 1 + .../swedz/extended_industrialization/EIText.java | 1 + .../teslatower/TeslaTowerBlockEntity.java | 16 +++++++++++++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 4b34954f..0879528f 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -200,6 +200,7 @@ "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", + "text.extended_industrialization.tesla_transmitter_no_energy_hatches": "No energy hatches provided", "text.extended_industrialization.tesla_transmitter_no_network": "No network found", "text.extended_industrialization.tesla_transmitter_receivers": "Receivers: %d", "text.extended_industrialization.tesla_transmitter_voltage": "Transmitting %s power", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 588a96b5..5466a844 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -106,6 +106,7 @@ public enum EIText implements TranslatableTextEnum TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), + TESLA_TRANSMITTER_NO_ENERGY_HATCHES("No energy hatches provided"), TESLA_TRANSMITTER_NO_NETWORK("No network found"), TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), TESLA_TRANSMITTER_VOLTAGE("Transmitting %s power"), diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 7ce4265e..11adb49a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -46,7 +46,7 @@ public TeslaTowerBlockEntity(BEP bep) redstoneControl = new RedstoneControlComponent(); - transmitter = new TeslaTransmitterComponent(this, energyInputs, () -> cableTier); + transmitter = new TeslaTransmitterComponent(this, energyInputs, this::getCableTier); this.registerComponents(redstoneControl); @@ -70,7 +70,14 @@ public TeslaTowerBlockEntity(BEP bep) } else { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_NETWORK.text(), 0xFF0000)); + if(this.getCableTier() == null) + { + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_ENERGY_HATCHES.text(), 0xFF0000)); + } + else + { + text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_NETWORK.text(), 0xFF0000)); + } } } else @@ -119,7 +126,10 @@ public void onMatchSuccessful() this.cableTier = cableTier; if(this.hasNetwork()) { - this.getNetwork().loadTransmitter(transmitter); + if(this.getCableTier() != null) + { + this.getNetwork().loadTransmitter(transmitter); + } } else { From 58442c677c7a24767a9aacbadb744c3a5b00abeb Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 04:06:30 -0400 Subject: [PATCH 019/159] Fix infinite loop --- .../multiblock/teslatower/TeslaTowerBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 11adb49a..36c2d420 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -46,7 +46,7 @@ public TeslaTowerBlockEntity(BEP bep) redstoneControl = new RedstoneControlComponent(); - transmitter = new TeslaTransmitterComponent(this, energyInputs, this::getCableTier); + transmitter = new TeslaTransmitterComponent(this, energyInputs, () -> cableTier); this.registerComponents(redstoneControl); From a928e89b438cfd8c01579e27bec8f0347587154e Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 04:06:49 -0400 Subject: [PATCH 020/159] Make mismatching voltage error message more clear --- .../resources/assets/extended_industrialization/lang/en_us.json | 2 +- src/main/java/net/swedz/extended_industrialization/EIText.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 0879528f..a29ddaa0 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -196,7 +196,7 @@ "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", "text.extended_industrialization.tesla_calibrator_selected": "Selected transmitter for calibration.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", - "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Missing %s hull", + "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Cannot receive %s power", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 5466a844..188c8389 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -102,7 +102,7 @@ public enum EIText implements TranslatableTextEnum TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), TESLA_CALIBRATOR_SELECTED("Selected transmitter for calibration."), TESLA_RECEIVER_LINKED("Linked to %s"), - TESLA_RECEIVER_MISMATCHING_VOLTAGE("Missing %s hull"), + TESLA_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), From 7cb4fa9fb35083fe5a4b2910495aa71528cd46d1 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 16:06:30 -0400 Subject: [PATCH 021/159] Add command to dump tesla network info --- .../lang/en_us.json | 9 ++ .../extended_industrialization/EIText.java | 9 ++ .../commands/EICommands.java | 89 +++++++++++++++++++ .../component/tesla/TeslaNetwork.java | 14 ++- .../component/tesla/TeslaNetworkCache.java | 10 +++ 5 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/commands/EICommands.java diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index a29ddaa0..99ebb4b1 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -106,6 +106,15 @@ "text.extended_industrialization.charging_station_interdimensional": "Charges items in your inventory while in any dimension.", "text.extended_industrialization.charging_station_ranged": "Charges items in your inventory while within %d blocks.", "text.extended_industrialization.coils_lef_tier": "Runs LEF in batches of up to %d at %s the EU cost.", + "text.extended_industrialization.command_tesla_network_dump_cant_have_network": "The block at %s is not a network part.", + "text.extended_industrialization.command_tesla_network_dump_chunk_not_loaded": "Chunk at %s is not loaded.", + "text.extended_industrialization.command_tesla_network_dump_no_network": "The block at %s has no network set.", + "text.extended_industrialization.command_tesla_network_dump_result_1": "Dumping data on network of %s:", + "text.extended_industrialization.command_tesla_network_dump_result_2": "* Key: %s", + "text.extended_industrialization.command_tesla_network_dump_result_3": "* Transmitter: %s", + "text.extended_industrialization.command_tesla_network_dump_result_4": "* Receiver Count: %d / %d (linked / loaded)", + "text.extended_industrialization.command_tesla_network_dump_result_no_transmitter": "Not loaded", + "text.extended_industrialization.command_tesla_network_dump_result_yes_transmitter": "%s\n * Ticking: %s\n * Voltage: %s", "text.extended_industrialization.deactivated": "Deactivated", "text.extended_industrialization.dyeable_and_trimmable_help": "- Can be dyed and trimmed!", "text.extended_industrialization.dyeable_help": "- Can be dyed!", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 188c8389..0648547e 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -12,6 +12,15 @@ public enum EIText implements TranslatableTextEnum CHARGING_STATION_INTERDIMENSIONAL("Charges items in your inventory while in any dimension."), CHARGING_STATION_RANGED("Charges items in your inventory while within %d blocks."), COILS_LEF_TIER("Runs LEF in batches of up to %d at %s the EU cost."), + COMMAND_TESLA_NETWORK_DUMP_CANT_HAVE_NETWORK("The block at %s is not a network part."), + COMMAND_TESLA_NETWORK_DUMP_CHUNK_NOT_LOADED("Chunk at %s is not loaded."), + COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK("The block at %s has no network set."), + COMMAND_TESLA_NETWORK_DUMP_RESULT_1("Dumping data on network of %s:"), + COMMAND_TESLA_NETWORK_DUMP_RESULT_2("* Key: %s"), + COMMAND_TESLA_NETWORK_DUMP_RESULT_3("* Transmitter: %s"), + COMMAND_TESLA_NETWORK_DUMP_RESULT_4("* Receiver Count: %d / %d (linked / loaded)"), + COMMAND_TESLA_NETWORK_DUMP_RESULT_NO_TRANSMITTER("Not loaded"), + COMMAND_TESLA_NETWORK_DUMP_RESULT_YES_TRANSMITTER("%s\n * Ticking: %s\n * Voltage: %s"), DEACTIVATED("Deactivated"), DYEABLE_AND_TRIMMABLE_HELP("- Can be dyed and trimmed!"), DYEABLE_HELP("- Can be dyed!"), diff --git a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java new file mode 100644 index 00000000..f4943903 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java @@ -0,0 +1,89 @@ +package net.swedz.extended_industrialization.commands; + +import com.mojang.brigadier.Command; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; + +import static net.minecraft.commands.Commands.*; +import static net.minecraft.commands.arguments.coordinates.BlockPosArgument.*; + +@EventBusSubscriber(modid = EI.ID, bus = EventBusSubscriber.Bus.GAME) +public final class EICommands +{ + @SubscribeEvent + private static void registerCommands(RegisterCommandsEvent event) + { + event.getDispatcher().register(literal("ei") + .requires((s) -> s.hasPermission(4)) + .then(literal("tesla_network") + .then(argument("pos", blockPos()) + .then(literal("dump") + .executes((context) -> teslaNetworkDump(context.getSource(), getLoadedBlockPos(context, "pos"))))))); + } + + private static int teslaNetworkDump(CommandSourceStack source, BlockPos pos) + { + Level level = source.getLevel(); + + if(level.isLoaded(pos)) + { + BlockEntity blockEntity = level.getBlockEntity(pos); + + if(blockEntity instanceof TeslaNetworkPart networkPart) + { + if(networkPart.hasNetwork()) + { + TeslaNetwork network = networkPart.getNetwork(); + + source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_1.text(pos.toShortString()), true); + + source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_2.text("%s (%s)".formatted(network.key().pos().toShortString(), network.key().dimension().location().toString())), true); + + Component transmitterResult; + if(network.hasTransmitter()) + { + WorldPos transmitterPosition = network.getTransmitter().getPosition(); + boolean ticking = network.isTransmitterLoaded(); + transmitterResult = EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_YES_TRANSMITTER.text( + "%s (%s)".formatted(transmitterPosition.pos().toShortString(), transmitterPosition.dimension().location().toString()), + Boolean.toString(ticking), + ticking ? network.getCableTier().shortEnglishName() : Component.literal("N/A") + ); + } + else + { + transmitterResult = EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_NO_TRANSMITTER.text(); + } + source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_3.text(transmitterResult), true); + + source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_4.text(network.receiverCount(), network.loadedReceiverCount()), true); + } + else + { + source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK.text(pos.toShortString())); + } + } + else + { + source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_CANT_HAVE_NETWORK.text(pos.toShortString())); + } + } + else + { + source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_CHUNK_NOT_LOADED.text(pos.toShortString())); + } + + return Command.SINGLE_SUCCESS; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index 733ee974..bc19d0c9 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -39,9 +39,14 @@ public WorldPos key() return key; } + public boolean hasTransmitter() + { + return transmitter.isPresent(); + } + public boolean isTransmitterLoaded() { - return transmitter.isPresent() && transmitter.get().getPosition().isTicking(); + return this.hasTransmitter() && this.getTransmitter().getPosition().isTicking(); } public void loadTransmitter(TeslaTransmitter transmitter) @@ -65,7 +70,7 @@ public CableTier getCableTier() { if(!this.isTransmitterLoaded()) { - throw new IllegalStateException("Cannot get cable tier from network without a transmitter"); + throw new IllegalStateException("Cannot get cable tier from network without a loaded transmitter"); } return this.getTransmitter().getCableTier(); } @@ -103,6 +108,11 @@ public void remove(TeslaReceiver receiver) this.maybeForget(); } + public int loadedReceiverCount() + { + return loadedReceivers.size(); + } + public int receiverCount() { return receivers.size(); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java index 3d296738..5a1e42b9 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java @@ -11,6 +11,16 @@ public final class TeslaNetworkCache { private final Map networks = Maps.newHashMap(); + public boolean exists(WorldPos pos) + { + return networks.containsKey(pos); + } + + public boolean exists(Level level, BlockPos pos) + { + return this.exists(new WorldPos(level, pos)); + } + public TeslaNetwork get(WorldPos key) { return networks.computeIfAbsent(key, (k) -> new TeslaNetwork(this, key)); From 6037a434d53b411df21beb45db6e496750b50934 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 16:07:03 -0400 Subject: [PATCH 022/159] Comments --- .../swedz/extended_industrialization/commands/EICommands.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java index f4943903..0bb66522 100644 --- a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java +++ b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java @@ -48,6 +48,7 @@ private static int teslaNetworkDump(CommandSourceStack source, BlockPos pos) source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_1.text(pos.toShortString()), true); + // TODO use parser source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_2.text("%s (%s)".formatted(network.key().pos().toShortString(), network.key().dimension().location().toString())), true); Component transmitterResult; @@ -56,6 +57,7 @@ private static int teslaNetworkDump(CommandSourceStack source, BlockPos pos) WorldPos transmitterPosition = network.getTransmitter().getPosition(); boolean ticking = network.isTransmitterLoaded(); transmitterResult = EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_YES_TRANSMITTER.text( + // TODO use parser "%s (%s)".formatted(transmitterPosition.pos().toShortString(), transmitterPosition.dimension().location().toString()), Boolean.toString(ticking), ticking ? network.getCableTier().shortEnglishName() : Component.literal("N/A") From a3303bcecc25cd4723066e4a844bdcebb2f84780 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 16:27:36 -0400 Subject: [PATCH 023/159] Allow dumping network by key as well as by part --- .../lang/en_us.json | 2 +- .../extended_industrialization/EIText.java | 2 +- .../commands/EICommands.java | 107 +++++++++++------- 3 files changed, 66 insertions(+), 45 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 99ebb4b1..551638eb 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -108,7 +108,7 @@ "text.extended_industrialization.coils_lef_tier": "Runs LEF in batches of up to %d at %s the EU cost.", "text.extended_industrialization.command_tesla_network_dump_cant_have_network": "The block at %s is not a network part.", "text.extended_industrialization.command_tesla_network_dump_chunk_not_loaded": "Chunk at %s is not loaded.", - "text.extended_industrialization.command_tesla_network_dump_no_network": "The block at %s has no network set.", + "text.extended_industrialization.command_tesla_network_dump_no_network": "No existing network could be found for %s.", "text.extended_industrialization.command_tesla_network_dump_result_1": "Dumping data on network of %s:", "text.extended_industrialization.command_tesla_network_dump_result_2": "* Key: %s", "text.extended_industrialization.command_tesla_network_dump_result_3": "* Transmitter: %s", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 0648547e..b6943dc5 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -14,7 +14,7 @@ public enum EIText implements TranslatableTextEnum COILS_LEF_TIER("Runs LEF in batches of up to %d at %s the EU cost."), COMMAND_TESLA_NETWORK_DUMP_CANT_HAVE_NETWORK("The block at %s is not a network part."), COMMAND_TESLA_NETWORK_DUMP_CHUNK_NOT_LOADED("Chunk at %s is not loaded."), - COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK("The block at %s has no network set."), + COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK("No existing network could be found for %s."), COMMAND_TESLA_NETWORK_DUMP_RESULT_1("Dumping data on network of %s:"), COMMAND_TESLA_NETWORK_DUMP_RESULT_2("* Key: %s"), COMMAND_TESLA_NETWORK_DUMP_RESULT_3("* Transmitter: %s"), diff --git a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java index 0bb66522..9570bbc7 100644 --- a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java +++ b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java @@ -13,9 +13,11 @@ import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkCache; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import static net.minecraft.commands.Commands.*; +import static net.minecraft.commands.arguments.DimensionArgument.*; import static net.minecraft.commands.arguments.coordinates.BlockPosArgument.*; @EventBusSubscriber(modid = EI.ID, bus = EventBusSubscriber.Bus.GAME) @@ -27,63 +29,82 @@ private static void registerCommands(RegisterCommandsEvent event) event.getDispatcher().register(literal("ei") .requires((s) -> s.hasPermission(4)) .then(literal("tesla_network") - .then(argument("pos", blockPos()) - .then(literal("dump") - .executes((context) -> teslaNetworkDump(context.getSource(), getLoadedBlockPos(context, "pos"))))))); + .then(literal("dump") + .then(argument("pos", blockPos()) + .then(argument("dimension", dimension()) + .executes((context) -> teslaNetworkDump(context.getSource(), new WorldPos(getDimension(context, "dimension"), getBlockPos(context, "pos"))))))) + .then(literal("dump_at") + .then(argument("pos", blockPos()) + .executes((context) -> teslaNetworkDumpAt(context.getSource(), getLoadedBlockPos(context, "pos"))))))); } - private static int teslaNetworkDump(CommandSourceStack source, BlockPos pos) + private static void teslaNetworkDump(CommandSourceStack source, TeslaNetwork network, BlockPos pos) + { + source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_1.text(pos.toShortString()), true); + + // TODO use parser + source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_2.text("%s (%s)".formatted(network.key().pos().toShortString(), network.key().dimension().location().toString())), true); + + Component transmitterResult; + if(network.hasTransmitter()) + { + WorldPos transmitterPosition = network.getTransmitter().getPosition(); + boolean ticking = network.isTransmitterLoaded(); + transmitterResult = EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_YES_TRANSMITTER.text( + // TODO use parser + "%s (%s)".formatted(transmitterPosition.pos().toShortString(), transmitterPosition.dimension().location().toString()), + Boolean.toString(ticking), + ticking ? network.getCableTier().shortEnglishName() : Component.literal("N/A") + ); + } + else + { + transmitterResult = EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_NO_TRANSMITTER.text(); + } + source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_3.text(transmitterResult), true); + + source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_4.text(network.receiverCount(), network.loadedReceiverCount()), true); + } + + private static int teslaNetworkDump(CommandSourceStack source, WorldPos pos) + { + Level level = pos.level(); + TeslaNetworkCache cache = level.getServer().getTeslaNetworks(); + + if(cache.exists(pos)) + { + TeslaNetwork network = cache.get(pos); + teslaNetworkDump(source, network, pos.pos()); + } + else + { + // TODO use parser + source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK.text("%s (%s)".formatted(pos.pos().toShortString(), pos.dimension().location().toString()))); + } + + return Command.SINGLE_SUCCESS; + } + + private static int teslaNetworkDumpAt(CommandSourceStack source, BlockPos pos) { Level level = source.getLevel(); + BlockEntity blockEntity = level.getBlockEntity(pos); - if(level.isLoaded(pos)) + if(blockEntity instanceof TeslaNetworkPart networkPart) { - BlockEntity blockEntity = level.getBlockEntity(pos); - - if(blockEntity instanceof TeslaNetworkPart networkPart) + if(networkPart.hasNetwork()) { - if(networkPart.hasNetwork()) - { - TeslaNetwork network = networkPart.getNetwork(); - - source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_1.text(pos.toShortString()), true); - - // TODO use parser - source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_2.text("%s (%s)".formatted(network.key().pos().toShortString(), network.key().dimension().location().toString())), true); - - Component transmitterResult; - if(network.hasTransmitter()) - { - WorldPos transmitterPosition = network.getTransmitter().getPosition(); - boolean ticking = network.isTransmitterLoaded(); - transmitterResult = EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_YES_TRANSMITTER.text( - // TODO use parser - "%s (%s)".formatted(transmitterPosition.pos().toShortString(), transmitterPosition.dimension().location().toString()), - Boolean.toString(ticking), - ticking ? network.getCableTier().shortEnglishName() : Component.literal("N/A") - ); - } - else - { - transmitterResult = EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_NO_TRANSMITTER.text(); - } - source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_3.text(transmitterResult), true); - - source.sendSuccess(() -> EIText.COMMAND_TESLA_NETWORK_DUMP_RESULT_4.text(network.receiverCount(), network.loadedReceiverCount()), true); - } - else - { - source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK.text(pos.toShortString())); - } + TeslaNetwork network = networkPart.getNetwork(); + teslaNetworkDump(source, network, pos); } else { - source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_CANT_HAVE_NETWORK.text(pos.toShortString())); + source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK.text(pos.toShortString())); } } else { - source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_CHUNK_NOT_LOADED.text(pos.toShortString())); + source.sendFailure(EIText.COMMAND_TESLA_NETWORK_DUMP_CANT_HAVE_NETWORK.text(pos.toShortString())); } return Command.SINGLE_SUCCESS; From 8534e7816a2f0190210ebab21b4d763864fbb094 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 27 Sep 2024 23:05:26 -0400 Subject: [PATCH 024/159] Add tesla carry on receiver --- .../lang/en_us.json | 4 + .../models/item/tesla_carry_on_receiver.json | 6 + .../extended_industrialization/EIItems.java | 8 +- .../extended_industrialization/EIText.java | 3 + .../TeslaCalibratorItem.java | 4 +- .../TeslaCarryOnReceiverItem.java | 130 ++++++++++++++++++ .../component/tesla/TeslaNetwork.java | 14 +- .../component/tesla/TeslaNetworkCache.java | 4 +- .../receiver/TeslaReceiverComponent.java | 1 + .../tesla/transmitter/TeslaTransmitter.java | 8 ++ .../TeslaTransmitterComponent.java | 6 + .../textures/item/tesla_carry_on_receiver.png | Bin 0 -> 830 bytes 12 files changed, 180 insertions(+), 8 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_carry_on_receiver.json rename src/main/java/net/swedz/extended_industrialization/item/{ => teslalinkable}/TeslaCalibratorItem.java (98%) create mode 100644 src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java create mode 100644 src/main/resources/assets/extended_industrialization/textures/item/tesla_carry_on_receiver.png diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 551638eb..344329f8 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -73,6 +73,7 @@ "item.extended_industrialization.steam_chainsaw": "Steam Chainsaw", "item.extended_industrialization.steel_combine": "Steel Combine", "item.extended_industrialization.tesla_calibrator": "Tesla Calibrator", + "item.extended_industrialization.tesla_carry_on_receiver": "Tesla Carry-On Receiver", "item.extended_industrialization.tin_can": "Tin Can", "item.extended_industrialization.ultimate_laser_drill": "Ultimate Laser Drill", "itemGroup.extended_industrialization.extended_industrialization": "Extended Industrialization", @@ -204,6 +205,9 @@ "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected transmitter.", "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", "text.extended_industrialization.tesla_calibrator_selected": "Selected transmitter for calibration.", + "text.extended_industrialization.tesla_carryon_clear": "Cleared selected transmitter.", + "text.extended_industrialization.tesla_carryon_linked": "Linked to %s", + "text.extended_industrialization.tesla_carryon_selected": "Selected transmitter for receiving.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Cannot receive %s power", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_carry_on_receiver.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_carry_on_receiver.json new file mode 100644 index 00000000..7f5ce976 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/tesla_carry_on_receiver.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "extended_industrialization:item/tesla_carry_on_receiver" + } +} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIItems.java b/src/main/java/net/swedz/extended_industrialization/EIItems.java index 4cdc013b..e5b48839 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIItems.java +++ b/src/main/java/net/swedz/extended_industrialization/EIItems.java @@ -17,7 +17,8 @@ import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.PhotovoltaicCellItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; -import net.swedz.extended_industrialization.item.TeslaCalibratorItem; +import net.swedz.extended_industrialization.item.teslalinkable.TeslaCalibratorItem; +import net.swedz.extended_industrialization.item.teslalinkable.TeslaCarryOnReceiverItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitAbility; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitArmorItem; @@ -67,8 +68,9 @@ public static void init(IEventBus bus) public static final ItemHolder TIN_CAN = create("tin_can", "Tin Can", Item::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder CANNED_FOOD = create("canned_food", "Canned Food", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().usingConvertsTo(TIN_CAN).build())).tag(ItemTags.WOLF_FOOD, ItemTags.CAT_FOOD).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_CARRY_ON_RECEIVER = create("tesla_carry_on_receiver", "Tesla Carry-On Receiver", TeslaCarryOnReceiverItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder NETHERITE_ROTARY_BLADE = create("netherite_rotary_blade", "Netherite Rotary Blade", Item::new, EISortOrder.PARTS).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder STEEL_COMBINE = create("steel_combine", "Steel Combine", Item::new, EISortOrder.PARTS).withModel(CommonModelBuilders::generated).register(); diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index b6943dc5..54b74a84 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -110,6 +110,9 @@ public enum EIText implements TranslatableTextEnum TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION("Failed to link receiver because no transmitter is selected."), TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), TESLA_CALIBRATOR_SELECTED("Selected transmitter for calibration."), + TESLA_CARRYON_CLEAR("Cleared selected transmitter."), + TESLA_CARRYON_LINKED("Linked to %s"), + TESLA_CARRYON_SELECTED("Selected transmitter for receiving."), TESLA_RECEIVER_LINKED("Linked to %s"), TESLA_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), diff --git a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java similarity index 98% rename from src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java rename to src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java index 007b2bee..7a03fd0f 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.item; +package net.swedz.extended_industrialization.item.teslalinkable; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; @@ -13,8 +13,8 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import java.util.List; diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java new file mode 100644 index 00000000..2a6a4338 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java @@ -0,0 +1,130 @@ +package net.swedz.extended_industrialization.item.teslalinkable; + +import aztech.modern_industrialization.api.energy.EnergyApi; +import com.google.common.collect.Lists; +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.Entity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.swedz.extended_industrialization.EIComponents; +import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkCache; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; +import net.swedz.tesseract.neoforge.compat.mi.helper.ChargeInventoryHelper; +import net.swedz.tesseract.neoforge.proxy.Proxies; + +import java.util.List; + +import static aztech.modern_industrialization.MITooltips.*; +import static net.swedz.extended_industrialization.EITooltips.*; + +public final class TeslaCarryOnReceiverItem extends Item +{ + public TeslaCarryOnReceiverItem(Properties properties) + { + super(properties.stacksTo(1)); + } + + private long charge(Player player, long maxEu) + { + Inventory inventory = player.getInventory(); + + List items = Lists.newArrayList(); + items.addAll(inventory.armor); + items.addAll(inventory.items); + items.addAll(inventory.offhand); + items.addAll(Proxies.get(EIModSlotProxy.class).getContents(player, (stack) -> stack.getCapability(EnergyApi.ITEM) != null)); + + return ChargeInventoryHelper.charge(items, maxEu, false); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) + { + if(level.isClientSide()) + { + return; + } + + if(entity instanceof Player player && stack.has(EIComponents.SELECTED_TESLA_NETWORK)) + { + WorldPos networkKey = stack.get(EIComponents.SELECTED_TESLA_NETWORK); + TeslaNetworkCache cache = level.getServer().getTeslaNetworks(); + if(cache.exists(networkKey)) + { + TeslaNetwork network = cache.get(networkKey); + // TODO check if player is within range + if(network.canExtract()) + { + // TODO limit transmit rate + long eu = Long.MAX_VALUE; + eu = network.extract(eu, true); + eu = this.charge(player, eu); + network.extract(eu, false); + } + } + } + } + + @Override + public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) + { + Player player = context.getPlayer(); + if(player != null) + { + InteractionHand usedHand = context.getHand(); + ItemStack itemStack = player.getItemInHand(usedHand); + BlockEntity hitBlockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); + if(!context.getLevel().isClientSide()) + { + if(hitBlockEntity instanceof TeslaTransmitter) + { + itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new WorldPos(context.getLevel(), context.getClickedPos())); + player.displayClientMessage(EIText.TESLA_CARRYON_SELECTED.text(), true); + } + } + return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); + } + return InteractionResult.PASS; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) + { + if(player.isShiftKeyDown()) + { + player.getItemInHand(usedHand).remove(EIComponents.SELECTED_TESLA_NETWORK); + player.displayClientMessage(EIText.TESLA_CARRYON_CLEAR.text(), true); + return InteractionResultHolder.sidedSuccess(player.getItemInHand(usedHand), level.isClientSide()); + } + return super.use(level, player, usedHand); + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag isAdvanced) + { + if(stack.has(EIComponents.SELECTED_TESLA_NETWORK)) + { + WorldPos key = stack.get(EIComponents.SELECTED_TESLA_NETWORK); + tooltipComponents.add(EIText.TESLA_CARRYON_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(key)).withStyle(DEFAULT_STYLE)); + } + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return !newStack.is(oldStack.getItem()); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index bc19d0c9..b9cd172e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -10,7 +10,7 @@ import java.util.Optional; import java.util.Set; -public final class TeslaNetwork implements MIEnergyStorage.NoExtract +public final class TeslaNetwork implements MIEnergyStorage { private final TeslaNetworkCache cache; private final WorldPos key; @@ -118,6 +118,12 @@ public int receiverCount() return receivers.size(); } + @Override + public boolean canExtract() + { + return this.hasTransmitter(); + } + @Override public boolean canReceive() { @@ -142,6 +148,12 @@ public long receive(long maxReceive, boolean simulate) return amountReceived; } + @Override + public long extract(long maxExtract, boolean simulate) + { + return this.getTransmitter().extractEnergy(maxExtract, simulate); + } + @Override public long getAmount() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java index 5a1e42b9..d2fb6d25 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java @@ -11,9 +11,9 @@ public final class TeslaNetworkCache { private final Map networks = Maps.newHashMap(); - public boolean exists(WorldPos pos) + public boolean exists(WorldPos key) { - return networks.containsKey(pos); + return networks.containsKey(key); } public boolean exists(Level level, BlockPos pos) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index fcbcc683..81e5eec0 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -87,6 +87,7 @@ public ReceiveCheckResult canReceiveFrom(TeslaNetwork network) { return ReceiveCheckResult.MISMATCHING_VOLTAGE; } + // TODO check if receiver is within range return ReceiveCheckResult.SUCCESS; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index 6cc9d2ef..effbe9e5 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -8,6 +8,8 @@ public interface TeslaTransmitter extends TeslaNetworkPart { long transmitEnergy(long maxTransmit); + long extractEnergy(long maxExtract, boolean simulate); + interface Delegate extends TeslaTransmitter { TeslaTransmitter getDelegateTransmitter(); @@ -47,5 +49,11 @@ default long transmitEnergy(long maxTransmit) { return this.getDelegateTransmitter().transmitEnergy(maxTransmit); } + + @Override + default long extractEnergy(long maxExtract, boolean simulate) + { + return this.getDelegateTransmitter().extractEnergy(maxExtract, simulate); + } } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index 6f3e8efa..82f89c69 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -119,6 +119,12 @@ public long transmitEnergy(long maxTransmit) return 0; } + @Override + public long extractEnergy(long maxExtract, boolean simulate) + { + return energyStorage.extract(maxExtract, simulate); + } + @Override public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) { diff --git a/src/main/resources/assets/extended_industrialization/textures/item/tesla_carry_on_receiver.png b/src/main/resources/assets/extended_industrialization/textures/item/tesla_carry_on_receiver.png new file mode 100644 index 0000000000000000000000000000000000000000..65ac5fad6f2cba91783d789f45f8853bd587e2e9 GIT binary patch literal 830 zcmV-E1Ht@>P)4Tx04UFukxM8n4#ug)4d}b zOJ%DpJT_hn8*8=}wn{0FlC6yuv5~I-xua%MqntXOU*9?3*E!#T;6cu`+^TM{?1Gbw z$F!;G8Lj4-Fts$(NI*B;{P@I3ii+domVjDsx>Oeb8};c0*Mxv3JZR>fg7Ca>|7szx zct<#5F6wFFQ{hfWE+~Ajbfd^GinBfkRc6FVC5MC~!dkYBjWRYD9ZR@RIGVO>$q!By zIjwk2v6Wjff9|PX7+$a^CzLL;jX0x>lR(2@g(Y$n=#teI#U&~Gu?qfH-=7edA+9A% zaSXGJh3@-NfAG6oH`CiwObW-K`pNU&+M#9(zBWDY^U(9Yjv(|17k0_Nd;kOQqHmV8 z=sq;8!`Wp?Gq&M;16m&Px}*D2NMc8oPqsJ?O|v z_FRQ`*OvG8=NZ30V&5nka*3Qc>Tm!6010qNS#tmYE*}5@E*}AS?txzb00Cl2L_t(I zPhlk&$8G z;NW05SU3Uh8W2EcgAIUbM7HJm^XCk2-n;>05E}-NEddLFya2-M|33gysB}R=!T<2^ z@c-y?$QXqK!;2Oz0#ZN?8D9TaqemA<-8S67nB}L2P7<(+hcdd0+`x7+~{17@(Voj6t>^DF_5I zvCD%nRu@c7botNC%)%hR$_$RmuYdnANOQ0=1WezG<_ZP|0EC%NJ)hc80{{R307*qo IM6N<$g7ANM$N&HU literal 0 HcmV?d00001 From aaa6c57efdbc18e63e1aa155f608e6f320ca579c Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 28 Sep 2024 00:16:15 -0400 Subject: [PATCH 025/159] Highlight linked blocks when holding linked item --- .../extended_industrialization/EIClient.java | 24 ++++++++--- .../tesla/TeslaPartHighlightRenderer.java | 42 +++++++++++++++++++ .../TeslaPartMultiblockHighlightRenderer.java | 22 ++++++++++ ...TeslaPartSingleBlockHighlightRenderer.java | 22 ++++++++++ .../teslalinkable/TeslaCalibratorItem.java | 2 + .../receiver/TeslaReceiverComponent.java | 2 +- 6 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartHighlightRenderer.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockHighlightRenderer.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockHighlightRenderer.java diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index b16314f2..164aad20 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -32,12 +32,15 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; +import net.swedz.extended_industrialization.client.tesla.TeslaPartMultiblockHighlightRenderer; +import net.swedz.extended_industrialization.client.tesla.TeslaPartSingleBlockHighlightRenderer; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; import net.swedz.extended_industrialization.item.tooltip.MachineConfigCardTooltipComponent; import net.swedz.extended_industrialization.item.tooltip.SteamChainsawTooltipComponent; import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.extended_industrialization.network.packet.ModifyElectricToolSpeedPacket; import net.swedz.tesseract.neoforge.item.DynamicDyedItem; @@ -107,7 +110,22 @@ private static void registerBlockEntityRenderers(FMLClientSetupEvent event) MachineBlockEntity blockEntity = machine.getBlockEntityInstance(); BlockEntityType type = blockEntity.getType(); - if(blockEntity instanceof LargeTankMultiblockBlockEntity) + if(blockEntity instanceof MachineChainerMachineBlockEntity) + { + BlockEntityRenderers.register(type, MachineChainerHighlightRenderer::new); + } + else if(blockEntity instanceof TeslaNetworkPart) + { + if(blockEntity instanceof MultiblockMachineBlockEntity) + { + BlockEntityRenderers.register(type, TeslaPartMultiblockHighlightRenderer::new); + } + else + { + BlockEntityRenderers.register(type, TeslaPartSingleBlockHighlightRenderer::new); + } + } + else if(blockEntity instanceof LargeTankMultiblockBlockEntity) { BlockEntityRenderers.register(type, MultiblockTankBER::new); } @@ -115,10 +133,6 @@ else if(blockEntity instanceof MultiblockMachineBlockEntity) { BlockEntityRenderers.register(type, MultiblockMachineBER::new); } - else if(blockEntity instanceof MachineChainerMachineBlockEntity) - { - BlockEntityRenderers.register(type, MachineChainerHighlightRenderer::new); - } else { BlockEntityRenderers.register(type, (c) -> new MachineBlockEntityRenderer<>(c)); diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartHighlightRenderer.java new file mode 100644 index 00000000..cd4f9ea6 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartHighlightRenderer.java @@ -0,0 +1,42 @@ +package net.swedz.extended_industrialization.client.tesla; + +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.util.RenderHelper; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.swedz.extended_industrialization.EIComponents; +import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; + +import java.util.Optional; + +final class TeslaPartHighlightRenderer +{ + static void render(MachineBlockEntity machine, float tickDelta, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + BlockPos pos = machine.getBlockPos(); + + getHeldNetworkKey().ifPresent((networkKey) -> + { + if(machine instanceof TeslaNetworkPart part && + part.hasNetwork() && part.getNetworkKey().equals(networkKey)) + { + matrices.pushPose(); + matrices.translate(-0.005, -0.005, -0.005); + matrices.scale(1.01f, 1.01f, 1.01f); + RenderHelper.drawOverlay(matrices, buffer, 111f / 256, 111f / 256, 1f, RenderHelper.FULL_LIGHT, overlay); + matrices.popPose(); + } + }); + } + + private static Optional getHeldNetworkKey() + { + Player player = Minecraft.getInstance().player; + return player.getMainHandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getMainHandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : + player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : Optional.empty(); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockHighlightRenderer.java new file mode 100644 index 00000000..b30136cb --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockHighlightRenderer.java @@ -0,0 +1,22 @@ +package net.swedz.extended_industrialization.client.tesla; + +import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBER; +import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; + +public class TeslaPartMultiblockHighlightRenderer extends MultiblockMachineBER +{ + public TeslaPartMultiblockHighlightRenderer(BlockEntityRendererProvider.Context ctx) + { + super(ctx); + } + + @Override + public void render(MultiblockMachineBlockEntity machine, float tickDelta, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + super.render(machine, tickDelta, matrices, buffer, light, overlay); + TeslaPartHighlightRenderer.render(machine, tickDelta, matrices, buffer, light, overlay); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockHighlightRenderer.java new file mode 100644 index 00000000..8247b1ca --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockHighlightRenderer.java @@ -0,0 +1,22 @@ +package net.swedz.extended_industrialization.client.tesla; + +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; + +public class TeslaPartSingleBlockHighlightRenderer extends MachineBlockEntityRenderer +{ + public TeslaPartSingleBlockHighlightRenderer(BlockEntityRendererProvider.Context ctx) + { + super(ctx); + } + + @Override + public void render(MachineBlockEntity machine, float tickDelta, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + super.render(machine, tickDelta, matrices, buffer, light, overlay); + TeslaPartHighlightRenderer.render(machine, tickDelta, matrices, buffer, light, overlay); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java index 7a03fd0f..4dbeb994 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java @@ -51,6 +51,8 @@ else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachi { WorldPos key = itemStack.get(EIComponents.SELECTED_TESLA_NETWORK); receiver.setNetwork(key); + receiver.setChanged(); + receiver.sync(); player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_SUCCESS.text(), true); } else diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 81e5eec0..9fdbd29f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -18,7 +18,7 @@ import java.util.Optional; import java.util.function.Supplier; -public class TeslaReceiverComponent implements IComponent.ServerOnly, TeslaReceiver +public class TeslaReceiverComponent implements IComponent, TeslaReceiver { private final MachineBlockEntity machine; private final Supplier cableTier; From 3748280e9f5df8ba3f436ab76c1427b24b362b87 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 28 Sep 2024 03:30:31 -0400 Subject: [PATCH 026/159] Fix receivers getting added to a network twice due to reading nbt on the client --- .../receiver/TeslaReceiverComponent.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 9fdbd29f..a4dd924b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -12,8 +12,6 @@ import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; -import net.swedz.tesseract.neoforge.proxy.Proxies; -import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; import java.util.Optional; import java.util.function.Supplier; @@ -106,8 +104,7 @@ public WorldPos getNetworkKey() @Override public void setNetwork(WorldPos key) { - TesseractProxy proxy = Proxies.get(TesseractProxy.class); - if(!proxy.hasServer()) + if(machine.getLevel().isClientSide()) { throw new IllegalStateException("Cannot set network of a receiver from the client"); } @@ -181,11 +178,26 @@ public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean i if(tag.contains("network_key", Tag.TAG_COMPOUND)) { CompoundTag keyTag = tag.getCompound("network_key"); - this.setNetwork(WorldPos.CODEC.parse(NbtOps.INSTANCE, keyTag).result().orElse(null)); + Optional key = WorldPos.CODEC.parse(NbtOps.INSTANCE, keyTag).result(); + if(machine.getLevel().isClientSide()) + { + networkKey = key; + } + else + { + this.setNetwork(key.orElse(null)); + } } else { - this.setNetwork(null); + if(machine.getLevel().isClientSide()) + { + networkKey = Optional.empty(); + } + else + { + this.setNetwork(null); + } } } } From 319a26ecbcec378fd776615ee780460deba83e15 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 28 Sep 2024 03:33:00 -0400 Subject: [PATCH 027/159] Improve carryon receiver tracking --- .../TeslaCarryOnReceiverItem.java | 50 ------- .../component/tesla/TeslaReceiverHolder.java | 13 ++ .../tesla/receiver/PlayerTeslaReceiver.java | 89 +++++++++++++ .../TeslaTransmitterComponent.java | 2 +- .../TeslaNetworkReceiversPlayerMixin.java | 123 ++++++++++++++++++ .../extended_industrialization.mixins.json | 1 + src/main/resources/interfaces.json | 3 + 7 files changed, 230 insertions(+), 51 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java create mode 100644 src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java index 2a6a4338..d9ff9df7 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java @@ -1,13 +1,9 @@ package net.swedz.extended_industrialization.item.teslalinkable; -import aztech.modern_industrialization.api.energy.EnergyApi; -import com.google.common.collect.Lists; 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.Entity; -import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -18,12 +14,7 @@ import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkCache; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; -import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; -import net.swedz.tesseract.neoforge.compat.mi.helper.ChargeInventoryHelper; -import net.swedz.tesseract.neoforge.proxy.Proxies; import java.util.List; @@ -37,47 +28,6 @@ public TeslaCarryOnReceiverItem(Properties properties) super(properties.stacksTo(1)); } - private long charge(Player player, long maxEu) - { - Inventory inventory = player.getInventory(); - - List items = Lists.newArrayList(); - items.addAll(inventory.armor); - items.addAll(inventory.items); - items.addAll(inventory.offhand); - items.addAll(Proxies.get(EIModSlotProxy.class).getContents(player, (stack) -> stack.getCapability(EnergyApi.ITEM) != null)); - - return ChargeInventoryHelper.charge(items, maxEu, false); - } - - @Override - public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) - { - if(level.isClientSide()) - { - return; - } - - if(entity instanceof Player player && stack.has(EIComponents.SELECTED_TESLA_NETWORK)) - { - WorldPos networkKey = stack.get(EIComponents.SELECTED_TESLA_NETWORK); - TeslaNetworkCache cache = level.getServer().getTeslaNetworks(); - if(cache.exists(networkKey)) - { - TeslaNetwork network = cache.get(networkKey); - // TODO check if player is within range - if(network.canExtract()) - { - // TODO limit transmit rate - long eu = Long.MAX_VALUE; - eu = network.extract(eu, true); - eu = this.charge(player, eu); - network.extract(eu, false); - } - } - } - } - @Override public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder.java new file mode 100644 index 00000000..4331bb3c --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder.java @@ -0,0 +1,13 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; + +import java.util.Collection; + +/** + * Injected into {@link net.minecraft.world.entity.player.Player} + */ +public interface TeslaReceiverHolder +{ + Collection getTeslaReceivers(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java new file mode 100644 index 00000000..a28989db --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java @@ -0,0 +1,89 @@ +package net.swedz.extended_industrialization.machines.component.tesla.receiver; + +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.api.energy.EnergyApi; +import com.google.common.collect.Lists; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; +import net.swedz.tesseract.neoforge.compat.mi.helper.ChargeInventoryHelper; +import net.swedz.tesseract.neoforge.proxy.Proxies; + +import java.util.List; + +public final class PlayerTeslaReceiver implements TeslaReceiver +{ + private final Player player; + private final WorldPos networkKey; + + public PlayerTeslaReceiver(Player player, WorldPos networkKey) + { + this.player = player; + this.networkKey = networkKey; + } + + @Override + public ReceiveCheckResult canReceiveFrom(TeslaNetwork network) + { + return ReceiveCheckResult.SUCCESS; + } + + @Override + public long receiveEnergy(long maxReceive, boolean simulate) + { + Inventory inventory = player.getInventory(); + + List items = Lists.newArrayList(); + items.addAll(inventory.armor); + items.addAll(inventory.items); + items.addAll(inventory.offhand); + items.addAll(Proxies.get(EIModSlotProxy.class).getContents(player, (stack) -> stack.getCapability(EnergyApi.ITEM) != null)); + + return ChargeInventoryHelper.charge(items, maxReceive, simulate); + } + + @Override + public long getStoredEnergy() + { + throw new UnsupportedOperationException("Cannot get stored energy for a player receiver"); + } + + @Override + public long getEnergyCapacity() + { + throw new UnsupportedOperationException("Cannot get energy capacity for a player receiver"); + } + + @Override + public boolean hasNetwork() + { + return true; + } + + @Override + public WorldPos getNetworkKey() + { + return networkKey; + } + + @Override + public void setNetwork(WorldPos key) + { + throw new UnsupportedOperationException("Cannot set network for a player receiver"); + } + + @Override + public WorldPos getPosition() + { + return new WorldPos(player.level(), player.blockPosition()); + } + + @Override + public CableTier getCableTier() + { + throw new UnsupportedOperationException("Cannot get cable tier for a player receiver"); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index 82f89c69..aedc914a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -9,8 +9,8 @@ import dev.technici4n.grandpower.api.EnergyStorageUtil; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import java.util.List; import java.util.Optional; diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java new file mode 100644 index 00000000..3100adeb --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java @@ -0,0 +1,123 @@ +package net.swedz.extended_industrialization.mixin; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.swedz.extended_industrialization.EIComponents; +import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.item.teslalinkable.TeslaCarryOnReceiverItem; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaReceiverHolder; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.PlayerTeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; +import net.swedz.tesseract.neoforge.proxy.Proxies; +import org.spongepowered.asm.mixin.Implements; +import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Mixin(Player.class) +@Implements(@Interface(iface = TeslaReceiverHolder.class, prefix = "teslaNetwork$")) +public abstract class TeslaNetworkReceiversPlayerMixin extends LivingEntity +{ + protected TeslaNetworkReceiversPlayerMixin(EntityType entityType, Level level) + { + super(entityType, level); + } + + @Unique + private final Map receivers = Maps.newHashMap(); + + public Collection teslaNetwork$getTeslaReceivers() + { + return Collections.unmodifiableCollection(receivers.values()); + } + + @Unique + private List getAllItems() + { + Player player = (Player) (Object) this; + + Inventory inventory = player.getInventory(); + + List items = Lists.newArrayList(); + items.addAll(inventory.armor); + items.addAll(inventory.items); + items.addAll(inventory.offhand); + items.addAll(Proxies.get(EIModSlotProxy.class).getContents(player, (stack) -> true)); + + return items; + } + + @Inject( + method = "tick", + at = @At("TAIL") + ) + private void tick(CallbackInfo callback) + { + Player player = (Player) (Object) this; + + if(this.level().isClientSide()) + { + return; + } + + Map found = Maps.newHashMap(); + + for(ItemStack stack : this.getAllItems()) + { + if(stack.getItem() instanceof TeslaCarryOnReceiverItem && stack.has(EIComponents.SELECTED_TESLA_NETWORK)) + { + WorldPos key = stack.get(EIComponents.SELECTED_TESLA_NETWORK); + found.computeIfAbsent(key, (k) -> new PlayerTeslaReceiver(player, k)); + } + } + + Set toRemove = Sets.difference(receivers.keySet(), found.keySet()); + for(WorldPos key : toRemove) + { + TeslaReceiver receiver = receivers.remove(key); + receiver.getNetwork().remove(receiver); + } + + Set toAdd = Sets.difference(found.keySet(), receivers.keySet()); + for(WorldPos key : toAdd) + { + TeslaReceiver receiver = found.get(key); + receiver.getNetwork().add(receiver); + receivers.put(key, receiver); + } + } + + @Inject( + method = "remove", + at = @At("TAIL") + ) + private void remove(Entity.RemovalReason reason, + CallbackInfo callback) + { + if(this.level().isClientSide()) + { + return; + } + + receivers.forEach((key, receiver) -> receiver.getNetwork().remove(receiver)); + receivers.clear(); + } +} diff --git a/src/main/resources/extended_industrialization.mixins.json b/src/main/resources/extended_industrialization.mixins.json index 52da8cb8..69701fb9 100644 --- a/src/main/resources/extended_industrialization.mixins.json +++ b/src/main/resources/extended_industrialization.mixins.json @@ -8,6 +8,7 @@ "RainbowDyedItemColorMixin", "RemoveRainbowWhenDyeingMixin", "TeslaNetworkHolderMinecraftServerMixin", + "TeslaNetworkReceiversPlayerMixin", "mi.accessor.CasingComponentAccessor", "mi.accessor.ConfigurableItemStackAccessor", "mi.accessor.RedstoneControlComponentAccessor", diff --git a/src/main/resources/interfaces.json b/src/main/resources/interfaces.json index 09e47f6a..b1a321cf 100644 --- a/src/main/resources/interfaces.json +++ b/src/main/resources/interfaces.json @@ -1,5 +1,8 @@ { "net/minecraft/server/MinecraftServer": [ "net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder" + ], + "net/minecraft/world/entity/player/Player": [ + "net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder" ] } \ No newline at end of file From a9000c35df72421fe64d658f066617b3a80fd017 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 28 Sep 2024 03:55:39 -0400 Subject: [PATCH 028/159] Fix writing/reading nbt for receiver component --- .../TeslaReceiverMachineBlockEntity.java | 1 - .../receiver/TeslaReceiverComponent.java | 37 ++++++++++--------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 3f6a2b49..4b82633f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -56,7 +56,6 @@ protected void setCasingStack(ItemStack stack) { super.setCasingStack(stack); - // TODO this check doesnt work properly if(level != null && !level.isClientSide()) { receiver.addToNetwork(); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index a4dd924b..200b800d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -12,6 +12,8 @@ import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; +import net.swedz.tesseract.neoforge.proxy.Proxies; +import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; import java.util.Optional; import java.util.function.Supplier; @@ -104,7 +106,7 @@ public WorldPos getNetworkKey() @Override public void setNetwork(WorldPos key) { - if(machine.getLevel().isClientSide()) + if(!Proxies.get(TesseractProxy.class).hasServer()) { throw new IllegalStateException("Cannot set network of a receiver from the client"); } @@ -178,26 +180,25 @@ public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean i if(tag.contains("network_key", Tag.TAG_COMPOUND)) { CompoundTag keyTag = tag.getCompound("network_key"); - Optional key = WorldPos.CODEC.parse(NbtOps.INSTANCE, keyTag).result(); - if(machine.getLevel().isClientSide()) - { - networkKey = key; - } - else - { - this.setNetwork(key.orElse(null)); - } + this.setNetwork(WorldPos.CODEC.parse(NbtOps.INSTANCE, keyTag).result().orElse(null)); } else { - if(machine.getLevel().isClientSide()) - { - networkKey = Optional.empty(); - } - else - { - this.setNetwork(null); - } + this.setNetwork(null); + } + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + if(tag.contains("network_key", Tag.TAG_COMPOUND)) + { + CompoundTag keyTag = tag.getCompound("network_key"); + networkKey = WorldPos.CODEC.parse(NbtOps.INSTANCE, keyTag).result(); + } + else + { + networkKey = Optional.empty(); } } } From 30edf637a9cdfc930dfe03e16e9b9560151841bd Mon Sep 17 00:00:00 2001 From: Swedz Date: Sun, 29 Sep 2024 00:51:18 -0400 Subject: [PATCH 029/159] Move layer formatter to shape api --- .../teslatower/TeslaTowerShapes.java | 20 +------------------ .../tieredshapes/MultiblockTieredShapes.java | 18 +++++++++++++++++ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index 2582f9c3..14d8317b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -25,24 +25,6 @@ public final class TeslaTowerShapes extends MultiblockTieredShapes event.ifRegistry(Registries.BLOCK, (registry) -> this.invalidate())); } + + protected static String[][] layersConvertFromVertical(String[][] input) + { + int rows = input[0].length; + int columns = input.length; + + String[][] result = new String[rows][columns]; + + for(int row = 0; row < rows; row++) + { + for(int column = 0; column < columns; column++) + { + result[row][column] = input[column][row]; + } + } + + return result; + } } From 699f887c025a3d7c8908922ea78777eacff0cc6d Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 1 Oct 2024 04:44:10 -0400 Subject: [PATCH 030/159] Add polished stainless steel casing and include it in the multiblock --- .../polished_stainless_steel_casing.json | 7 ++++ .../lang/en_us.json | 1 + .../polished_stainless_steel_casing.json | 6 +++ .../item/polished_stainless_steel_casing.json | 3 ++ .../polished_stainless_steel_casing.json | 21 ++++++++++ .../polished_stainless_steel_casing.json | 21 ++++++++++ .../polished_stainless_steel_casing.json | 21 ++++++++++ .../tags/block/mineable/pickaxe.json | 1 + .../tags/block/needs_stone_tool.json | 1 + .../extended_industrialization/EIBlocks.java | 5 ++- .../CommonRecipesServerDatagenProvider.java | 12 ++++++ .../teslatower/TeslaTowerShapes.java | 37 +++++++++--------- .../block/polished_stainless_steel_casing.png | Bin 0 -> 995 bytes 13 files changed, 116 insertions(+), 20 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/casing/assembler/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/casing/craft/polished_stainless_steel_casing.json create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/polished_stainless_steel_casing.png diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/polished_stainless_steel_casing.json b/src/generated/resources/assets/extended_industrialization/blockstates/polished_stainless_steel_casing.json new file mode 100644 index 00000000..a423bcc8 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/polished_stainless_steel_casing.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/polished_stainless_steel_casing" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 344329f8..5ae6f7e4 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -28,6 +28,7 @@ "block.extended_industrialization.mv_solar_panel": "MV Solar Panel", "block.extended_industrialization.npk_fertilizer": "NPK Fertilizer", "block.extended_industrialization.phosphoric_acid": "Phosphoric Acid", + "block.extended_industrialization.polished_stainless_steel_casing": "Polished Stainless Steel Casing", "block.extended_industrialization.potassium_chloride": "Potassium Chloride", "block.extended_industrialization.potassium_hydroxide": "Potassium Hydroxide", "block.extended_industrialization.processing_array": "Processing Array", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/polished_stainless_steel_casing.json b/src/generated/resources/assets/extended_industrialization/models/block/polished_stainless_steel_casing.json new file mode 100644 index 00000000..e6ec98a8 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/polished_stainless_steel_casing.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "extended_industrialization:block/polished_stainless_steel_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/polished_stainless_steel_casing.json b/src/generated/resources/assets/extended_industrialization/models/item/polished_stainless_steel_casing.json new file mode 100644 index 00000000..de4b1f4a --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/polished_stainless_steel_casing.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/polished_stainless_steel_casing" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_stainless_steel_casing.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_stainless_steel_casing.json new file mode 100644 index 00000000..bcf717ac --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_stainless_steel_casing.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:polished_stainless_steel_casing" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/polished_stainless_steel_casing" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/casing/assembler/polished_stainless_steel_casing.json b/src/generated/resources/data/extended_industrialization/recipe/casing/assembler/polished_stainless_steel_casing.json new file mode 100644 index 00000000..bc2bca9b --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/casing/assembler/polished_stainless_steel_casing.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 3, + "tag": "c:plates/stainless_steel" + }, + { + "amount": 6, + "item": "modern_industrialization:stainless_steel_curved_plate" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:polished_stainless_steel_casing" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/casing/craft/polished_stainless_steel_casing.json b/src/generated/resources/data/extended_industrialization/recipe/casing/craft/polished_stainless_steel_casing.json new file mode 100644 index 00000000..135d3026 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/casing/craft/polished_stainless_steel_casing.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "modern_industrialization:stainless_steel_curved_plate" + }, + "P": { + "tag": "c:plates/stainless_steel" + } + }, + "pattern": [ + "CPC", + "CPC", + "CPC" + ], + "result": { + "count": 1, + "id": "extended_industrialization:polished_stainless_steel_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index dbade603..b6287b5a 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -22,6 +22,7 @@ "extended_industrialization:machine_chainer", "extended_industrialization:machine_chainer_relay", "extended_industrialization:mv_solar_panel", + "extended_industrialization:polished_stainless_steel_casing", "extended_industrialization:processing_array", "extended_industrialization:steam_farmer", "extended_industrialization:steel_alloy_smelter", diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index dbade603..b6287b5a 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -22,6 +22,7 @@ "extended_industrialization:machine_chainer", "extended_industrialization:machine_chainer_relay", "extended_industrialization:mv_solar_panel", + "extended_industrialization:polished_stainless_steel_casing", "extended_industrialization:processing_array", "extended_industrialization:steam_farmer", "extended_industrialization:steel_alloy_smelter", diff --git a/src/main/java/net/swedz/extended_industrialization/EIBlocks.java b/src/main/java/net/swedz/extended_industrialization/EIBlocks.java index cfaa327e..fde6a1ea 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIBlocks.java +++ b/src/main/java/net/swedz/extended_industrialization/EIBlocks.java @@ -46,8 +46,9 @@ public static void init(IEventBus bus) Registry.init(bus); } - public static final BlockHolder MACHINE_CHAINER_RELAY = create("machine_chainer_relay", "Machine Chainer Relay", Block::new, BlockItem::new, EISortOrder.MACHINES).withProperties((p) -> p.mapColor(MapColor.METAL).destroyTime(4f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).tag(EITags.Blocks.MACHINE_CHAINER_RELAY).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockstateOnly).register(); - public static final BlockHolder STEEL_PLATED_BRICKS = create("steel_plated_bricks", "Steel Plated Bricks", Block::new, BlockItem::new, EISortOrder.CASINGS).withProperties((p) -> p.destroyTime(5f).explosionResistance(6f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockCubeAll).register(); + public static final BlockHolder MACHINE_CHAINER_RELAY = create("machine_chainer_relay", "Machine Chainer Relay", Block::new, BlockItem::new, EISortOrder.MACHINES).withProperties((p) -> p.mapColor(MapColor.METAL).destroyTime(4f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).tag(EITags.Blocks.MACHINE_CHAINER_RELAY).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockstateOnly).register(); + public static final BlockHolder STEEL_PLATED_BRICKS = create("steel_plated_bricks", "Steel Plated Bricks", Block::new, BlockItem::new, EISortOrder.CASINGS).withProperties((p) -> p.destroyTime(5f).explosionResistance(6f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockCubeAll).register(); + public static final BlockHolder POLISHED_STAINLESS_STEEL_CASING = create("polished_stainless_steel_casing", "Polished Stainless Steel Casing", Block::new, BlockItem::new, EISortOrder.CASINGS).withProperties((p) -> p.mapColor(MapColor.METAL).destroyTime(5f).explosionResistance(6f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockCubeAll).register(); public static Set values() { diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java index f73e0644..77bfe4eb 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java @@ -297,6 +297,18 @@ protected void buildRecipes(RecipeOutput output) output ); + addBasicCraftingRecipes( + "casing", "polished_stainless_steel_casing", true, + EIBlocks.POLISHED_STAINLESS_STEEL_CASING.get().asItem(), 1, + (r) -> r + .define('C', "modern_industrialization:stainless_steel_curved_plate") + .define('P', EITags.itemCommon("plates/stainless_steel")) + .pattern("CPC") + .pattern("CPC") + .pattern("CPC"), + output + ); + components(output); addMachineRecipe( diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index 14d8317b..cd553e94 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -6,8 +6,8 @@ import aztech.modern_industrialization.machines.multiblocks.HatchType; import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; import aztech.modern_industrialization.machines.multiblocks.SimpleMember; -import net.minecraft.world.level.block.Blocks; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIBlocks; import net.swedz.extended_industrialization.EIDataMaps; import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; import net.swedz.extended_industrialization.machines.tieredshapes.MultiblockTieredShapes; @@ -31,36 +31,36 @@ private String[][] pattern() " ", " ", " ", - " P ", + " c ", " ", " ", " " }; String[] layerPipeWithCoil = { " ", - " WWW ", - " W W ", - " W P W ", - " W W ", - " WWW ", + " TTT ", + " T P T ", + " TPcPT ", + " T P T ", + " TTT ", " " }; String[] ballEnd = { " ", " ", - " WWW ", - " WWW ", - " WWW ", + " TTT ", + " TTT ", + " TTT ", " ", " " }; String[] ballMiddle = { " ", - " WWW ", - " WWWWW ", - " WWWWW ", - " WWWWW ", - " WWW ", + " TTT ", + " TTTTT ", + " TTTTT ", + " TTTTT ", + " TTT ", " " }; return new String[][]{ @@ -68,7 +68,7 @@ private String[][] pattern() " SSSSS ", "SSCCCSS", "SCCCCCS", - "SCCPCCS", + "SCCcCCS", "SCCCCCS", "SSCCCSS", " SS#SS " @@ -77,7 +77,7 @@ private String[][] pattern() " ", " CCC ", " C C ", - " C P C ", + " C c C ", " C C ", " CCC ", " " @@ -115,8 +115,9 @@ protected void invalidateShapeTemplates() ); builder.key('S', SimpleMember.forBlockId(MI.id("clean_stainless_steel_machine_casing")), new HatchFlags.Builder().with(HatchType.ENERGY_INPUT).build()); builder.key('P', SimpleMember.forBlockId(MI.id("stainless_steel_machine_casing_pipe")), HatchFlags.NO_HATCH); + builder.key('T', SimpleMember.forBlock(EIBlocks.POLISHED_STAINLESS_STEEL_CASING), HatchFlags.NO_HATCH); builder.key('C', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); - builder.key('W', SimpleMember.forBlock(() -> Blocks.WHITE_WOOL), HatchFlags.NO_HATCH); + builder.key('c', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); // TODO secondary coil shapeTemplates[i] = builder.build(); } } diff --git a/src/main/resources/assets/extended_industrialization/textures/block/polished_stainless_steel_casing.png b/src/main/resources/assets/extended_industrialization/textures/block/polished_stainless_steel_casing.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4fd9795a29242a590889ed73d7645c105cf07e GIT binary patch literal 995 zcmV<9104K`P)4Tx04UFuk-JO7P!z_0Z571_f;xyebWm}yAPV9r6?CZ%wSupujY%scX-Hb6 zxC$-~f`jPdYw$nNRd7`h1Vs>WboRA~#B&>=MRf3noAcwl`3~oPfpEgqEU#u1EW6+) zC*slBx%p__6ScGwW`s~$^PI`)@f3fq_Zvd0UdL1~{KV;eai)s3oNEd933pp&QTv`p z-K0skXQrig%I?A=$pmqtWGJ$XNr9MDTQd9IH&FIXkr$69Z-)}DII`r#+b?QSy6RF5 z(RF!DN-FoCd3wgsV9>oO4z&-y|I!0>TkyH*`yU6s|9J?JdpNTz{=DQg@+SIbMeE*! zmNhszuV|TVI9-R1J16a?%Th#k*f8Mv7@Fsx?Ft$ef~>yJIl6_^s{Eo$*x7|%`MzcG z3j=Rx3l^FG)Bpeg32;bRa{vGf6951U69E94oEQKA0u)I^K~y+TZBt3I(=ZV2IQcmV zXJN-3*l-I@11qXH3=0lGQ7nE2l313d)@1QsJFfZ*RHd?p?tX*XyKmorcJ*0GQOtz7 zu2YJVbCi;^v{t27d~3B?Yr$Ew@9yiDAN~D@cM@`wrFV&`ik3y{vdH{MqEiufMX^{= zbe3tl$>VX67$&)%UuDQy5!{92Z8FEw*7N_3{r-UaCIji_3N$U2%yB#nqQ1zm-y!H( zY-#p=J17kdlBCisxgeM`Vck%)C=m981rx~ohtbdQr$a9NFa{yR7|`AiD`K4Tnxs|2 z2!N1m-}@pjFGpJ!0Mp2UZdYg}qPO5G9iGs<;Ihmk?)d_sOVq>RXxcfS5~7T7nTaJe zn*r`u$l8W#kPsXs+$GFzJ=}pUd>LvfSO5{GDX3TICbBz6pwHF|oJ6nC%wFO9$Kcmj z;KrST%r~_nm){S3R}TW-dTl6`al8U_XXgw2qJHy$I!Hgb1oKp4oIu&b?Xx-0BHVW* zd3Tp-yqkd)9ZOS(1_t-r2?!T)?yt3Sj2_6ro^8UJMlkdvl8P}%s$es$CQ=s{EI_wu z3=Jb?(&rsPsFxCAm;pd<@QgH(&A|Sq&eQ8JxnBOrh-M*01rs(+Qv6idI|qNjhGTn5 z^MLfY;n+|WC@fAyKaG~S#qbX`24wZ=uvu$+hW>M Date: Tue, 1 Oct 2024 15:53:46 -0400 Subject: [PATCH 031/159] Implement loss tracking --- .../TeslaReceiverMachineBlockEntity.java | 6 ++-- .../component/tesla/TeslaNetwork.java | 9 +++++- .../tesla/receiver/PlayerTeslaReceiver.java | 4 +-- .../tesla/receiver/TeslaReceiver.java | 31 ++++++++++++++----- .../receiver/TeslaReceiverComponent.java | 6 ++-- 5 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 4b82633f..532b3b34 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -79,8 +79,8 @@ protected void setCasingStack(ItemStack stack) if(network.isTransmitterLoaded()) { - ReceiveCheckResult result = this.canReceiveFrom(network); - if(result == ReceiveCheckResult.MISMATCHING_VOLTAGE) + ReceiveCheckResult result = this.checkReceiveFrom(network); + if(result.type() == ReceiveCheckResult.Type.MISMATCHING_VOLTAGE) { text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE.text(network.getCableTier().shortEnglishName()), 0xFF0000)); } @@ -148,7 +148,7 @@ public void tick() if(this.hasNetwork() && this.getNetwork().isTransmitterLoaded()) { TeslaNetwork network = this.getNetwork(); - isActive.updateActive(network.isTransmitterLoaded() && this.canReceiveFrom(network).isSuccess(), this); + isActive.updateActive(network.isTransmitterLoaded() && this.checkReceiveFrom(network).isSuccess(), this); } else { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index b9cd172e..a76332ba 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -85,7 +85,7 @@ private void updateAll() private void update(TeslaReceiver receiver) { - if(this.isTransmitterLoaded() && receiver.canReceiveFrom(this).isSuccess()) + if(this.isTransmitterLoaded() && receiver.checkReceiveFrom(this).isSuccess()) { receivers.add(receiver); } @@ -139,8 +139,15 @@ public long receive(long maxReceive, boolean simulate) for(TeslaReceiver receiver : receivers) { int remainingStorages = receivers.size() - index; + long amountToReceive = remainingStorages == 1 ? remaining : remaining / remainingStorages; + float loss = receiver.checkReceiveFrom(this).loss(); + if(loss > 0) + { + amountToReceive = amountToReceive - (long) Math.floor(amountToReceive * loss); + } long received = receiver.receiveEnergy(amountToReceive, simulate); + amountReceived += received; remaining -= received; index++; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java index a28989db..fb920321 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java @@ -26,9 +26,9 @@ public PlayerTeslaReceiver(Player player, WorldPos networkKey) } @Override - public ReceiveCheckResult canReceiveFrom(TeslaNetwork network) + public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { - return ReceiveCheckResult.SUCCESS; + return ReceiveCheckResult.success(0f); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 94125568..6bf8f3b5 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -7,7 +7,7 @@ public interface TeslaReceiver extends TeslaNetworkPart { - ReceiveCheckResult canReceiveFrom(TeslaNetwork network); + ReceiveCheckResult checkReceiveFrom(TeslaNetwork network); long receiveEnergy(long maxReceive, boolean simulate); @@ -15,20 +15,37 @@ public interface TeslaReceiver extends TeslaNetworkPart long getEnergyCapacity(); - enum ReceiveCheckResult + record ReceiveCheckResult(Type type, float loss) { - SUCCESS, - MISMATCHING_VOLTAGE; + public static ReceiveCheckResult success(float loss) + { + return new ReceiveCheckResult(Type.SUCCESS, loss); + } + + public static ReceiveCheckResult failure(Type type) + { + if(type == Type.SUCCESS) + { + throw new IllegalArgumentException("Cannot create failure result with success type"); + } + return new ReceiveCheckResult(type, 0f); + } public boolean isSuccess() { - return this == SUCCESS; + return type == Type.SUCCESS; } public boolean isFailure() { return !this.isSuccess(); } + + public enum Type + { + SUCCESS, + MISMATCHING_VOLTAGE + } } interface Delegate extends TeslaReceiver @@ -36,9 +53,9 @@ interface Delegate extends TeslaReceiver TeslaReceiver getDelegateReceiver(); @Override - default ReceiveCheckResult canReceiveFrom(TeslaNetwork network) + default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { - return this.getDelegateReceiver().canReceiveFrom(network); + return this.getDelegateReceiver().checkReceiveFrom(network); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 200b800d..05cdd244 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -81,14 +81,14 @@ public MIEnergyStorage insertable() } @Override - public ReceiveCheckResult canReceiveFrom(TeslaNetwork network) + public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { if(this.getCableTier() != network.getCableTier()) { - return ReceiveCheckResult.MISMATCHING_VOLTAGE; + return ReceiveCheckResult.failure(ReceiveCheckResult.Type.MISMATCHING_VOLTAGE); } // TODO check if receiver is within range - return ReceiveCheckResult.SUCCESS; + return ReceiveCheckResult.success(0f); } @Override From 541c754b9e203d3a60a490524ecd786f33b915de Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 1 Oct 2024 17:47:35 -0400 Subject: [PATCH 032/159] Add receiver to network when its level is set --- .../TeslaReceiverMachineBlockEntity.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 532b3b34..44e8ff67 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -16,6 +16,7 @@ import com.google.common.collect.Lists; import net.minecraft.network.chat.Style; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; @@ -124,6 +125,19 @@ public TeslaReceiver getDelegateReceiver() return receiver; } + @Override + public void setLevel(Level level) + { + super.setLevel(level); + + if(level.isClientSide()) + { + return; + } + + receiver.addToNetwork(); + } + @Override public void setRemoved() { From 1f291a6bb82a02c45f596596f1bfd6dd1bff223c Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 2 Oct 2024 03:10:39 -0400 Subject: [PATCH 033/159] Add energy loss with greater distance and various limits based on coil --- .../lang/en_us.json | 3 + .../data_maps/block/tesla_tower_tier.json | 9 ++- .../extended_industrialization/EIText.java | 6 +- .../api/WorldPos.java | 9 +++ .../provider/LanguageDatagenProvider.java | 1 + .../datamaps/DataMapDatagenProvider.java | 8 +- .../datamap/TeslaTowerTierData.java | 9 ++- .../teslatower/TeslaTowerBlockEntity.java | 8 +- .../teslatower/TeslaTowerShapes.java | 2 +- .../multiblock/teslatower/TeslaTowerTier.java | 3 +- .../component/tesla/TeslaNetwork.java | 11 ++- .../component/tesla/TeslaTransferLimits.java | 74 +++++++++++++++++++ .../tesla/receiver/TeslaReceiver.java | 4 +- .../receiver/TeslaReceiverComponent.java | 25 ++++++- .../tesla/transmitter/TeslaTransmitter.java | 23 +++++- .../TeslaTransmitterComponent.java | 27 ++++++- 16 files changed, 195 insertions(+), 27 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 5ae6f7e4..87b62792 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -100,6 +100,7 @@ "tag.item.extended_industrialization.photovoltaic_cell": "Photovoltaic Cells", "tag.item.extended_industrialization.rainbow_dyeable": "Rainbow Dyeable", "teslatower_tier.extended_industrialization.modern_industrialization.cupronickel_coil": "Cupronickel", + "teslatower_tier.extended_industrialization.modern_industrialization.superconductor_coil": "Superconductor", "text.extended_industrialization.activated": "Activated", "text.extended_industrialization.brewery_brews_multiple": "Brews %s potions at a time.", "text.extended_industrialization.brewery_requires_blazing_essence": "Requires %s to brew potions.", @@ -210,8 +211,10 @@ "text.extended_industrialization.tesla_carryon_linked": "Linked to %s", "text.extended_industrialization.tesla_carryon_selected": "Selected transmitter for receiving.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", + "text.extended_industrialization.tesla_receiver_loss": "Energy Loss: %s", "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Cannot receive %s power", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", + "text.extended_industrialization.tesla_receiver_too_far": "Transmitter is too far", "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", "text.extended_industrialization.tesla_transmitter_no_energy_hatches": "No energy hatches provided", diff --git a/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json b/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json index 2d819f70..31094bae 100644 --- a/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json +++ b/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json @@ -1,7 +1,14 @@ { "values": { "modern_industrialization:cupronickel_coil": { - "cableTier": "lv" + "distance": 128, + "loss": 0.25, + "transfer": 256 + }, + "modern_industrialization:superconductor_coil": { + "distance": 1024, + "loss": 0.0, + "transfer": 1024000000 } } } \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 54b74a84..7dbc5f25 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -114,13 +114,15 @@ public enum EIText implements TranslatableTextEnum TESLA_CARRYON_LINKED("Linked to %s"), TESLA_CARRYON_SELECTED("Selected transmitter for receiving."), TESLA_RECEIVER_LINKED("Linked to %s"), + TESLA_RECEIVER_LOSS("Energy Loss: %s"), TESLA_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), + TESLA_RECEIVER_TOO_FAR("Transmitter is too far"), TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), - TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), + TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), TESLA_TRANSMITTER_NO_ENERGY_HATCHES("No energy hatches provided"), TESLA_TRANSMITTER_NO_NETWORK("No network found"), - TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), + TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), TESLA_TRANSMITTER_VOLTAGE("Transmitting %s power"), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), diff --git a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java index aaa104e1..397881f4 100644 --- a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java +++ b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java @@ -57,6 +57,15 @@ public boolean isTicking() level.shouldTickBlocksAt(pos); } + public double distanceSqr(WorldPos other) + { + if(!dimension.equals(other.dimension())) + { + throw new IllegalArgumentException("Mismatching dimensions in distance check"); + } + return pos.distSqr(other.pos()); + } + @Override public int hashCode() { diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java index 06d39a8e..7c455fe1 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java @@ -54,5 +54,6 @@ protected void addTranslations() this.add("lef_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "kanthal_coil"), "Kanthal"); this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "cupronickel_coil"), "Cupronickel"); + this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "superconductor_coil"), "Superconductor"); } } diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java index 3ba69f74..e253fba7 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java @@ -36,7 +36,9 @@ protected void gather() this.addLargeElectricFurnaceTier(MI.id("cupronickel_coil"), 8, 0.75f); this.addLargeElectricFurnaceTier(MI.id("kanthal_coil"), 32, 0.75f); - this.addTeslaTowerTier(MI.id("cupronickel_coil"), CableTier.LV); + // TODO use special coils for tesla tower + this.addTeslaTowerTier(MI.id("cupronickel_coil"), CableTier.LV.getMaxTransfer(), 128, 0.25f); + this.addTeslaTowerTier(MI.id("superconductor_coil"), CableTier.SUPERCONDUCTOR.getMaxTransfer(), 128 * 8, 0f); } private void addFarmerSimpleTallCropSize(ResourceLocation block, int maxHeight) @@ -59,9 +61,9 @@ private void addLargeElectricFurnaceTier(ResourceLocation block, int batchSize, this.builder(EIDataMaps.LARGE_ELECTRIC_FURNACE_TIER).add(block, new LargeElectricFurnaceTier(batchSize, euCostMultiplier), false); } - private void addTeslaTowerTier(ResourceLocation block, CableTier cableTier) + private void addTeslaTowerTier(ResourceLocation block, long maxTransfer, int maxDistance, float maxLoss) { - this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block, new TeslaTowerTierData(cableTier), false); + this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block, new TeslaTowerTierData(maxTransfer, maxDistance, maxLoss), false); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java index c33170e1..f0b0a72a 100644 --- a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java +++ b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java @@ -1,6 +1,5 @@ package net.swedz.extended_industrialization.datamap; -import aztech.modern_industrialization.api.energy.CableTier; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.registries.BuiltInRegistries; @@ -12,18 +11,20 @@ import java.util.Map; -public record TeslaTowerTierData(CableTier cableTier) implements DataMultiblockTier +public record TeslaTowerTierData(long maxTransfer, int maxDistance, float maxLoss) implements DataMultiblockTier { public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance .group( - Codec.STRING.xmap(CableTier::getTier, (tier) -> tier.name).fieldOf("cableTier").forGetter(TeslaTowerTierData::cableTier) + Codec.LONG.fieldOf("transfer").forGetter(TeslaTowerTierData::maxTransfer), + Codec.INT.fieldOf("distance").forGetter(TeslaTowerTierData::maxDistance), + Codec.FLOAT.fieldOf("loss").forGetter(TeslaTowerTierData::maxLoss) ) .apply(instance, TeslaTowerTierData::new)); @Override public TeslaTowerTier wrap(ResourceKey key) { - return new TeslaTowerTier(key.location(), cableTier); + return new TeslaTowerTier(key.location(), maxTransfer, maxDistance, maxLoss); } public static TeslaTowerTierData getFor(Block block) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 36c2d420..5d7e2037 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -16,8 +16,9 @@ import net.minecraft.world.level.Level; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; @@ -46,7 +47,10 @@ public TeslaTowerBlockEntity(BEP bep) redstoneControl = new RedstoneControlComponent(); - transmitter = new TeslaTransmitterComponent(this, energyInputs, () -> cableTier); + transmitter = new TeslaTransmitterComponent( + this, energyInputs, + () -> TeslaTransferLimits.of(cableTier, SHAPES.tiers().get(activeShape.getActiveShapeIndex())) + ); this.registerComponents(redstoneControl); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index cd553e94..faf7f82b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -21,7 +21,7 @@ public final class TeslaTowerShapes extends MultiblockTieredShapes maxDistanceSqr) + { + return ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); + } + float loss = ((float) distanceSqr / maxDistanceSqr) * network.getMaxLoss(); + return ReceiveCheckResult.success(loss); + } + else + { + return ReceiveCheckResult.failure(ReceiveCheckResult.Type.UNDEFINED); + } } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index effbe9e5..64d182fd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -1,10 +1,11 @@ package net.swedz.extended_industrialization.machines.component.tesla.transmitter; import aztech.modern_industrialization.api.energy.CableTier; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; -public interface TeslaTransmitter extends TeslaNetworkPart +public interface TeslaTransmitter extends TeslaNetworkPart, TeslaTransferLimits { long transmitEnergy(long maxTransmit); @@ -44,6 +45,24 @@ default CableTier getCableTier() return this.getDelegateTransmitter().getCableTier(); } + @Override + default long getMaxTransfer() + { + return this.getDelegateTransmitter().getMaxTransfer(); + } + + @Override + default int getMaxDistance() + { + return this.getDelegateTransmitter().getMaxDistance(); + } + + @Override + default float getMaxLoss() + { + return this.getDelegateTransmitter().getMaxLoss(); + } + @Override default long transmitEnergy(long maxTransmit) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index aedc914a..b6f42a37 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -11,6 +11,7 @@ import net.minecraft.nbt.CompoundTag; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import java.util.List; import java.util.Optional; @@ -22,11 +23,11 @@ public class TeslaTransmitterComponent implements IComponent.ServerOnly, TeslaTr private final MIEnergyStorage energyStorage; - private final Supplier cableTier; + private final Supplier limits; private Optional networkKey = Optional.empty(); - public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs, Supplier cableTier) + public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs, Supplier limits) { this.machine = machine; @@ -75,7 +76,7 @@ public boolean canExtract() } }; - this.cableTier = cableTier; + this.limits = limits; } @Override @@ -105,7 +106,25 @@ public WorldPos getPosition() @Override public CableTier getCableTier() { - return cableTier.get(); + return limits.get().getCableTier(); + } + + @Override + public long getMaxTransfer() + { + return limits.get().getMaxTransfer(); + } + + @Override + public int getMaxDistance() + { + return limits.get().getMaxDistance(); + } + + @Override + public float getMaxLoss() + { + return limits.get().getMaxLoss(); } @Override From 95e3b3b0f7b6c955fe4ba536e97e092ebcba1f99 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 2 Oct 2024 03:11:03 -0400 Subject: [PATCH 034/159] Use new parser and modular multiblock gui api stuff --- .../TeslaReceiverMachineBlockEntity.java | 35 +++++++++++-------- .../teslatower/TeslaTowerBlockEntity.java | 26 +++++++------- 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 44e8ff67..e3e7f02f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -13,8 +13,6 @@ import aztech.modern_industrialization.machines.guicomponents.SlotPanel; import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.util.Tickable; -import com.google.common.collect.Lists; -import net.minecraft.network.chat.Style; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -24,11 +22,11 @@ import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; -import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine; - -import java.util.List; import static net.swedz.extended_industrialization.EITooltips.*; +import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; +import static net.swedz.tesseract.neoforge.tooltip.Parser.*; public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable { @@ -68,35 +66,42 @@ protected void setCasingStack(ItemStack stack) this.registerComponents(isActive, redstoneControl, casing, receiver); - this.registerGuiComponent(new ModularMultiblockGui.Server(0, 60, () -> + this.registerGuiComponent(new ModularMultiblockGui.Server(0, 60, (content) -> { - List text = Lists.newArrayList(); - if(this.hasNetwork()) { TeslaNetwork network = this.getNetwork(); - text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_LINKED.text(TESLA_NETWORK_KEY_PARSER.parse(this.getNetworkKey()).copy().setStyle(Style.EMPTY)), 0xFFFFFF, true)); + content.add(EIText.TESLA_RECEIVER_LINKED.arg(this.getNetworkKey(), TESLA_NETWORK_KEY_PARSER), WHITE, true); if(network.isTransmitterLoaded()) { ReceiveCheckResult result = this.checkReceiveFrom(network); - if(result.type() == ReceiveCheckResult.Type.MISMATCHING_VOLTAGE) + if(result.isSuccess()) + { + content.add(EIText.TESLA_RECEIVER_LOSS.arg(result.loss(), 1, FLOAT_PERCENTAGE_SPACED)); + } + else { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE.text(network.getCableTier().shortEnglishName()), 0xFF0000)); + if(result.type() == ReceiveCheckResult.Type.MISMATCHING_VOLTAGE) + { + content.add(EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE.arg(network.getCableTier(), CABLE_TIER_SHORT), RED); + } + else if(result.type() == ReceiveCheckResult.Type.TOO_FAR) + { + content.add(EIText.TESLA_RECEIVER_TOO_FAR, RED); + } } } else { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_UNLOADED_TRANSMITTER.text(), 0xFF0000)); + content.add(EIText.TESLA_RECEIVER_UNLOADED_TRANSMITTER, RED); } } else { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_RECEIVER_NO_LINK.text(), 0xFF0000)); + content.add(EIText.TESLA_RECEIVER_NO_LINK, RED); } - - return text; })); this.registerGuiComponent(new SlotPanel.Server(this) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 5d7e2037..3a6aea53 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -22,11 +22,13 @@ import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; -import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine; import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; import java.util.List; +import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; + public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate { private final RedstoneControlComponent redstoneControl; @@ -54,11 +56,9 @@ public TeslaTowerBlockEntity(BEP bep) this.registerComponents(redstoneControl); - this.registerGuiComponent(new ModularMultiblockGui.Server(0, ModularMultiblockGui.HEIGHT, () -> + this.registerGuiComponent(new ModularMultiblockGui.Server(0, ModularMultiblockGui.HEIGHT, (content) -> { - List text = Lists.newArrayList(); - - text.add(this.isShapeValid() ? new ModularMultiblockGuiLine(MIText.MultiblockShapeValid.text()) : new ModularMultiblockGuiLine(MIText.MultiblockShapeInvalid.text(), 0xFF0000)); + content.add((this.isShapeValid() ? MIText.MultiblockShapeValid : MIText.MultiblockShapeInvalid).text(), this.isShapeValid() ? WHITE : RED); if(this.isShapeValid()) { @@ -68,36 +68,34 @@ public TeslaTowerBlockEntity(BEP bep) if(network.isTransmitterLoaded()) { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_VOLTAGE.text(network.getCableTier().shortEnglishName()))); + content.add(EIText.TESLA_TRANSMITTER_VOLTAGE.arg(network.getCableTier(), CABLE_TIER_SHORT)); - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_RECEIVERS.text(network.receiverCount()))); + content.add(EIText.TESLA_TRANSMITTER_RECEIVERS.arg(network.receiverCount())); } else { if(this.getCableTier() == null) { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_ENERGY_HATCHES.text(), 0xFF0000)); + content.add(EIText.TESLA_TRANSMITTER_NO_ENERGY_HATCHES, RED); } else { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_NETWORK.text(), 0xFF0000)); + content.add(EIText.TESLA_TRANSMITTER_NO_NETWORK, RED); } } } else { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_NO_NETWORK.text(), 0xFF0000)); + content.add(EIText.TESLA_TRANSMITTER_NO_NETWORK, RED); } } else { - if(this.getShapeMatcher().hasMismatchingHatches()) + if(this.getShapeMatcher() != null && this.getShapeMatcher().hasMismatchingHatches()) { - text.add(new ModularMultiblockGuiLine(EIText.TESLA_TRANSMITTER_MISMATCHING_HATCHES.text(), 0xFF0000, true)); + content.add(EIText.TESLA_TRANSMITTER_MISMATCHING_HATCHES, RED, true); } } - - return text; })); this.registerGuiComponent(SHAPES.createShapeSelectionGuiComponent(this, activeShape, true)); From 3c88916afe8ca5edd7bb7e5e667383b49f5c1d68 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 2 Oct 2024 14:55:10 -0400 Subject: [PATCH 035/159] Add dimension check to WorldPos --- .../net/swedz/extended_industrialization/api/WorldPos.java | 7 ++++++- .../component/tesla/receiver/TeslaReceiverComponent.java | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java index 397881f4..f21e0951 100644 --- a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java +++ b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java @@ -57,9 +57,14 @@ public boolean isTicking() level.shouldTickBlocksAt(pos); } + public boolean isSameDimension(WorldPos other) + { + return dimension.equals(other.dimension()); + } + public double distanceSqr(WorldPos other) { - if(!dimension.equals(other.dimension())) + if(!this.isSameDimension(other)) { throw new IllegalArgumentException("Mismatching dimensions in distance check"); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index a2b54ac9..a67fef8c 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -92,7 +92,7 @@ public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { WorldPos transmitterPos = network.getTransmitter().getPosition(); WorldPos receiverPos = this.getPosition(); - if(!transmitterPos.dimension().equals(receiverPos.dimension())) + if(!transmitterPos.isSameDimension(receiverPos)) { // TODO check for interdimensional upgrade in the transmitter return ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); From b87878f56056b1222318b76b1b4028ca190931d7 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 2 Oct 2024 15:35:30 -0400 Subject: [PATCH 036/159] Improve multiblock tiered shapes building api to allow for non-datamap based tiers --- .../datamap/TeslaTowerTierData.java | 14 ------- .../teslatower/TeslaTowerShapes.java | 14 ++++--- .../DataMapMultiblockTieredShapes.java | 32 +++++++++++++++ .../tieredshapes/MultiblockTieredShapes.java | 40 +++++++++---------- 4 files changed, 60 insertions(+), 40 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMapMultiblockTieredShapes.java diff --git a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java index f0b0a72a..a733833e 100644 --- a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java +++ b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java @@ -2,15 +2,11 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.block.Block; -import net.swedz.extended_industrialization.EIDataMaps; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; import net.swedz.extended_industrialization.machines.tieredshapes.DataMultiblockTier; -import java.util.Map; - public record TeslaTowerTierData(long maxTransfer, int maxDistance, float maxLoss) implements DataMultiblockTier { public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance @@ -26,14 +22,4 @@ public TeslaTowerTier wrap(ResourceKey key) { return new TeslaTowerTier(key.location(), maxTransfer, maxDistance, maxLoss); } - - public static TeslaTowerTierData getFor(Block block) - { - return BuiltInRegistries.BLOCK.getData(EIDataMaps.TESLA_TOWER_TIER, BuiltInRegistries.BLOCK.getResourceKey(block).orElseThrow()); - } - - public static Map, TeslaTowerTierData> getAll() - { - return BuiltInRegistries.BLOCK.getDataMap(EIDataMaps.TESLA_TOWER_TIER); - } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index faf7f82b..4ac206f0 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -10,18 +10,18 @@ import net.swedz.extended_industrialization.EIBlocks; import net.swedz.extended_industrialization.EIDataMaps; import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; -import net.swedz.extended_industrialization.machines.tieredshapes.MultiblockTieredShapes; +import net.swedz.extended_industrialization.machines.tieredshapes.DataMapMultiblockTieredShapes; import java.util.Comparator; -public final class TeslaTowerShapes extends MultiblockTieredShapes +public final class TeslaTowerShapes extends DataMapMultiblockTieredShapes { TeslaTowerShapes() { super( EI.id("tesla_tower"), - EIDataMaps.TESLA_TOWER_TIER, - Comparator.comparing(TeslaTowerTier::maxDistance) + Comparator.comparing(TeslaTowerTier::maxDistance), + EIDataMaps.TESLA_TOWER_TIER ); } @@ -101,9 +101,9 @@ private String[][] pattern() } @Override - protected void invalidateShapeTemplates() + protected ShapeTemplate[] buildShapeTemplates() { - shapeTemplates = new ShapeTemplate[tiers.size()]; + ShapeTemplate[] shapeTemplates = new ShapeTemplate[tiers.size()]; for(int i = 0; i < tiers.size(); i++) { @@ -120,5 +120,7 @@ protected void invalidateShapeTemplates() builder.key('c', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); // TODO secondary coil shapeTemplates[i] = builder.build(); } + + return shapeTemplates; } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMapMultiblockTieredShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMapMultiblockTieredShapes.java new file mode 100644 index 00000000..d7f99d54 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMapMultiblockTieredShapes.java @@ -0,0 +1,32 @@ +package net.swedz.extended_industrialization.machines.tieredshapes; + +import com.google.common.collect.Lists; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.neoforged.neoforge.registries.datamaps.DataMapType; + +import java.util.Comparator; +import java.util.List; + +public abstract class DataMapMultiblockTieredShapes> extends MultiblockTieredShapes +{ + private final DataMapType tierDataMap; + + public DataMapMultiblockTieredShapes(ResourceLocation machineId, Comparator tierSort, DataMapType tierDataMap) + { + super(machineId, tierSort); + this.tierDataMap = tierDataMap; + } + + @Override + protected List buildTiers() + { + List newTiers = Lists.newArrayList(); + + BuiltInRegistries.BLOCK.getDataMap(tierDataMap).forEach((block, tier) -> + newTiers.add(tier.wrap(block))); + + return newTiers; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java index 22981d56..46649ec3 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java @@ -7,14 +7,11 @@ import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.Block; import net.neoforged.bus.api.EventPriority; import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.registries.datamaps.DataMapType; import net.neoforged.neoforge.registries.datamaps.DataMapsUpdatedEvent; import net.swedz.tesseract.neoforge.compat.mi.helper.CommonGuiComponents; @@ -25,60 +22,63 @@ import java.util.function.Function; import java.util.stream.Collectors; -public abstract class MultiblockTieredShapes> +public abstract class MultiblockTieredShapes { - protected final ResourceLocation machineId; - protected final DataMapType tierDataMap; - protected final Comparator tierSort; + protected final ResourceLocation machineId; + + private final Comparator tierSort; protected List tiers = List.of(); protected Map tiersByBlock = Collections.unmodifiableMap(Maps.newHashMap()); - protected ShapeTemplate[] shapeTemplates = new ShapeTemplate[0]; + private ShapeTemplate[] shapeTemplates = new ShapeTemplate[0]; - public MultiblockTieredShapes(ResourceLocation machineId, DataMapType tierDataMap, Comparator tierSort) + public MultiblockTieredShapes(ResourceLocation machineId, Comparator tierSort) { this.machineId = machineId; - this.tierDataMap = tierDataMap; this.tierSort = tierSort; } - public ResourceLocation machineId() + public final ResourceLocation machineId() { return machineId; } - public List tiers() + public final List tiers() { return tiers; } - public Map tiersByBlock() + public final Map tiersByBlock() { return tiersByBlock; } - public ShapeTemplate[] shapeTemplates() + public final ShapeTemplate[] shapeTemplates() { return shapeTemplates; } + protected abstract List buildTiers(); + private void invalidateTiers() { List newTiers = Lists.newArrayList(); - - BuiltInRegistries.BLOCK.getDataMap(tierDataMap).forEach((block, tier) -> - newTiers.add(tier.wrap(block))); - + newTiers.addAll(this.buildTiers()); newTiers.sort(tierSort); tiers = Collections.unmodifiableList(newTiers); tiersByBlock = tiers.stream().collect(Collectors.toMap(MultiblockTier::blockId, Function.identity())); } - protected abstract void invalidateShapeTemplates(); + protected abstract ShapeTemplate[] buildShapeTemplates(); + + private void invalidateShapeTemplates() + { + shapeTemplates = this.buildShapeTemplates(); + } - private void invalidateRecipeViewerShapes() + protected void invalidateRecipeViewerShapes() { ReiMachineRecipes.multiblockShapes.removeIf((e) -> e.machine().equals(machineId)); int index = 0; From fd21dea1528d8636ca7bc1c4990eda747bb997e7 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 2 Oct 2024 15:43:48 -0400 Subject: [PATCH 037/159] Safer shape building --- .../blockentity/multiblock/teslatower/TeslaTowerShapes.java | 6 +----- .../machines/tieredshapes/MultiblockTieredShapes.java | 5 +++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index 4ac206f0..7e128640 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -101,10 +101,8 @@ private String[][] pattern() } @Override - protected ShapeTemplate[] buildShapeTemplates() + protected void buildShapeTemplates(ShapeTemplate[] shapeTemplates) { - ShapeTemplate[] shapeTemplates = new ShapeTemplate[tiers.size()]; - for(int i = 0; i < tiers.size(); i++) { TeslaTowerTier tier = tiers.get(i); @@ -120,7 +118,5 @@ protected ShapeTemplate[] buildShapeTemplates() builder.key('c', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); // TODO secondary coil shapeTemplates[i] = builder.build(); } - - return shapeTemplates; } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java index 46649ec3..141638cd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java @@ -71,11 +71,12 @@ private void invalidateTiers() tiersByBlock = tiers.stream().collect(Collectors.toMap(MultiblockTier::blockId, Function.identity())); } - protected abstract ShapeTemplate[] buildShapeTemplates(); + protected abstract void buildShapeTemplates(ShapeTemplate[] shapeTemplates); private void invalidateShapeTemplates() { - shapeTemplates = this.buildShapeTemplates(); + shapeTemplates = new ShapeTemplate[tiers.size()]; + this.buildShapeTemplates(shapeTemplates); } protected void invalidateRecipeViewerShapes() From 26217e9f61c1365c14356cb5e42eec270e363c71 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 2 Oct 2024 16:49:40 -0400 Subject: [PATCH 038/159] Register transmitter component --- .../multiblock/teslatower/TeslaTowerBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 3a6aea53..590f4d09 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -54,7 +54,7 @@ public TeslaTowerBlockEntity(BEP bep) () -> TeslaTransferLimits.of(cableTier, SHAPES.tiers().get(activeShape.getActiveShapeIndex())) ); - this.registerComponents(redstoneControl); + this.registerComponents(redstoneControl, upgrade, transmitter); this.registerGuiComponent(new ModularMultiblockGui.Server(0, ModularMultiblockGui.HEIGHT, (content) -> { From b10b1d829c51d071bf7f6d53279546281314170a Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 00:52:00 -0400 Subject: [PATCH 039/159] Modular slot panel api --- .../compat/mi/EIMIHookListener.java | 4 + .../modularslots/ModularSlotPanel.java | 260 ++++++++++++++++++ .../modularslots/ModularSlotPanelClient.java | 154 +++++++++++ 3 files changed, 418 insertions(+) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java diff --git a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java index 4d680668..99343394 100644 --- a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java +++ b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java @@ -3,6 +3,8 @@ import net.swedz.extended_industrialization.EIMachines; import net.swedz.extended_industrialization.EITooltips; import net.swedz.extended_industrialization.compat.viewer.common.FluidFertilizerCategory; +import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; +import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanelClient; import net.swedz.extended_industrialization.machines.guicomponent.processingarraymachineslot.ProcessingArrayMachineSlot; import net.swedz.extended_industrialization.machines.guicomponent.processingarraymachineslot.ProcessingArrayMachineSlotClient; import net.swedz.extended_industrialization.machines.guicomponent.solarefficiency.SolarEfficiencyBar; @@ -35,6 +37,8 @@ public void clientGuiComponents(ClientGuiComponentsMIHookContext hook) hook.register(SolarEfficiencyBar.ID, SolarEfficiencyBarClient::new); hook.register(ProcessingArrayMachineSlot.ID, ProcessingArrayMachineSlotClient::new); hook.register(UniversalTransformerSlots.ID, UniversalTransformerSlotsClient::new); + // TODO move to tesseract + hook.register(ModularSlotPanel.ID, ModularSlotPanelClient::new); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java new file mode 100644 index 00000000..9e372dad --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java @@ -0,0 +1,260 @@ +package net.swedz.extended_industrialization.machines.guicomponent.modularslots; + +import aztech.modern_industrialization.MI; +import aztech.modern_industrialization.inventory.HackySlot; +import aztech.modern_industrialization.inventory.SlotGroup; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.components.CasingComponent; +import aztech.modern_industrialization.machines.components.OverdriveComponent; +import aztech.modern_industrialization.machines.components.RedstoneControlComponent; +import aztech.modern_industrialization.machines.components.UpgradeComponent; +import aztech.modern_industrialization.machines.gui.GuiComponent; +import aztech.modern_industrialization.machines.gui.MachineGuiParameters; +import aztech.modern_industrialization.machines.guicomponents.SlotPanel; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.machines.component.itemslot.SimpleItemStackComponent; + +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; +import java.util.function.Supplier; + +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; + +public final class ModularSlotPanel +{ + public static final ResourceLocation ID = EI.id("modular_slot_panel"); + + private static final Map SLOTS = Maps.newHashMap(); + + public static final ResourceLocation REDSTONE_MODULE = registerMISlot("redstone_module", SlotPanel.SlotType.REDSTONE_MODULE); + public static final ResourceLocation UPGRADES = registerMISlot("upgrades", SlotPanel.SlotType.UPGRADES); + public static final ResourceLocation CASINGS = registerMISlot("casings", SlotPanel.SlotType.CASINGS); + public static final ResourceLocation OVERDRIVE_MODULE = registerMISlot("overdrive_module", SlotPanel.SlotType.OVERDRIVE_MODULE); + + public static ResourceLocation registerSlot(ResourceLocation id, SlotGroup group, + int stackLimit, Predicate insertionChecker, + int u, int v, + Supplier tooltip) + { + if(SLOTS.containsKey(id)) + { + throw new IllegalArgumentException("There is already a slot type registered for the id '" + id.toString() + "'"); + } + SLOTS.put(id, new Slot(id, group, stackLimit, insertionChecker, u, v, tooltip)); + return id; + } + + private static ResourceLocation registerMISlot(String name, SlotPanel.SlotType slotType) + { + return registerSlot(MI.id(name), slotType.group, slotType.slotLimit, slotType.insertionChecker, slotType.u, slotType.v, () -> line(slotType.tooltip)); + } + + static Slot getSlot(ResourceLocation id) + { + Slot slot = SLOTS.get(id); + if(slot == null) + { + throw new IllegalArgumentException("Could not find slot with id '" + id.toString() + "'"); + } + return slot; + } + + static int getSlotX(MachineGuiParameters guiParameters) + { + return guiParameters.backgroundWidth + 6; + } + + static int getSlotY(int index) + { + return 19 + (index * 20); + } + + public static final class Server implements GuiComponent.Server + { + private final MachineBlockEntity machine; + + private final int offsetY; + + private final List slotIds = Lists.newArrayList(); + private final List slots = Lists.newArrayList(); + private final List> stackLimits = Lists.newArrayList(); + private final List slotComponents = Lists.newArrayList(); + + public Server(MachineBlockEntity machine, int offsetY) + { + this.machine = machine; + this.offsetY = offsetY; + } + + private Server with(Slot slot, Supplier stackLimit, SimpleItemStackComponent component) + { + slotIds.add(slot.id()); + slots.add(slot); + stackLimits.add(stackLimit); + slotComponents.add(component); + return this; + } + + public Server with(ResourceLocation slotId, Supplier stackLimit, SimpleItemStackComponent component) + { + return this.with(getSlot(slotId), stackLimit, component); + } + + private Server with(Slot slot, SimpleItemStackComponent component) + { + return this.with(slot, slot::stackLimit, component); + } + + public Server with(ResourceLocation slotId, SimpleItemStackComponent component) + { + return this.with(getSlot(slotId), component); + } + + public Server withRedstoneModule(RedstoneControlComponent component) + { + return this.with(REDSTONE_MODULE, SimpleItemStackComponent.wrap(component)); + } + + public Server withUpgrades(UpgradeComponent component) + { + return this.with(UPGRADES, SimpleItemStackComponent.wrap(component)); + } + + public Server withCasings(CasingComponent component) + { + return this.with(CASINGS, SimpleItemStackComponent.wrap(component)); + } + + public Server withOverdrive(OverdriveComponent component) + { + return this.with(OVERDRIVE_MODULE, SimpleItemStackComponent.wrap(component)); + } + + @Override + public Data copyData() + { + return new Data(stackLimits); + } + + @Override + public boolean needsSync(Data cachedData) + { + return !cachedData.equals(this.copyData()); + } + + @Override + public void writeInitialData(RegistryFriendlyByteBuf buf) + { + buf.writeVarInt(offsetY); + + buf.writeVarInt(slots.size()); + for(ResourceLocation slotId : slotIds) + { + buf.writeResourceLocation(slotId); + } + + this.writeCurrentData(buf); + } + + @Override + public void writeCurrentData(RegistryFriendlyByteBuf buf) + { + for(Supplier limit : stackLimits) + { + buf.writeVarInt(limit.get()); + } + } + + @Override + public void setupMenu(GuiComponent.MenuFacade menu) + { + for(int i = 0; i < slots.size(); i++) + { + Slot slot = slots.get(i); + Supplier stackLimit = stackLimits.get(i); + SimpleItemStackComponent component = slotComponents.get(i); + + menu.addSlotToMenu(new HackySlot(getSlotX(machine.guiParams), getSlotY(i)) + { + @Override + protected ItemStack getRealStack() + { + return component.getStack().copy(); + } + + @Override + protected void setRealStack(ItemStack stack) + { + component.setStackServer(machine, stack); + } + + @Override + public boolean mayPlace(ItemStack stack) + { + return slot.insertionChecker().test(stack); + } + + @Override + public int getMaxStackSize() + { + return stackLimit.get(); + } + }, slot.group()); + } + } + + @Override + public ResourceLocation getId() + { + return ID; + } + } + + public record Data(List> stackLimits) + { + @Override + public boolean equals(Object o) + { + if(this == o) + { + return true; + } + if(o == null || this.getClass() != o.getClass()) + { + return false; + } + + Data other = (Data) o; + + if(stackLimits.size() != other.stackLimits().size()) + { + return false; + } + for(int i = 0; i < stackLimits.size(); i++) + { + if(!stackLimits.get(i).equals(other.stackLimits.get(i))) + { + return false; + } + } + + return true; + } + } + + public record Slot( + ResourceLocation id, SlotGroup group, + int stackLimit, Predicate insertionChecker, + int u, int v, + Supplier tooltip + ) + { + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java new file mode 100644 index 00000000..16c69162 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java @@ -0,0 +1,154 @@ +package net.swedz.extended_industrialization.machines.guicomponent.modularslots; + +import aztech.modern_industrialization.inventory.BackgroundRenderedSlot; +import aztech.modern_industrialization.machines.gui.ClientComponentRenderer; +import aztech.modern_industrialization.machines.gui.GuiComponent; +import aztech.modern_industrialization.machines.gui.GuiComponentClient; +import aztech.modern_industrialization.machines.gui.MachineScreen; +import aztech.modern_industrialization.util.Rectangle; +import com.google.common.collect.Lists; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.world.Container; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; + +import java.util.List; +import java.util.function.Supplier; + +public final class ModularSlotPanelClient implements GuiComponentClient +{ + private final int offsetY; + + private final List slots = Lists.newArrayList(); + private final List stackLimits = Lists.newArrayList(); + + public ModularSlotPanelClient(RegistryFriendlyByteBuf buf) + { + offsetY = buf.readVarInt(); + + int count = buf.readVarInt(); + for(int i = 0; i < count; i++) + { + slots.add(ModularSlotPanel.getSlot(buf.readResourceLocation())); + } + + this.readCurrentData(buf); + } + + @Override + public void readCurrentData(RegistryFriendlyByteBuf buf) + { + stackLimits.clear(); + for(int i = 0; i < slots.size(); i++) + { + stackLimits.add(buf.readVarInt()); + } + } + + @Override + public void setupMenu(GuiComponent.MenuFacade menu) + { + for(int i = 0; i < slots.size(); i++) + { + int slotIndex = i; + ModularSlotPanel.Slot slot = slots.get(slotIndex); + Supplier stackLimit = () -> stackLimits.get(slotIndex); + + class ClientSlot extends SlotWithBackground implements SlotTooltip + { + public ClientSlot() + { + super(new SimpleContainer(1), 0, ModularSlotPanel.getSlotX(menu.getGuiParams()), ModularSlotPanel.getSlotY(slotIndex) + offsetY); + } + + @Override + public boolean mayPlace(ItemStack stack) + { + return slot.insertionChecker().test(stack); + } + + @Override + public int getMaxStackSize() + { + return stackLimit.get(); + } + + @Override + public int getBackgroundU() + { + return this.hasItem() ? 0 : slot.u(); + } + + @Override + public int getBackgroundV() + { + return this.hasItem() ? 0 : slot.v(); + } + + @Override + public Component getTooltip() + { + return slot.tooltip().get(); + } + } + menu.addSlotToMenu(new ClientSlot(), slot.group()); + } + } + + @Override + public ClientComponentRenderer createRenderer(MachineScreen machineScreen) + { + return new ClientComponentRenderer() + { + private Rectangle getBox(int leftPos, int topPos) + { + return new Rectangle(leftPos + machineScreen.getGuiParams().backgroundWidth, topPos + 10 + offsetY, 31, 14 + (slots.size() * 20)); + } + + @Override + public void addExtraBoxes(List rectangles, int leftPos, int topPos) + { + rectangles.add(this.getBox(leftPos, topPos)); + } + + @Override + public void renderBackground(GuiGraphics graphics, int x, int y) + { + Rectangle box = this.getBox(x, y); + int textureX = box.x() - x - box.w(); + graphics.blit(MachineScreen.BACKGROUND, box.x(), box.y(), textureX, 0, box.w(), box.h() - 4); + graphics.blit(MachineScreen.BACKGROUND, box.x(), box.y() + box.h() - 4, textureX, 252, box.w(), 4); + } + + @Override + public void renderTooltip(MachineScreen screen, Font font, GuiGraphics graphics, int x, int y, int cursorX, int cursorY) + { + Slot slot = screen.getFocusedSlot(); + if(slot instanceof SlotTooltip tooltip) + { + if(!screen.getFocusedSlot().hasItem()) + { + graphics.renderTooltip(font, tooltip.getTooltip(), cursorX, cursorY); + } + } + } + }; + } + + interface SlotTooltip + { + Component getTooltip(); + } + + public static class SlotWithBackground extends Slot implements BackgroundRenderedSlot + { + public SlotWithBackground(Container container, int index, int x, int y) + { + super(container, index, x, y); + } + } +} From 9594e72f69c7f8128c0f01b0a7d676849cab6fbc Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 00:52:23 -0400 Subject: [PATCH 040/159] Simple item stack component --- .../itemslot/SimpleItemStackComponent.java | 256 ++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java new file mode 100644 index 00000000..78a8a4d1 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java @@ -0,0 +1,256 @@ +package net.swedz.extended_industrialization.machines.component.itemslot; + +import aztech.modern_industrialization.machines.IComponent; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.components.CasingComponent; +import aztech.modern_industrialization.machines.components.DropableComponent; +import aztech.modern_industrialization.machines.components.OverdriveComponent; +import aztech.modern_industrialization.machines.components.RedstoneControlComponent; +import aztech.modern_industrialization.machines.components.UpgradeComponent; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; + +public class SimpleItemStackComponent implements IComponent, DropableComponent +{ + protected final String stackTagKey; + + protected ItemStack stack = ItemStack.EMPTY; + + public SimpleItemStackComponent(String stackTagKey) + { + this.stackTagKey = stackTagKey; + } + + public ItemStack getStack() + { + return stack; + } + + public void setStackServer(MachineBlockEntity machine, ItemStack stack) + { + this.stack = stack; + machine.setChanged(); + machine.sync(); + } + + @Override + public ItemStack getDrop() + { + return stack; + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + tag.put(stackTagKey, stack.saveOptional(registries)); + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + stack = ItemStack.parseOptional(registries, tag.getCompound(stackTagKey)); + } + + @Override + public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + } + + public static SimpleItemStackComponent wrap(RedstoneControlComponent component) + { + return new SimpleItemStackComponent("redstoneModuleStack") + { + @Override + public ItemStack getStack() + { + return component.getDrop(); + } + + @Override + public void setStackServer(MachineBlockEntity machine, ItemStack stack) + { + component.setStackServer(machine, stack); + } + + @Override + public ItemStack getDrop() + { + return component.getDrop(); + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.writeNbt(tag, registries); + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + component.readNbt(tag, registries, isUpgradingMachine); + } + + @Override + public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.writeClientNbt(tag, registries); + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.readClientNbt(tag, registries); + } + }; + } + + public static SimpleItemStackComponent wrap(UpgradeComponent component) + { + return new SimpleItemStackComponent("upgradesItemStack") + { + @Override + public ItemStack getStack() + { + return component.getDrop(); + } + + @Override + public void setStackServer(MachineBlockEntity machine, ItemStack stack) + { + component.setStackServer(machine, stack); + } + + @Override + public ItemStack getDrop() + { + return component.getDrop(); + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.writeNbt(tag, registries); + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + component.readNbt(tag, registries, isUpgradingMachine); + } + + @Override + public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.writeClientNbt(tag, registries); + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.readClientNbt(tag, registries); + } + }; + } + + public static SimpleItemStackComponent wrap(OverdriveComponent component) + { + return new SimpleItemStackComponent("overdriveModuleStack") + { + @Override + public ItemStack getStack() + { + return component.getDrop(); + } + + @Override + public void setStackServer(MachineBlockEntity machine, ItemStack stack) + { + component.setStackServer(machine, stack); + } + + @Override + public ItemStack getDrop() + { + return component.getDrop(); + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.writeNbt(tag, registries); + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + component.readNbt(tag, registries, isUpgradingMachine); + } + + @Override + public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.writeClientNbt(tag, registries); + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.readClientNbt(tag, registries); + } + }; + } + + public static SimpleItemStackComponent wrap(CasingComponent component) + { + return new SimpleItemStackComponent("casing") + { + @Override + public ItemStack getStack() + { + return component.getDrop(); + } + + @Override + public void setStackServer(MachineBlockEntity machine, ItemStack stack) + { + component.setCasingServer(machine, stack); + } + + @Override + public ItemStack getDrop() + { + return component.getDrop(); + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.writeNbt(tag, registries); + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + component.readNbt(tag, registries, isUpgradingMachine); + } + + @Override + public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.writeClientNbt(tag, registries); + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + component.readClientNbt(tag, registries); + } + }; + } +} From 5fa2413e464f0223aa620c3bb104a56537349a2b Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 00:52:52 -0400 Subject: [PATCH 041/159] Tesla tower upgrade component --- .../lang/en_us.json | 2 ++ .../swedz/extended_industrialization/EI.java | 2 ++ .../extended_industrialization/EIItems.java | 2 ++ .../extended_industrialization/EIText.java | 1 + .../teslatower/TeslaTowerBlockEntity.java | 25 +++++++++++-- .../itemslot/TeslaTowerUpgradeComponent.java | 16 +++++++++ .../component/tesla/TeslaNetwork.java | 2 +- .../tesla/receiver/PlayerTeslaReceiver.java | 1 + .../receiver/TeslaReceiverComponent.java | 19 +++++++--- .../tesla/transmitter/TeslaTransmitter.java | 8 +++++ .../TeslaTransmitterComponent.java | 7 ++++ .../guicomponent/EIModularSlotPanelSlots.java | 36 +++++++++++++++++++ 12 files changed, 113 insertions(+), 8 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 87b62792..8d22279f 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -75,6 +75,7 @@ "item.extended_industrialization.steel_combine": "Steel Combine", "item.extended_industrialization.tesla_calibrator": "Tesla Calibrator", "item.extended_industrialization.tesla_carry_on_receiver": "Tesla Carry-On Receiver", + "item.extended_industrialization.tesla_interdimensional_upgrade": "Tesla Interdimensional Upgrade", "item.extended_industrialization.tin_can": "Tin Can", "item.extended_industrialization.ultimate_laser_drill": "Ultimate Laser Drill", "itemGroup.extended_industrialization.extended_industrialization": "Extended Industrialization", @@ -216,6 +217,7 @@ "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_receiver_too_far": "Transmitter is too far", "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", + "text.extended_industrialization.tesla_tower_upgrade": "Add tesla upgrades to increase maximum range.", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", "text.extended_industrialization.tesla_transmitter_no_energy_hatches": "No energy hatches provided", "text.extended_industrialization.tesla_transmitter_no_network": "No network found", diff --git a/src/main/java/net/swedz/extended_industrialization/EI.java b/src/main/java/net/swedz/extended_industrialization/EI.java index 4c795696..4e4d414b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EI.java +++ b/src/main/java/net/swedz/extended_industrialization/EI.java @@ -17,6 +17,7 @@ import net.swedz.extended_industrialization.datagen.DatagenDelegator; import net.swedz.extended_industrialization.machines.blockentity.multiblock.LargeElectricFurnaceBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; +import net.swedz.extended_industrialization.machines.guicomponent.EIModularSlotPanelSlots; import net.swedz.extended_industrialization.network.EIPackets; import net.swedz.tesseract.neoforge.api.MCIdentifiable; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; @@ -65,6 +66,7 @@ public EI(IEventBus bus, ModContainer container) EIBlocks.init(bus); EIFluids.init(bus); EIOtherRegistries.init(bus); + EIModularSlotPanelSlots.init(); bus.register(new DatagenDelegator()); diff --git a/src/main/java/net/swedz/extended_industrialization/EIItems.java b/src/main/java/net/swedz/extended_industrialization/EIItems.java index e5b48839..f165e4dd 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIItems.java +++ b/src/main/java/net/swedz/extended_industrialization/EIItems.java @@ -72,6 +72,8 @@ public static void init(IEventBus bus) public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder TESLA_CARRY_ON_RECEIVER = create("tesla_carry_on_receiver", "Tesla Carry-On Receiver", TeslaCarryOnReceiverItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_INTERDIMENSIONAL_UPGRADE = create("tesla_interdimensional_upgrade", "Tesla Interdimensional Upgrade", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.stacksTo(1).rarity(Rarity.EPIC)).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder NETHERITE_ROTARY_BLADE = create("netherite_rotary_blade", "Netherite Rotary Blade", Item::new, EISortOrder.PARTS).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder STEEL_COMBINE = create("steel_combine", "Steel Combine", Item::new, EISortOrder.PARTS).withModel(CommonModelBuilders::generated).register(); diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 7dbc5f25..9894ac5f 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -119,6 +119,7 @@ public enum EIText implements TranslatableTextEnum TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), TESLA_RECEIVER_TOO_FAR("Transmitter is too far"), TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), + TESLA_TOWER_UPGRADE("Add tesla upgrades to increase maximum range."), TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), TESLA_TRANSMITTER_NO_ENERGY_HATCHES("No energy hatches provided"), TESLA_TRANSMITTER_NO_NETWORK("No network found"), diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 590f4d09..e7275d2e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -5,22 +5,26 @@ import aztech.modern_industrialization.api.machine.component.EnergyAccess; import aztech.modern_industrialization.api.machine.holder.EnergyListComponentHolder; import aztech.modern_industrialization.machines.BEP; +import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.blockentities.hatches.EnergyHatch; import aztech.modern_industrialization.machines.components.EnergyComponent; import aztech.modern_industrialization.machines.components.RedstoneControlComponent; import aztech.modern_industrialization.machines.gui.MachineGuiParameters; -import aztech.modern_industrialization.machines.guicomponents.SlotPanel; import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; import aztech.modern_industrialization.machines.multiblocks.ShapeMatcher; import com.google.common.collect.Lists; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; +import net.swedz.extended_industrialization.machines.guicomponent.EIModularSlotPanelSlots; +import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; @@ -32,6 +36,7 @@ public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate { private final RedstoneControlComponent redstoneControl; + private final TeslaTowerUpgradeComponent upgrade; private final List energyInputs = Lists.newArrayList(); @@ -48,6 +53,19 @@ public TeslaTowerBlockEntity(BEP bep) ); redstoneControl = new RedstoneControlComponent(); + upgrade = new TeslaTowerUpgradeComponent() + { + @Override + public void setStackServer(MachineBlockEntity machine, ItemStack stack) + { + super.setStackServer(machine, stack); + + if(level != null && !level.isClientSide()) + { + transmitter.getNetwork().updateAll(); + } + } + }; transmitter = new TeslaTransmitterComponent( this, energyInputs, @@ -100,8 +118,9 @@ public TeslaTowerBlockEntity(BEP bep) this.registerGuiComponent(SHAPES.createShapeSelectionGuiComponent(this, activeShape, true)); - this.registerGuiComponent(new SlotPanel.Server(this) - .withRedstoneControl(redstoneControl)); + this.registerGuiComponent(new ModularSlotPanel.Server(this, 0) + .withRedstoneModule(redstoneControl) + .with(EIModularSlotPanelSlots.TESLA_TOWER_UPGRADE, upgrade)); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java new file mode 100644 index 00000000..d4b5eb14 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java @@ -0,0 +1,16 @@ +package net.swedz.extended_industrialization.machines.component.itemslot; + +import net.swedz.extended_industrialization.EIItems; + +public class TeslaTowerUpgradeComponent extends SimpleItemStackComponent +{ + public TeslaTowerUpgradeComponent() + { + super("tesla_tower_upgrade_stack"); + } + + public boolean isInterdimensional() + { + return this.getStack().is(EIItems.TESLA_INTERDIMENSIONAL_UPGRADE.asItem()); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index aca5fc85..2e9b4b1d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -76,7 +76,7 @@ public TeslaTransferLimits getDelegateTransferLimits() return this.getTransmitter(); } - private void updateAll() + public void updateAll() { for(TeslaReceiver receiver : loadedReceivers) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java index fb920321..097df1d3 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java @@ -28,6 +28,7 @@ public PlayerTeslaReceiver(Player player, WorldPos networkKey) @Override public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { + // TODO check distance as well return ReceiveCheckResult.success(0f); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index a67fef8c..aabc5eff 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -12,6 +12,7 @@ import net.minecraft.util.Mth; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; @@ -90,19 +91,29 @@ public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) } if(machine.hasLevel()) { - WorldPos transmitterPos = network.getTransmitter().getPosition(); + TeslaTransmitter transmitter = network.getTransmitter(); + WorldPos transmitterPos = transmitter.getPosition(); WorldPos receiverPos = this.getPosition(); + + boolean interdimensional = transmitter.isInterdimensional(); + if(!transmitterPos.isSameDimension(receiverPos)) { - // TODO check for interdimensional upgrade in the transmitter - return ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); + return interdimensional ? + ReceiveCheckResult.success(network.getMaxLoss()) : + ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); } + double distanceSqr = transmitterPos.distanceSqr(receiverPos); int maxDistanceSqr = Mth.square(network.getMaxDistance()); if(distanceSqr > maxDistanceSqr) { - return ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); + // TODO check for global upgrade + return interdimensional ? + ReceiveCheckResult.success(network.getMaxLoss()) : + ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); } + float loss = ((float) distanceSqr / maxDistanceSqr) * network.getMaxLoss(); return ReceiveCheckResult.success(loss); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index 64d182fd..6b0380f4 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -7,6 +7,8 @@ public interface TeslaTransmitter extends TeslaNetworkPart, TeslaTransferLimits { + boolean isInterdimensional(); + long transmitEnergy(long maxTransmit); long extractEnergy(long maxExtract, boolean simulate); @@ -63,6 +65,12 @@ default float getMaxLoss() return this.getDelegateTransmitter().getMaxLoss(); } + @Override + default boolean isInterdimensional() + { + return this.getDelegateTransmitter().isInterdimensional(); + } + @Override default long transmitEnergy(long maxTransmit) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index b6f42a37..d9ed935a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -10,6 +10,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; @@ -127,6 +128,12 @@ public float getMaxLoss() return limits.get().getMaxLoss(); } + @Override + public boolean isInterdimensional() + { + return machine.getComponents().mapOrDefault(TeslaTowerUpgradeComponent.class, TeslaTowerUpgradeComponent::isInterdimensional, false); + } + @Override public long transmitEnergy(long maxTransmit) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java new file mode 100644 index 00000000..087d8826 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java @@ -0,0 +1,36 @@ +package net.swedz.extended_industrialization.machines.guicomponent; + +import aztech.modern_industrialization.inventory.SlotGroup; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIItems; +import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; + +import java.util.function.Predicate; +import java.util.function.Supplier; + +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; + +public final class EIModularSlotPanelSlots +{ + public static final ResourceLocation TESLA_TOWER_UPGRADE = register( + "tesla_tower_upgrade", SlotGroup.UPGRADES, 64, + (stack) -> stack.is(EIItems.TESLA_INTERDIMENSIONAL_UPGRADE.asItem()), + 0, 80, () -> line(EIText.TESLA_TOWER_UPGRADE) + ); + + public static void init() + { + } + + private static ResourceLocation register(String name, SlotGroup group, + int stackLimit, Predicate insertionChecker, + int u, int v, + Supplier tooltip) + { + return ModularSlotPanel.registerSlot(EI.id(name), group, stackLimit, insertionChecker, u, v, tooltip); + } +} From cb90509f4cc182648e40f1e8338cace3a7a6102f Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 01:20:29 -0400 Subject: [PATCH 042/159] Also check distance for player when sending energy --- .../tesla/receiver/PlayerTeslaReceiver.java | 8 ----- .../tesla/receiver/TeslaReceiver.java | 29 +++++++++++++++++- .../receiver/TeslaReceiverComponent.java | 30 ++----------------- 3 files changed, 30 insertions(+), 37 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java index 097df1d3..4678ae61 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java @@ -7,7 +7,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.swedz.extended_industrialization.api.WorldPos; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; import net.swedz.tesseract.neoforge.compat.mi.helper.ChargeInventoryHelper; import net.swedz.tesseract.neoforge.proxy.Proxies; @@ -25,13 +24,6 @@ public PlayerTeslaReceiver(Player player, WorldPos networkKey) this.networkKey = networkKey; } - @Override - public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) - { - // TODO check distance as well - return ReceiveCheckResult.success(0f); - } - @Override public long receiveEnergy(long maxReceive, boolean simulate) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 8cac758f..079ada15 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,13 +1,40 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; import aztech.modern_industrialization.api.energy.CableTier; +import net.minecraft.util.Mth; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; public interface TeslaReceiver extends TeslaNetworkPart { - ReceiveCheckResult checkReceiveFrom(TeslaNetwork network); + default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) + { + TeslaTransmitter transmitter = network.getTransmitter(); + WorldPos transmitterPos = transmitter.getPosition(); + WorldPos receiverPos = this.getPosition(); + + if(!transmitterPos.isSameDimension(receiverPos)) + { + return transmitter.isInterdimensional() ? + ReceiveCheckResult.success(network.getMaxLoss()) : + ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); + } + + double distanceSqr = transmitterPos.distanceSqr(receiverPos); + int maxDistanceSqr = Mth.square(network.getMaxDistance()); + if(distanceSqr > maxDistanceSqr) + { + // TODO check for global upgrade + return transmitter.isInterdimensional() ? + ReceiveCheckResult.success(network.getMaxLoss()) : + ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); + } + + float loss = ((float) distanceSqr / maxDistanceSqr) * network.getMaxLoss(); + return ReceiveCheckResult.success(loss); + } long receiveEnergy(long maxReceive, boolean simulate); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index aabc5eff..654359aa 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -9,10 +9,8 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; -import net.minecraft.util.Mth; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; @@ -89,33 +87,9 @@ public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { return ReceiveCheckResult.failure(ReceiveCheckResult.Type.MISMATCHING_VOLTAGE); } - if(machine.hasLevel()) + else if(machine.hasLevel()) { - TeslaTransmitter transmitter = network.getTransmitter(); - WorldPos transmitterPos = transmitter.getPosition(); - WorldPos receiverPos = this.getPosition(); - - boolean interdimensional = transmitter.isInterdimensional(); - - if(!transmitterPos.isSameDimension(receiverPos)) - { - return interdimensional ? - ReceiveCheckResult.success(network.getMaxLoss()) : - ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); - } - - double distanceSqr = transmitterPos.distanceSqr(receiverPos); - int maxDistanceSqr = Mth.square(network.getMaxDistance()); - if(distanceSqr > maxDistanceSqr) - { - // TODO check for global upgrade - return interdimensional ? - ReceiveCheckResult.success(network.getMaxLoss()) : - ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); - } - - float loss = ((float) distanceSqr / maxDistanceSqr) * network.getMaxLoss(); - return ReceiveCheckResult.success(loss); + return TeslaReceiver.super.checkReceiveFrom(network); } else { From 4bd29ba2e4de6f6474b96ac4d6002bdc6da196e7 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 01:21:13 -0400 Subject: [PATCH 043/159] Interdimensional upgrade texture --- .../item/tesla_interdimensional_upgrade.json | 6 ++++++ .../item/tesla_interdimensional_upgrade.png | Bin 0 -> 2805 bytes 2 files changed, 6 insertions(+) create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_interdimensional_upgrade.json create mode 100644 src/main/resources/assets/extended_industrialization/textures/item/tesla_interdimensional_upgrade.png diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_interdimensional_upgrade.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_interdimensional_upgrade.json new file mode 100644 index 00000000..9dfd71c2 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/tesla_interdimensional_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "extended_industrialization:item/tesla_interdimensional_upgrade" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/textures/item/tesla_interdimensional_upgrade.png b/src/main/resources/assets/extended_industrialization/textures/item/tesla_interdimensional_upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9cc17cae7d1fd537cd38e55aebe9823885ec1b GIT binary patch literal 2805 zcmV zaB^>EX>4U6ba`-PAZ2)IW&i+q+ND=plH@21{O1&V1P}tjad<}T4fgn(fb4p7&2&#p zIm%$bl2A%1Y{q~8PV*0b11KJanSIP81bHNflfgRgrf`f$b`&s31?Ona^`o%`qo=-a@~2 zkaQ%Szgai-LNP=qj60JRi5dMwmIZ$6%TO;{|E=i#*<4ErHqr3T+kNL_rC)#Y1#R4S zsKIR7eZif4+Wxf$kii5<&g$D?Z*RW%=0@f7&-`Rt8V)aT-#rZj^JU^K4C2sn|At#xy;#)h^3>BWJ^pj{H0L_w{VO>G6UyHZ| z|A4;iE8|K?mj|w@2 zZr!mAh`6av4co!j^%{^0tOtZ)yE$Ql#nvOD2KR_9zk&8x7to#@bJEZIOAteMfHBSk z0vnwVE;=hj;v5{A08nu@5fZHe0T%*w7)k7X1U5(ls5W><++It8&Nx^SNCc#*0GsR! zz+w)FAK`=;D!~U1A;cgdg&a!skqt5|Mv04Vi-3D2NEDGISxWMWQ%EsMN-3w3DSNPS z$VkVWa?YhdXMyArO~LwtkxJE9uA#;%HPu{8L-;gqp~WUGwcJXl?mP0h$1Xkf+{<0=5I{iF!ptVeObfY%nazZ(2m~X;!lpZ0TqHK0hodmvjokyeKf=vK{w;3wQ{>Eo z?k|zsxS0{2aQlE-UuC;(#7-72pIVRX!~95vQdw2Bn5*;B&f3S@&^?vt<7)HmvLCkQ zlNHm`>L5ia@$My*&F(ljZWbu-brV>Qo?6{23>-QtnDYpkIr|BAb^5xy)o?np5kr31 zr1SP}&HKP<{g`rfTRBQvi&A*o6;RBUc?d}uzlRK`CtE8FOP3L&l{35m^4HdEldwC8 zf0bre{FpNw5LkIyK5MLfYu#x5yki9szu!oiVe~Puq-1hYyB~;kW>sasYo(8{yTN2+ zrQ(r&QpbQGQ+znLxi6tpiOU^wo)Tdt?Xyk~ua>*EtGi82t2 zJ1bDQC#e)#>3n5BU%8d`kwP08XR~L?-Tvp!OtgQ@x_ATe1w8b7M5mZ-(u4vOG2hUC`BjU@HOSG zk_|>Ux+>j;cNHakM}2b`0XgqC4HA^vWPee;k5{1&XAB>G!(TPMztr@86#%%=L|YG2 zpv)@BE4{UDIEsp!#VN9NElFg5ei|tX_WGFIdQsWtUD>YeWe^UC45pZc&?1k(jh~2vLGtrC{-+ih0<1N)xqS_FKA*&Qd}Gb z*Mfr|i&X~~XI&j!1wrrw#L>w~(M3x9Us7lhyC6lWPMvi%G zK!xP^!T;cQw`OT_!c7V#fSwoI{ulv*yFja9+uz5w-8upM&%l+|@ozMNnNQLi9W8bQ z3~U1z*BwpX11@)fp(kB3BuDbo6iOxF{fxe;01Vy&{i|+o?R}g+06FSv=>|AB1V+o0 zz2@=mzV6=sJ=5;*2NoW3f*-$s)Bpeg24YJ`L;&{y_W<{h1vS_J000SaNLh0L01FcU z01FcV0GgZ_00007bV*G`2j&I@5C_C zX>@2HM@dakSAh-}0006UNklAH>e7 z&Y3g+mpT8LBh-cKy5Tw=kJse>?yE!U#q)EMs;VRsN%r5hD199uRur(BXnMS`BPP4IVvRP}g;9APf%;x6MqaG-q$9@BLK% z5o@leE4jQ*J$tF6qoZx%LHgdf+Sy;~)rnQdw4kc>kk58b(~qAhKm?$v$pSVp%~kIn_`qUi8NS*fS9?5TyDLlT{Cuh+h*aI)OgKC)+Q0H%DwBH z)wN6+px@8v5l}!86xmf?gC2cf?qV&o&WG;Tl`HJ-@vGi4!*XZ>pvCZL@Wf7IBLH8A z9DW~MRsiWh+*xRh)fQe*<&Ko^Qs^q^`h-~lL`ojb%`IWE({Tygz7>wy?G@$ZY6aGu z+>7hDl|izzSq#I#byqbW@06C~4+J2usuRFXskrEPo)&|E;#R5BK|^bg%+Eci=x^b= ztKqvRM5JCE1OYGJyk#k~uy4m-csMzxr%v~y>X0wwiKM#)z`v5$q-9|k2Co*E*!cFP z@9K@~i#q@SGgE0rg_s$meI&|eSCStig6H`lFnIBt@IT`ZKHUKk>9oOK00000NkvXX Hu0mjfTG>1f literal 0 HcmV?d00001 From fa3e6986df745f348729ba8140ea2d57f60e8b62 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 01:24:20 -0400 Subject: [PATCH 044/159] Remove old wireles charger tooltip stuff that got missed --- .../swedz/extended_industrialization/EIText.java | 3 --- .../extended_industrialization/EITooltips.java | 15 --------------- 2 files changed, 18 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 9894ac5f..a27c21a9 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -8,9 +8,6 @@ public enum EIText implements TranslatableTextEnum BREWERY_BREWS_MULTIPLE("Brews %s potions at a time."), BREWERY_REQUIRES_BLAZING_ESSENCE("Requires %s to brew potions."), CALCIFICATION_PERCENTAGE("Calcification: %d %%"), - CHARGING_STATION_GLOBAL("Charges items in your inventory while within the same dimension."), - CHARGING_STATION_INTERDIMENSIONAL("Charges items in your inventory while in any dimension."), - CHARGING_STATION_RANGED("Charges items in your inventory while within %d blocks."), COILS_LEF_TIER("Runs LEF in batches of up to %d at %s the EU cost."), COMMAND_TESLA_NETWORK_DUMP_CANT_HAVE_NETWORK("The block at %s is not a network part."), COMMAND_TESLA_NETWORK_DUMP_CHUNK_NOT_LOADED("Chunk at %s is not loaded."), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 203b24c0..2cb12987 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -192,21 +192,6 @@ public final class EITooltips line(EIText.WASTE_COLLECTOR_HELP) ); - public static final TooltipAttachment CHARGING_STATION_RANGED = TooltipAttachment.singleLine( - List.of(EI.id("local_wireless_charging_station")), - line(EIText.CHARGING_STATION_RANGED).arg(EIConfig.localWirelessChargingStationRange) - ); - - public static final TooltipAttachment CHARGING_STATION_GLOBAL = TooltipAttachment.singleLine( - List.of(EI.id("global_wireless_charging_station")), - line(EIText.CHARGING_STATION_GLOBAL) - ); - - public static final TooltipAttachment CHARGING_STATION_INTERDIMENSIONAL = TooltipAttachment.singleLine( - List.of(EI.id("interdimensional_wireless_charging_station")), - line(EIText.CHARGING_STATION_INTERDIMENSIONAL) - ); - public static void init() { } From a8348c0c80934e448ffea4d29f75f2f3973cf1ff Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 02:33:07 -0400 Subject: [PATCH 045/159] Add tooltip for tesla tower coils --- .../lang/en_us.json | 4 +--- .../extended_industrialization/EIText.java | 1 + .../EITooltips.java | 19 ++++++++++++++++++- .../teslatower/TeslaTowerBlockEntity.java | 7 +++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 8d22279f..30d738c8 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -106,10 +106,8 @@ "text.extended_industrialization.brewery_brews_multiple": "Brews %s potions at a time.", "text.extended_industrialization.brewery_requires_blazing_essence": "Requires %s to brew potions.", "text.extended_industrialization.calcification_percentage": "Calcification: %d %%", - "text.extended_industrialization.charging_station_global": "Charges items in your inventory while within the same dimension.", - "text.extended_industrialization.charging_station_interdimensional": "Charges items in your inventory while in any dimension.", - "text.extended_industrialization.charging_station_ranged": "Charges items in your inventory while within %d blocks.", "text.extended_industrialization.coils_lef_tier": "Runs LEF in batches of up to %d at %s the EU cost.", + "text.extended_industrialization.coils_tesla_tower_tier": "Allows the Tesla Tower to transmit up to %s within %s blocks with a max loss of %s.", "text.extended_industrialization.command_tesla_network_dump_cant_have_network": "The block at %s is not a network part.", "text.extended_industrialization.command_tesla_network_dump_chunk_not_loaded": "Chunk at %s is not loaded.", "text.extended_industrialization.command_tesla_network_dump_no_network": "No existing network could be found for %s.", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index a27c21a9..ccbb9de5 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -9,6 +9,7 @@ public enum EIText implements TranslatableTextEnum BREWERY_REQUIRES_BLAZING_ESSENCE("Requires %s to brew potions."), CALCIFICATION_PERCENTAGE("Calcification: %d %%"), COILS_LEF_TIER("Runs LEF in batches of up to %d at %s the EU cost."), + COILS_TESLA_TOWER_TIER("Allows the Tesla Tower to transmit up to %s within %s blocks with a max loss of %s."), COMMAND_TESLA_NETWORK_DUMP_CANT_HAVE_NETWORK("The block at %s is not a network part."), COMMAND_TESLA_NETWORK_DUMP_CHUNK_NOT_LOADED("Chunk at %s is not loaded."), COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK("No existing network could be found for %s."), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 2cb12987..ef829c1e 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -15,6 +15,8 @@ import net.swedz.extended_industrialization.item.nanosuit.NanoSuitArmorItem; import net.swedz.extended_industrialization.machines.blockentity.multiblock.LargeElectricFurnaceBlockEntity; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; import net.swedz.tesseract.neoforge.tooltip.BiParser; import net.swedz.tesseract.neoforge.tooltip.Parser; import net.swedz.tesseract.neoforge.tooltip.TooltipAttachment; @@ -78,7 +80,7 @@ public final class EITooltips ) ).noShiftRequired(); - public static final TooltipAttachment COILS = TooltipAttachment.singleLine( + public static final TooltipAttachment COILS_LEF = TooltipAttachment.singleLine( (stack, item) -> item instanceof BlockItem blockItem && LargeElectricFurnaceBlockEntity.getTiersByCoil().containsKey(BuiltInRegistries.BLOCK.getKey(blockItem.getBlock())), @@ -92,6 +94,21 @@ public final class EITooltips } ); + public static final TooltipAttachment COILS_TESLA = TooltipAttachment.singleLine( + (stack, item) -> + item instanceof BlockItem blockItem && + TeslaTowerBlockEntity.getTiersByCoil().containsKey(BuiltInRegistries.BLOCK.getKey(blockItem.getBlock())), + (stack, item) -> + { + TeslaTowerTier tier = TeslaTowerBlockEntity.getTiersByCoil() + .get(BuiltInRegistries.BLOCK.getKey(((BlockItem) stack.getItem()).getBlock())); + return line(EIText.COILS_TESLA_TOWER_TIER) + .arg(tier.maxTransfer(), EU_PER_TICK_PARSER) + .arg(tier.maxDistance()) + .arg(tier.maxLoss(), SPACED_PERCENTAGE_PARSER); + } + ); + public static final TooltipAttachment PHOTOVOLTAIC_CELLS = TooltipAttachment.multilines( PhotovoltaicCellItem.class, (stack, item) -> diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index e7275d2e..4b8a35ad 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -13,6 +13,7 @@ import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; import aztech.modern_industrialization.machines.multiblocks.ShapeMatcher; import com.google.common.collect.Lists; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.swedz.extended_industrialization.EI; @@ -29,6 +30,7 @@ import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; import java.util.List; +import java.util.Map; import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; @@ -243,4 +245,9 @@ public static void registerTieredShapes() { SHAPES.register(); } + + public static Map getTiersByCoil() + { + return SHAPES.tiersByBlock(); + } } From e8735dd3544df0ca1f8da6d83b26d62c14a94590 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 02:47:24 -0400 Subject: [PATCH 046/159] Add tooltip to tesla tower and receiver --- .../lang/en_us.json | 5 +++++ .../extended_industrialization/EIText.java | 5 +++++ .../EITooltips.java | 19 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 30d738c8..e2299688 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -209,12 +209,17 @@ "text.extended_industrialization.tesla_carryon_clear": "Cleared selected transmitter.", "text.extended_industrialization.tesla_carryon_linked": "Linked to %s", "text.extended_industrialization.tesla_carryon_selected": "Selected transmitter for receiving.", + "text.extended_industrialization.tesla_receiver_help_1": "Can receive energy from a linked Tesla Tower.", + "text.extended_industrialization.tesla_receiver_help_2": "Must accept energy of the same voltage as the linked tower.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", "text.extended_industrialization.tesla_receiver_loss": "Energy Loss: %s", "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Cannot receive %s power", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_receiver_too_far": "Transmitter is too far", "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", + "text.extended_industrialization.tesla_tower_help_1": "Wirelessly transmits energy to receivers within range.", + "text.extended_industrialization.tesla_tower_help_2": "Energy transfer rate and range is determined by the coils used.", + "text.extended_industrialization.tesla_tower_help_3": "Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier.", "text.extended_industrialization.tesla_tower_upgrade": "Add tesla upgrades to increase maximum range.", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", "text.extended_industrialization.tesla_transmitter_no_energy_hatches": "No energy hatches provided", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index ccbb9de5..acab0891 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -111,12 +111,17 @@ public enum EIText implements TranslatableTextEnum TESLA_CARRYON_CLEAR("Cleared selected transmitter."), TESLA_CARRYON_LINKED("Linked to %s"), TESLA_CARRYON_SELECTED("Selected transmitter for receiving."), + TESLA_RECEIVER_HELP_1("Can receive energy from a linked Tesla Tower."), + TESLA_RECEIVER_HELP_2("Must accept energy of the same voltage as the linked tower."), TESLA_RECEIVER_LINKED("Linked to %s"), TESLA_RECEIVER_LOSS("Energy Loss: %s"), TESLA_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), TESLA_RECEIVER_TOO_FAR("Transmitter is too far"), TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), + TESLA_TOWER_HELP_1("Wirelessly transmits energy to receivers within range."), + TESLA_TOWER_HELP_2("Energy transfer rate and range is determined by the coils used."), + TESLA_TOWER_HELP_3("Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier."), TESLA_TOWER_UPGRADE("Add tesla upgrades to increase maximum range."), TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), TESLA_TRANSMITTER_NO_ENERGY_HATCHES("No energy hatches provided"), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index ef829c1e..b621727d 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -10,11 +10,11 @@ import net.minecraft.network.chat.Component; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.BlockItem; +import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.PhotovoltaicCellItem; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitArmorItem; import net.swedz.extended_industrialization.machines.blockentity.multiblock.LargeElectricFurnaceBlockEntity; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; import net.swedz.tesseract.neoforge.tooltip.BiParser; @@ -209,6 +209,23 @@ public final class EITooltips line(EIText.WASTE_COLLECTOR_HELP) ); + public static final TooltipAttachment TESLA_TOWER = TooltipAttachment.multilines( + List.of(EI.id("tesla_tower")), + List.of( + line(EIText.TESLA_TOWER_HELP_1), + line(EIText.TESLA_TOWER_HELP_2), + line(EIText.TESLA_TOWER_HELP_3) + ) + ); + + public static final TooltipAttachment TESLA_RECEIVER = TooltipAttachment.multilines( + List.of(EI.id("tesla_receiver")), + List.of( + line(EIText.TESLA_RECEIVER_HELP_1), + line(EIText.TESLA_RECEIVER_HELP_2) + ) + ); + public static void init() { } From 475cbb93450c347222cc22823fa6b84b04a1d80e Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 03:00:13 -0400 Subject: [PATCH 047/159] Add tooltip to tesla calibrator --- .../assets/extended_industrialization/lang/en_us.json | 4 ++++ .../net/swedz/extended_industrialization/EIText.java | 4 ++++ .../swedz/extended_industrialization/EITooltips.java | 10 ++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index e2299688..fa7ffc0a 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -202,6 +202,10 @@ "text.extended_industrialization.steam_chainsaw_2": "- Place fuel inside the chainsaw using %s.", "text.extended_industrialization.steam_chainsaw_3": "- Toggle Silk Touch with %s + %s.", "text.extended_industrialization.tesla_calibrator_clear": "Cleared selection from tesla calibrator.", + "text.extended_industrialization.tesla_calibrator_help_1": "- Press %s + %s on a Tesla Tower to save its position in the calibrator.", + "text.extended_industrialization.tesla_calibrator_help_2": "- Use %s on a Tesla Receiver to link it to the selected tower.", + "text.extended_industrialization.tesla_calibrator_help_3": "- (Optional) Hold in off-hand when placing receivers to automatically link.", + "text.extended_industrialization.tesla_calibrator_help_4": "- Clear using %s + %s on air.", "text.extended_industrialization.tesla_calibrator_link_failed_no_selection": "Failed to link receiver because no transmitter is selected.", "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected transmitter.", "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index acab0891..eccc5ae8 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -104,6 +104,10 @@ public enum EIText implements TranslatableTextEnum STEAM_CHAINSAW_2("- Place fuel inside the chainsaw using %s."), STEAM_CHAINSAW_3("- Toggle Silk Touch with %s + %s."), TESLA_CALIBRATOR_CLEAR("Cleared selection from tesla calibrator."), + TESLA_CALIBRATOR_HELP_1("- Press %s + %s on a Tesla Tower to save its position in the calibrator."), + TESLA_CALIBRATOR_HELP_2("- Use %s on a Tesla Receiver to link it to the selected tower."), + TESLA_CALIBRATOR_HELP_3("- (Optional) Hold in off-hand when placing receivers to automatically link."), + TESLA_CALIBRATOR_HELP_4("- Clear using %s + %s on air."), TESLA_CALIBRATOR_LINKED("Linked to %s"), TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION("Failed to link receiver because no transmitter is selected."), TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index b621727d..d62a496b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -148,6 +148,16 @@ public final class EITooltips ) ); + public static final TooltipAttachment TESLA_CALIBRATOR = TooltipAttachment.multilines( + EIItems.TESLA_CALIBRATOR, + List.of( + line(EIText.TESLA_CALIBRATOR_HELP_1).arg("sneak", KEYBIND_PARSER).arg("use", KEYBIND_PARSER), + line(EIText.TESLA_CALIBRATOR_HELP_2).arg("use", KEYBIND_PARSER), + line(EIText.TESLA_CALIBRATOR_HELP_3), + line(EIText.TESLA_CALIBRATOR_HELP_4).arg("sneak", KEYBIND_PARSER).arg("use", KEYBIND_PARSER) + ) + ); + public static final TooltipAttachment ELECTRIC_TOOL_HELP = TooltipAttachment.multilines( ElectricToolItem.class, (stack, item) -> From 893e009ae8c76dc6f17b13d13a3403dec067ee1f Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 03:18:03 -0400 Subject: [PATCH 048/159] Add tooltip to carry-on receiver --- .../assets/extended_industrialization/lang/en_us.json | 4 ++++ .../net/swedz/extended_industrialization/EIText.java | 4 ++++ .../swedz/extended_industrialization/EITooltips.java | 10 ++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index fa7ffc0a..a7dbd940 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -211,6 +211,10 @@ "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", "text.extended_industrialization.tesla_calibrator_selected": "Selected transmitter for calibration.", "text.extended_industrialization.tesla_carryon_clear": "Cleared selected transmitter.", + "text.extended_industrialization.tesla_carryon_help_1": "Receives energy from a linked transmitter within range and charges items while in your inventory.", + "text.extended_industrialization.tesla_carryon_help_2": "Tesla Calibration:", + "text.extended_industrialization.tesla_carryon_help_3": "- Press %s on a Tesla Tower to link the receiver to it.", + "text.extended_industrialization.tesla_carryon_help_4": "- Clear using %s + %s on air.", "text.extended_industrialization.tesla_carryon_linked": "Linked to %s", "text.extended_industrialization.tesla_carryon_selected": "Selected transmitter for receiving.", "text.extended_industrialization.tesla_receiver_help_1": "Can receive energy from a linked Tesla Tower.", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index eccc5ae8..379bd565 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -113,6 +113,10 @@ public enum EIText implements TranslatableTextEnum TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), TESLA_CALIBRATOR_SELECTED("Selected transmitter for calibration."), TESLA_CARRYON_CLEAR("Cleared selected transmitter."), + TESLA_CARRYON_HELP_1("Receives energy from a linked transmitter within range and charges items while in your inventory."), + TESLA_CARRYON_HELP_2("Tesla Calibration:"), + TESLA_CARRYON_HELP_3("- Press %s on a Tesla Tower to link the receiver to it."), + TESLA_CARRYON_HELP_4("- Clear using %s + %s on air."), TESLA_CARRYON_LINKED("Linked to %s"), TESLA_CARRYON_SELECTED("Selected transmitter for receiving."), TESLA_RECEIVER_HELP_1("Can receive energy from a linked Tesla Tower."), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index d62a496b..5e0d3b54 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -236,6 +236,16 @@ public final class EITooltips ) ); + public static final TooltipAttachment TESLA_CARRY_ON_RECEIVER = TooltipAttachment.multilines( + List.of(EI.id("tesla_carry_on_receiver")), + List.of( + line(EIText.TESLA_CARRYON_HELP_1), + line(EIText.TESLA_CARRYON_HELP_2), + line(EIText.TESLA_CARRYON_HELP_3).arg("use", KEYBIND_PARSER), + line(EIText.TESLA_CARRYON_HELP_4).arg("sneak", KEYBIND_PARSER).arg("use", KEYBIND_PARSER) + ) + ); + public static void init() { } From c501deb3ac1e2862f5c25966fbe494c237fc8a3a Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 03:24:39 -0400 Subject: [PATCH 049/159] Rename carryon receiver to handheld --- .../extended_industrialization/lang/en_us.json | 16 ++++++++-------- .../models/item/tesla_carry_on_receiver.json | 6 ------ .../extended_industrialization/EIItems.java | 10 +++++----- .../extended_industrialization/EIText.java | 14 +++++++------- .../extended_industrialization/EITooltips.java | 12 ++++++------ ...Item.java => TeslaHandheldReceiverItem.java} | 10 +++++----- .../mixin/TeslaNetworkReceiversPlayerMixin.java | 4 ++-- ...receiver.png => tesla_handheld_receiver.png} | Bin 8 files changed, 33 insertions(+), 39 deletions(-) delete mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_carry_on_receiver.json rename src/main/java/net/swedz/extended_industrialization/item/teslalinkable/{TeslaCarryOnReceiverItem.java => TeslaHandheldReceiverItem.java} (86%) rename src/main/resources/assets/extended_industrialization/textures/item/{tesla_carry_on_receiver.png => tesla_handheld_receiver.png} (100%) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index a7dbd940..2d456271 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -74,7 +74,7 @@ "item.extended_industrialization.steam_chainsaw": "Steam Chainsaw", "item.extended_industrialization.steel_combine": "Steel Combine", "item.extended_industrialization.tesla_calibrator": "Tesla Calibrator", - "item.extended_industrialization.tesla_carry_on_receiver": "Tesla Carry-On Receiver", + "item.extended_industrialization.tesla_handheld_receiver": "Tesla Handheld Receiver", "item.extended_industrialization.tesla_interdimensional_upgrade": "Tesla Interdimensional Upgrade", "item.extended_industrialization.tin_can": "Tin Can", "item.extended_industrialization.ultimate_laser_drill": "Ultimate Laser Drill", @@ -210,13 +210,13 @@ "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected transmitter.", "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", "text.extended_industrialization.tesla_calibrator_selected": "Selected transmitter for calibration.", - "text.extended_industrialization.tesla_carryon_clear": "Cleared selected transmitter.", - "text.extended_industrialization.tesla_carryon_help_1": "Receives energy from a linked transmitter within range and charges items while in your inventory.", - "text.extended_industrialization.tesla_carryon_help_2": "Tesla Calibration:", - "text.extended_industrialization.tesla_carryon_help_3": "- Press %s on a Tesla Tower to link the receiver to it.", - "text.extended_industrialization.tesla_carryon_help_4": "- Clear using %s + %s on air.", - "text.extended_industrialization.tesla_carryon_linked": "Linked to %s", - "text.extended_industrialization.tesla_carryon_selected": "Selected transmitter for receiving.", + "text.extended_industrialization.tesla_handheld_clear": "Cleared selected transmitter.", + "text.extended_industrialization.tesla_handheld_help_1": "Receives energy from a linked transmitter within range and charges items while in your inventory.", + "text.extended_industrialization.tesla_handheld_help_2": "Tesla Calibration:", + "text.extended_industrialization.tesla_handheld_help_3": "- Press %s on a Tesla Tower to link the receiver to it.", + "text.extended_industrialization.tesla_handheld_help_4": "- Clear using %s + %s on air.", + "text.extended_industrialization.tesla_handheld_linked": "Linked to %s", + "text.extended_industrialization.tesla_handheld_selected": "Selected transmitter for receiving.", "text.extended_industrialization.tesla_receiver_help_1": "Can receive energy from a linked Tesla Tower.", "text.extended_industrialization.tesla_receiver_help_2": "Must accept energy of the same voltage as the linked tower.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_carry_on_receiver.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_carry_on_receiver.json deleted file mode 100644 index 7f5ce976..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/item/tesla_carry_on_receiver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "extended_industrialization:item/tesla_carry_on_receiver" - } -} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIItems.java b/src/main/java/net/swedz/extended_industrialization/EIItems.java index f165e4dd..b0cc1256 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIItems.java +++ b/src/main/java/net/swedz/extended_industrialization/EIItems.java @@ -17,11 +17,11 @@ import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.PhotovoltaicCellItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; -import net.swedz.extended_industrialization.item.teslalinkable.TeslaCalibratorItem; -import net.swedz.extended_industrialization.item.teslalinkable.TeslaCarryOnReceiverItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitAbility; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitArmorItem; +import net.swedz.extended_industrialization.item.teslalinkable.TeslaCalibratorItem; +import net.swedz.extended_industrialization.item.teslalinkable.TeslaHandheldReceiverItem; import net.swedz.tesseract.neoforge.registry.SortOrder; import net.swedz.tesseract.neoforge.registry.common.CommonModelBuilders; import net.swedz.tesseract.neoforge.registry.common.CommonRegistrations; @@ -68,9 +68,9 @@ public static void init(IEventBus bus) public static final ItemHolder TIN_CAN = create("tin_can", "Tin Can", Item::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder CANNED_FOOD = create("canned_food", "Canned Food", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().usingConvertsTo(TIN_CAN).build())).tag(ItemTags.WOLF_FOOD, ItemTags.CAT_FOOD).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder TESLA_CARRY_ON_RECEIVER = create("tesla_carry_on_receiver", "Tesla Carry-On Receiver", TeslaCarryOnReceiverItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_HANDHELD_RECEIVER = create("tesla_handheld_receiver", "Tesla Handheld Receiver", TeslaHandheldReceiverItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder TESLA_INTERDIMENSIONAL_UPGRADE = create("tesla_interdimensional_upgrade", "Tesla Interdimensional Upgrade", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.stacksTo(1).rarity(Rarity.EPIC)).withModel(CommonModelBuilders::generated).register(); diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 379bd565..ab3377b9 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -112,13 +112,13 @@ public enum EIText implements TranslatableTextEnum TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION("Failed to link receiver because no transmitter is selected."), TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), TESLA_CALIBRATOR_SELECTED("Selected transmitter for calibration."), - TESLA_CARRYON_CLEAR("Cleared selected transmitter."), - TESLA_CARRYON_HELP_1("Receives energy from a linked transmitter within range and charges items while in your inventory."), - TESLA_CARRYON_HELP_2("Tesla Calibration:"), - TESLA_CARRYON_HELP_3("- Press %s on a Tesla Tower to link the receiver to it."), - TESLA_CARRYON_HELP_4("- Clear using %s + %s on air."), - TESLA_CARRYON_LINKED("Linked to %s"), - TESLA_CARRYON_SELECTED("Selected transmitter for receiving."), + TESLA_HANDHELD_CLEAR("Cleared selected transmitter."), + TESLA_HANDHELD_HELP_1("Receives energy from a linked transmitter within range and charges items while in your inventory."), + TESLA_HANDHELD_HELP_2("Tesla Calibration:"), + TESLA_HANDHELD_HELP_3("- Press %s on a Tesla Tower to link the receiver to it."), + TESLA_HANDHELD_HELP_4("- Clear using %s + %s on air."), + TESLA_HANDHELD_LINKED("Linked to %s"), + TESLA_HANDHELD_SELECTED("Selected transmitter for receiving."), TESLA_RECEIVER_HELP_1("Can receive energy from a linked Tesla Tower."), TESLA_RECEIVER_HELP_2("Must accept energy of the same voltage as the linked tower."), TESLA_RECEIVER_LINKED("Linked to %s"), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 5e0d3b54..fbaac999 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -236,13 +236,13 @@ public final class EITooltips ) ); - public static final TooltipAttachment TESLA_CARRY_ON_RECEIVER = TooltipAttachment.multilines( - List.of(EI.id("tesla_carry_on_receiver")), + public static final TooltipAttachment TESLA_HANDHELD_RECEIVER = TooltipAttachment.multilines( + List.of(EI.id("tesla_handheld_receiver")), List.of( - line(EIText.TESLA_CARRYON_HELP_1), - line(EIText.TESLA_CARRYON_HELP_2), - line(EIText.TESLA_CARRYON_HELP_3).arg("use", KEYBIND_PARSER), - line(EIText.TESLA_CARRYON_HELP_4).arg("sneak", KEYBIND_PARSER).arg("use", KEYBIND_PARSER) + line(EIText.TESLA_HANDHELD_HELP_1), + line(EIText.TESLA_HANDHELD_HELP_2), + line(EIText.TESLA_HANDHELD_HELP_3).arg("use", KEYBIND_PARSER), + line(EIText.TESLA_HANDHELD_HELP_4).arg("sneak", KEYBIND_PARSER).arg("use", KEYBIND_PARSER) ) ); diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java similarity index 86% rename from src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java rename to src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java index d9ff9df7..8066e473 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCarryOnReceiverItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java @@ -21,9 +21,9 @@ import static aztech.modern_industrialization.MITooltips.*; import static net.swedz.extended_industrialization.EITooltips.*; -public final class TeslaCarryOnReceiverItem extends Item +public final class TeslaHandheldReceiverItem extends Item { - public TeslaCarryOnReceiverItem(Properties properties) + public TeslaHandheldReceiverItem(Properties properties) { super(properties.stacksTo(1)); } @@ -42,7 +42,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) if(hitBlockEntity instanceof TeslaTransmitter) { itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new WorldPos(context.getLevel(), context.getClickedPos())); - player.displayClientMessage(EIText.TESLA_CARRYON_SELECTED.text(), true); + player.displayClientMessage(EIText.TESLA_HANDHELD_SELECTED.text(), true); } } return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); @@ -56,7 +56,7 @@ public InteractionResultHolder use(Level level, Player player, Intera if(player.isShiftKeyDown()) { player.getItemInHand(usedHand).remove(EIComponents.SELECTED_TESLA_NETWORK); - player.displayClientMessage(EIText.TESLA_CARRYON_CLEAR.text(), true); + player.displayClientMessage(EIText.TESLA_HANDHELD_CLEAR.text(), true); return InteractionResultHolder.sidedSuccess(player.getItemInHand(usedHand), level.isClientSide()); } return super.use(level, player, usedHand); @@ -68,7 +68,7 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List new PlayerTeslaReceiver(player, k)); diff --git a/src/main/resources/assets/extended_industrialization/textures/item/tesla_carry_on_receiver.png b/src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver.png similarity index 100% rename from src/main/resources/assets/extended_industrialization/textures/item/tesla_carry_on_receiver.png rename to src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver.png From 271a4ec076d3cc9f2f6fb3186258595496465dff Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 03:25:34 -0400 Subject: [PATCH 050/159] Rename carryon receiver to handheld --- .../models/item/tesla_handheld_receiver.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json new file mode 100644 index 00000000..51e907e2 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "extended_industrialization:item/tesla_handheld_receiver" + } +} \ No newline at end of file From 39eaf14886ef42d5ec74e8cc52978a7544ff92cf Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 03:45:07 -0400 Subject: [PATCH 051/159] Delete old wireless charging station textures --- .../global/overlay_side.png | Bin 2581 -> 0 bytes .../global/overlay_top.png | Bin 366 -> 0 bytes .../interdimensional/overlay_side.png | Bin 2581 -> 0 bytes .../interdimensional/overlay_top.png | Bin 366 -> 0 bytes .../local/overlay_side.png | Bin 2581 -> 0 bytes .../local/overlay_top.png | Bin 366 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/global/overlay_side.png delete mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/global/overlay_top.png delete mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/interdimensional/overlay_side.png delete mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/interdimensional/overlay_top.png delete mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/local/overlay_side.png delete mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/local/overlay_top.png diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/global/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/global/overlay_side.png deleted file mode 100644 index 7c5e238c1aab4ad9a84a02a745e3775787dfbcc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2581 zcmV+w3hMQVP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O=0%mgFc5{O1&N1SA21>_e-S4BC|uFW{(Q>yOFmq`cH{5PhjI5jUPEV?c=!1_Jp$;x-FYQ*()#^*l?lcOuY7yCpFR9Lms_iE zipb}OE8yboS%9&X+rO9vL1>w7@gn%XOn(37KX6qj7%!SLHduW-CR(JIZ^@;zU|vLf zqJo?bGXRRPb_5s_DBu%Gq(oksl?Xg$2vmWbC2)fR6eACSCieP0&s!acc&}I1m)qtpFUFw`M+52)vcsn)$*AipT&Nw>ECjRtyq`NgNkF+P#$f zCEZ-izoZ-gm2z%N_g^UIAl+BpexTaeb*^8EohaO#dO`Hz`OMXEuDht!f7|{~hE~ve z^}V-Nc>bC(=lj*+QaB;mhDZU!pUi#N%Ak84_kfAS?ZX$zq`#SJ^6aJSge4o_BP@K9={2avq5EAF6?9azQgebhwFZrTHLjH?Q@yK3^+{5hYs&QwX{Na zrVV8zHC7yWuKQWb9B|SjGZvIOUmC}>G>MN&K9BZa_8$d1VJ$&!wcLZS# zc=pT7QwP}(FU3ER8jg#%!7@4LJE56h0qe_UOrstgOh-$*^cI`xUcAffVHaCVP zK)xn!cXInIY}@0oux_%oU!IlAprc4yu-JTS(7lcJHj*cI~w>#sLH4Dujq@^-$4nH&H{)5BXKQn}5 zX>or77dAj_=C;BX0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ>7vmMLUQ% zWT;LSM5Q=N6^me@v=v%)FuC*#nlvOSE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JW zDYS_3;J6>}?mh0_0Yam~RI_UmP&La)#baVNw<-o+;l}_55kypCrk+SIX5cx#?&0I> zU4&4rtTK^)z*bk6(4Ay$$U;&b8&gDyz?$aUG}H_ke3JS*_Gq>z@3D!MwJT<~q$$#Ib|~k`N)I zhB7L!5TR8g#YBqsV;=qy$DbsZOs+B*ITlcb3d!+<|H1EW&BFAQn-q)z-7mKNF$M&7 zfo9#dzmILZc>?&Kfh(=;uQq_$PtxmcEqny@Zvz+CZB5<-E_Z<8CtWfmNAlAY3I*W( zjJ_!c4BY~~Yi@6?eVjf38R}~J1~@nb#*37_?(y!P&ffk#)9UXBjoNau6spiN00006 zVoOIv07U>001#-w-%6x-kpkDf{cq+ub+!j>TKo=&qGcH8afl=FB~J;2($lxlyfF z0Z7wy?C{?HK8<>PGT^6hYrYE>0R=NK1r4ADXyD3=SpaIa8URxVX1OkemNM5 zyCMki=+5n^y&jt9SW$5K=@aP#4<9$Vd*j#yfEn3Pd~a-I!NMd5$^c<^D#7v|DiCsy^$S9tqlXUDaYAC{W#a%vDuPKgT4q6FT!TE12K*RuDz{*1#aCu zi5KC7Mb4R$I!8e0i?F%UDZBRj(u5iS%kMAp{QSEzXD!NVYk(Nad4%O}i^zc=Gy=G! rG_(9^4jabgoEx^t@9P+i|2BRAuV?_xojB}200000NkvXXu0mjfb~(|F diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/global/overlay_top.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/global/overlay_top.png deleted file mode 100644 index aad06a210a6ab4d77bdc6f2ab73784328346d4c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP);V}SR$AJcnpA6<*6Nl$S!5vPduGc`r_Qn>qv-J;>I^nm5!}Jya>vg3 z&bif9PG&&JYfXY0T>6L*KNF~H3Cc#t5q$qX|9tx4V>|HMCte(o3S_r{ z;b03~kr-GI_s~Ex8eEP_r(PU_YdgM~C>aYSmbQ+)2m*=p&@@LX?XDwW09~>oLEteG zhMTLa1e1?b*^9#@FJ36uZUMt#JhGat)+~V&iGc}DIIk%7qcIA+344aiR4nNRco;6;6W!WzR9|G-ep9?Ah2F8Wi@TbF9%2VD0<*=ha9OaK4? M07*qoM6N<$f;_^XI{*Lx diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/interdimensional/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/interdimensional/overlay_side.png deleted file mode 100644 index 7c5e238c1aab4ad9a84a02a745e3775787dfbcc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2581 zcmV+w3hMQVP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O=0%mgFc5{O1&N1SA21>_e-S4BC|uFW{(Q>yOFmq`cH{5PhjI5jUPEV?c=!1_Jp$;x-FYQ*()#^*l?lcOuY7yCpFR9Lms_iE zipb}OE8yboS%9&X+rO9vL1>w7@gn%XOn(37KX6qj7%!SLHduW-CR(JIZ^@;zU|vLf zqJo?bGXRRPb_5s_DBu%Gq(oksl?Xg$2vmWbC2)fR6eACSCieP0&s!acc&}I1m)qtpFUFw`M+52)vcsn)$*AipT&Nw>ECjRtyq`NgNkF+P#$f zCEZ-izoZ-gm2z%N_g^UIAl+BpexTaeb*^8EohaO#dO`Hz`OMXEuDht!f7|{~hE~ve z^}V-Nc>bC(=lj*+QaB;mhDZU!pUi#N%Ak84_kfAS?ZX$zq`#SJ^6aJSge4o_BP@K9={2avq5EAF6?9azQgebhwFZrTHLjH?Q@yK3^+{5hYs&QwX{Na zrVV8zHC7yWuKQWb9B|SjGZvIOUmC}>G>MN&K9BZa_8$d1VJ$&!wcLZS# zc=pT7QwP}(FU3ER8jg#%!7@4LJE56h0qe_UOrstgOh-$*^cI`xUcAffVHaCVP zK)xn!cXInIY}@0oux_%oU!IlAprc4yu-JTS(7lcJHj*cI~w>#sLH4Dujq@^-$4nH&H{)5BXKQn}5 zX>or77dAj_=C;BX0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ>7vmMLUQ% zWT;LSM5Q=N6^me@v=v%)FuC*#nlvOSE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JW zDYS_3;J6>}?mh0_0Yam~RI_UmP&La)#baVNw<-o+;l}_55kypCrk+SIX5cx#?&0I> zU4&4rtTK^)z*bk6(4Ay$$U;&b8&gDyz?$aUG}H_ke3JS*_Gq>z@3D!MwJT<~q$$#Ib|~k`N)I zhB7L!5TR8g#YBqsV;=qy$DbsZOs+B*ITlcb3d!+<|H1EW&BFAQn-q)z-7mKNF$M&7 zfo9#dzmILZc>?&Kfh(=;uQq_$PtxmcEqny@Zvz+CZB5<-E_Z<8CtWfmNAlAY3I*W( zjJ_!c4BY~~Yi@6?eVjf38R}~J1~@nb#*37_?(y!P&ffk#)9UXBjoNau6spiN00006 zVoOIv07U>001#-w-%6x-kpkDf{cq+ub+!j>TKo=&qGcH8afl=FB~J;2($lxlyfF z0Z7wy?C{?HK8<>PGT^6hYrYE>0R=NK1r4ADXyD3=SpaIa8URxVX1OkemNM5 zyCMki=+5n^y&jt9SW$5K=@aP#4<9$Vd*j#yfEn3Pd~a-I!NMd5$^c<^D#7v|DiCsy^$S9tqlXUDaYAC{W#a%vDuPKgT4q6FT!TE12K*RuDz{*1#aCu zi5KC7Mb4R$I!8e0i?F%UDZBRj(u5iS%kMAp{QSEzXD!NVYk(Nad4%O}i^zc=Gy=G! rG_(9^4jabgoEx^t@9P+i|2BRAuV?_xojB}200000NkvXXu0mjfb~(|F diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/interdimensional/overlay_top.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/interdimensional/overlay_top.png deleted file mode 100644 index aad06a210a6ab4d77bdc6f2ab73784328346d4c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP);V}SR$AJcnpA6<*6Nl$S!5vPduGc`r_Qn>qv-J;>I^nm5!}Jya>vg3 z&bif9PG&&JYfXY0T>6L*KNF~H3Cc#t5q$qX|9tx4V>|HMCte(o3S_r{ z;b03~kr-GI_s~Ex8eEP_r(PU_YdgM~C>aYSmbQ+)2m*=p&@@LX?XDwW09~>oLEteG zhMTLa1e1?b*^9#@FJ36uZUMt#JhGat)+~V&iGc}DIIk%7qcIA+344aiR4nNRco;6;6W!WzR9|G-ep9?Ah2F8Wi@TbF9%2VD0<*=ha9OaK4? M07*qoM6N<$f;_^XI{*Lx diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/local/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/local/overlay_side.png deleted file mode 100644 index 7c5e238c1aab4ad9a84a02a745e3775787dfbcc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2581 zcmV+w3hMQVP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O=0%mgFc5{O1&N1SA21>_e-S4BC|uFW{(Q>yOFmq`cH{5PhjI5jUPEV?c=!1_Jp$;x-FYQ*()#^*l?lcOuY7yCpFR9Lms_iE zipb}OE8yboS%9&X+rO9vL1>w7@gn%XOn(37KX6qj7%!SLHduW-CR(JIZ^@;zU|vLf zqJo?bGXRRPb_5s_DBu%Gq(oksl?Xg$2vmWbC2)fR6eACSCieP0&s!acc&}I1m)qtpFUFw`M+52)vcsn)$*AipT&Nw>ECjRtyq`NgNkF+P#$f zCEZ-izoZ-gm2z%N_g^UIAl+BpexTaeb*^8EohaO#dO`Hz`OMXEuDht!f7|{~hE~ve z^}V-Nc>bC(=lj*+QaB;mhDZU!pUi#N%Ak84_kfAS?ZX$zq`#SJ^6aJSge4o_BP@K9={2avq5EAF6?9azQgebhwFZrTHLjH?Q@yK3^+{5hYs&QwX{Na zrVV8zHC7yWuKQWb9B|SjGZvIOUmC}>G>MN&K9BZa_8$d1VJ$&!wcLZS# zc=pT7QwP}(FU3ER8jg#%!7@4LJE56h0qe_UOrstgOh-$*^cI`xUcAffVHaCVP zK)xn!cXInIY}@0oux_%oU!IlAprc4yu-JTS(7lcJHj*cI~w>#sLH4Dujq@^-$4nH&H{)5BXKQn}5 zX>or77dAj_=C;BX0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ>7vmMLUQ% zWT;LSM5Q=N6^me@v=v%)FuC*#nlvOSE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JW zDYS_3;J6>}?mh0_0Yam~RI_UmP&La)#baVNw<-o+;l}_55kypCrk+SIX5cx#?&0I> zU4&4rtTK^)z*bk6(4Ay$$U;&b8&gDyz?$aUG}H_ke3JS*_Gq>z@3D!MwJT<~q$$#Ib|~k`N)I zhB7L!5TR8g#YBqsV;=qy$DbsZOs+B*ITlcb3d!+<|H1EW&BFAQn-q)z-7mKNF$M&7 zfo9#dzmILZc>?&Kfh(=;uQq_$PtxmcEqny@Zvz+CZB5<-E_Z<8CtWfmNAlAY3I*W( zjJ_!c4BY~~Yi@6?eVjf38R}~J1~@nb#*37_?(y!P&ffk#)9UXBjoNau6spiN00006 zVoOIv07U>001#-w-%6x-kpkDf{cq+ub+!j>TKo=&qGcH8afl=FB~J;2($lxlyfF z0Z7wy?C{?HK8<>PGT^6hYrYE>0R=NK1r4ADXyD3=SpaIa8URxVX1OkemNM5 zyCMki=+5n^y&jt9SW$5K=@aP#4<9$Vd*j#yfEn3Pd~a-I!NMd5$^c<^D#7v|DiCsy^$S9tqlXUDaYAC{W#a%vDuPKgT4q6FT!TE12K*RuDz{*1#aCu zi5KC7Mb4R$I!8e0i?F%UDZBRj(u5iS%kMAp{QSEzXD!NVYk(Nad4%O}i^zc=Gy=G! rG_(9^4jabgoEx^t@9P+i|2BRAuV?_xojB}200000NkvXXu0mjfb~(|F diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/local/overlay_top.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/wireless_charging_station/local/overlay_top.png deleted file mode 100644 index aad06a210a6ab4d77bdc6f2ab73784328346d4c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP);V}SR$AJcnpA6<*6Nl$S!5vPduGc`r_Qn>qv-J;>I^nm5!}Jya>vg3 z&bif9PG&&JYfXY0T>6L*KNF~H3Cc#t5q$qX|9tx4V>|HMCte(o3S_r{ z;b03~kr-GI_s~Ex8eEP_r(PU_YdgM~C>aYSmbQ+)2m*=p&@@LX?XDwW09~>oLEteG zhMTLa1e1?b*^9#@FJ36uZUMt#JhGat)+~V&iGc}DIIk%7qcIA+344aiR4nNRco;6;6W!WzR9|G-ep9?Ah2F8Wi@TbF9%2VD0<*=ha9OaK4? M07*qoM6N<$f;_^XI{*Lx From 2c711098e21a836f2c39b855775988b7e28612ca Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 04:01:19 -0400 Subject: [PATCH 052/159] Track active state for tower --- .../teslatower/TeslaTowerBlockEntity.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 4b8a35ad..f6a9f24e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -212,11 +212,20 @@ public void tick() return; } - if(redstoneControl.doAllowNormalOperation(this)) + boolean active = false; + + if(shapeValid.shapeValid) { - // TODO limit transmit rate - this.transmitEnergy(Long.MAX_VALUE); + if(redstoneControl.doAllowNormalOperation(this)) + { + // TODO limit transmit rate + this.transmitEnergy(Long.MAX_VALUE); + + active = true; + } } + + this.updateActive(active); } @Override From 297efb70214b0ab33ade3cc7e13ccb0a00b5a6d5 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 04:01:33 -0400 Subject: [PATCH 053/159] Add some basic placeholder textures for machines --- .../machines/tesla_receiver/overlay_side.png | Bin 0 -> 380 bytes .../tesla_receiver/overlay_side_active.png | Bin 0 -> 380 bytes .../block/machines/tesla_receiver/overlay_top.png | Bin 0 -> 447 bytes .../tesla_receiver/overlay_top_active.png | Bin 0 -> 366 bytes .../block/machines/tesla_tower/overlay_front.png | Bin 0 -> 311 bytes .../machines/tesla_tower/overlay_front_active.png | Bin 0 -> 308 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side_active.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_top.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_top_active.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_tower/overlay_front.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_tower/overlay_front_active.png diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side.png new file mode 100644 index 0000000000000000000000000000000000000000..98f101765a8dc0f2d9a1c0da418f3cd2bba60575 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4T7F7jv*HQ$$$R;w`W#u;PjfzyJ45Y?dwnM zrG=H5rHzf7RruAJjfI7owFT18+&;?@%EWFFo1mn3CP82E)PiG&nMDus6-XU8c;d{5 z*Z=L?&e#7pkofS~(bbSKjM?Gb^TfooA0K|}H}ibzqYCeog66!rAhDb?E{riK!LeBzG%X#4>RGbzqYCeog66!rAhDb?E{riK!LeBzG%X#4>RGPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0aQsuK~y+Tos!Q= z!$1(mXE#ZMZSn#>fL8@?Lh;axf1rJhzJmv!p)cTB@T6F8f_f1|qNvM$~l=!HFfch8LJ( zC}{xpfrcGe2jlVUQj|1+@3<$tE0D5D+9F&+?mG>nY?1~r9d?gV!3vPFNgA-$(s}>t zr-LdOV<`8R=>5IzLaJ86O1)0)c5B|mate}NNdwk9m`$hi67YKhDVwB$&&h=Q@b59A z2RsFAa$9|jC>s~3+oz$sAH47e(?CgBAEOZ;Tm*Gzvy9K-d~<7^)brcB!%u;Fu*&h6 p%+TrCC12L*w7y-Ii4d(Z^ac4z^N?9=_s#$S002ovPDHLkV1oJu#p(b6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_top_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_top_active.png new file mode 100644 index 0000000000000000000000000000000000000000..aad06a210a6ab4d77bdc6f2ab73784328346d4c9 GIT binary patch literal 366 zcmV-!0g?WRP);V}SR$AJcnpA6<*6Nl$S!5vPduGc`r_Qn>qv-J;>I^nm5!}Jya>vg3 z&bif9PG&&JYfXY0T>6L*KNF~H3Cc#t5q$qX|9tx4V>|HMCte(o3S_r{ z;b03~kr-GI_s~Ex8eEP_r(PU_YdgM~C>aYSmbQ+)2m*=p&@@LX?XDwW09~>oLEteG zhMTLa1e1?b*^9#@FJ36uZUMt#JhGat)+~V&iGc}DIIk%7qcIA+344aiR4nNRco;6;6W!WzR9|G-ep9?Ah2F8Wi@TbF9%2VD0<*=ha9OaK4? M07*qoM6N<$f;_^XI{*Lx literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_tower/overlay_front.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_tower/overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0ba95ed03aacf92909b5b2f813a0aa36508837 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE%y{W;-5;PJdx@v7EBifGW?pUm*JqY60fmlux;TbdoIW~vFK@GffZKfKWe!}y zGOVn&K9hBtT(%in-w_cJnO0sfYX*bUj1Hyi5!>EBzgxSFQ?cM^Ud)!9otd-JS|9Iq z4?X)Wud?no+wHOgw-|5pF?5`ei3l@I4Sl~oVXY~HP2=_S)}28`Y)V3VzF%PGU(kNi z^3x)YY2wWXQoh7O{U^6GnEd`lPZjR_J03I-XB^C@!PF5Hv#>_;OXk;vd$@?2>>0N BbQAyp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_tower/overlay_front_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_tower/overlay_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..5969e811b1b7e497e846c51d69be911267030b95 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p<)L71^VC4M4M@T8}UV~BU{x z3)fjMa$m?=xQfS`++qB!X25tU=}K$7k!0O{8-)@@mS3&0XX1k`433GE?fL#>&g%>3 zo_{JVoFK+i7V+qmWX9Um$1iIho)Bcr*44hZqr89Sl1pMr4PG0*J-OHX+2njlz$%Nd zUXCSRTbnawDrFvJi||b-W`Cf}zF|-Jan-7G3YIsVSQx~v3ohph&FzfSRG%&B?4;OERq%v)Yx_xS$#{e6!wOi=>GD!ZM3Yy^6W!PC{xWt~$(69C~Z BcL)Fg literal 0 HcmV?d00001 From 86944b66e3b3360d907b13ae5a16bfeab4bbcd63 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 04:07:20 -0400 Subject: [PATCH 054/159] Improve interaction result returning for calibrator and handheld receiver --- .../item/teslalinkable/TeslaCalibratorItem.java | 13 +++++++++---- .../teslalinkable/TeslaHandheldReceiverItem.java | 7 ++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java index 4dbeb994..eab15551 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java @@ -32,20 +32,25 @@ public TeslaCalibratorItem(Properties properties) @Override public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { + boolean client = context.getLevel().isClientSide(); Player player = context.getPlayer(); if(player != null) { InteractionHand usedHand = context.getHand(); ItemStack itemStack = player.getItemInHand(usedHand); BlockEntity hitBlockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); - if(!context.getLevel().isClientSide()) + if(player.isShiftKeyDown() && hitBlockEntity instanceof TeslaTransmitter) { - if(player.isShiftKeyDown() && hitBlockEntity instanceof TeslaTransmitter) + if(!client) { itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new WorldPos(context.getLevel(), context.getClickedPos())); player.displayClientMessage(EIText.TESLA_CALIBRATOR_SELECTED.text(), true); } - else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachineBlockEntity receiver) + return InteractionResult.sidedSuccess(client); + } + else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachineBlockEntity receiver) + { + if(!client) { if(itemStack.has(EIComponents.SELECTED_TESLA_NETWORK)) { @@ -60,8 +65,8 @@ else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachi player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION.text(), true); } } + return InteractionResult.sidedSuccess(client); } - return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); } return InteractionResult.PASS; } diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java index 8066e473..c57fd346 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java @@ -31,21 +31,22 @@ public TeslaHandheldReceiverItem(Properties properties) @Override public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { + boolean client = context.getLevel().isClientSide(); Player player = context.getPlayer(); if(player != null) { InteractionHand usedHand = context.getHand(); ItemStack itemStack = player.getItemInHand(usedHand); BlockEntity hitBlockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); - if(!context.getLevel().isClientSide()) + if(hitBlockEntity instanceof TeslaTransmitter) { - if(hitBlockEntity instanceof TeslaTransmitter) + if(!client) { itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new WorldPos(context.getLevel(), context.getClickedPos())); player.displayClientMessage(EIText.TESLA_HANDHELD_SELECTED.text(), true); } + return InteractionResult.sidedSuccess(client); } - return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); } return InteractionResult.PASS; } From d75a460486f036bd21fcb1ad8dbd6ca57d86dbdb Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 04:12:41 -0400 Subject: [PATCH 055/159] Automatically apply network to receiver when holding calibrator in offhand --- .../teslalinkable/TeslaCalibratorItem.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java index eab15551..dd0ddf6f 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java @@ -11,6 +11,11 @@ import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; +import net.neoforged.bus.api.EventPriority; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.level.BlockEvent; +import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; @@ -22,6 +27,7 @@ import static aztech.modern_industrialization.MITooltips.*; import static net.swedz.extended_industrialization.EITooltips.*; +@EventBusSubscriber(modid = EI.ID) public final class TeslaCalibratorItem extends Item { public TeslaCalibratorItem(Properties properties) @@ -29,6 +35,28 @@ public TeslaCalibratorItem(Properties properties) super(properties.stacksTo(1)); } + @SubscribeEvent(priority = EventPriority.LOWEST) + private static void onPlaceMachineWithConfig(BlockEvent.EntityPlaceEvent event) + { + if(event.getEntity() instanceof Player player) + { + ItemStack offhand = player.getItemInHand(InteractionHand.OFF_HAND); + if(offhand.has(EIComponents.SELECTED_TESLA_NETWORK)) + { + WorldPos key = offhand.get(EIComponents.SELECTED_TESLA_NETWORK); + + BlockEntity blockEntity = event.getLevel().getBlockEntity(event.getPos()); + if(blockEntity instanceof TeslaReceiverMachineBlockEntity receiver) + { + receiver.setNetwork(key); + receiver.setChanged(); + receiver.sync(); + player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_SUCCESS.text(), true); + } + } + } + } + @Override public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { From 5032719ec40599327a56feb43e8da15a0b940e0d Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 04:41:58 -0400 Subject: [PATCH 056/159] Redo tesla handheld receiver texture --- .../textures/item/tesla_handheld_receiver.png | Bin 830 -> 848 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver.png b/src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver.png index 65ac5fad6f2cba91783d789f45f8853bd587e2e9..78d7ac3c7bb582e70b8d1087de91d8b9dfffa56f 100644 GIT binary patch delta 417 zcmV;S0bc&T2G9nux&eP0001r;0aaAwsQ>^0bV)=(R5(wCk}*ibP!NVM#lfk#xD=s- zYljR@mQ0D8h?RmZbTO;AICL#ef@G7fag=~iQ8&q|6dX#N1-k|85Lyau&;HlX-&rYC z6qLAHtx~D9L$%roS(ZhOW`k~Rm(9_*Y(t7IYd6rxz%B5+U)DLQ zL#nvy;UmHblU&yo)9I9ro59Wc=`;8zr0Jd=i1WKwErh8|88sjX0`AEept-*JLl3{( zYLL$jEe`KdIfh<_Off5Gpauk|fcuI%6>Wc%ky%A$`5|v=~5?-eNMDa1JsCO1!&Y zlNI7==?(Jm5pjb`r6NmnAk34V97Pd@VYqk;wryws5NjELn26{P2_Y7EYpqVS00000 LNkvXXu0mjfU;o2w delta 399 zcmV;A0dW4%2EGQcx&eP5001r@0eJ3#UjP6BVo5|nR5(v#{Qv(y11_+E;UQQufI*%S znGK?00K))~LYRhIT`R$2YGvUV8exD5N`p0`YnG9bVc_84U^rMf0qzvw29PZQ3xK=;!t4J(08*%QK|#U)@bK{e=yHF^7=;7Fixw>cQa}wE zUjJ95d4SpO?(PsVG(&L4LPtl(|7Xvh!JR*8(j-PnNl7pp<_!=Ve>7%#|Nr^#AA?=P zJg{Pz0muLz3ox*F@nX1%AAbL3km2Hl@)#IAJUlRL!|DQ<^FaVP23D_Ljgc1cdSPd_ z-~Z=7e=)c>&nJJ*3&_p~fji&6F&K&o!!?3jgW(O33y^Vpd;9;~+*}~@Kf{H}sQ>em zA<-8S67nB}L2P7<(+hcdd0+`x7+~{17@(Voj6t>^DF_5IvCD%nRu@c7botNC%)%hR t$_$RmuYdnANOQ0=1WezG<_ZP|0EC%NJ)hc80{{R307(Z$PDHLkV1j$ZuxJ1P From 5f95f80e735296c0b4a9ec523ce225ab6582f378 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 18:30:38 -0400 Subject: [PATCH 057/159] Further improvements to handheld receiver texture --- .../textures/item/tesla_handheld_receiver.png | Bin 848 -> 839 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver.png b/src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver.png index 78d7ac3c7bb582e70b8d1087de91d8b9dfffa56f..91ce338c6b46ef3b046a5f19399015dae098ecd8 100644 GIT binary patch delta 408 zcmV;J0cZZu2FC`lx&eO~001r-0r>63!~g&RYe_^wR5(wCl08VnKorMcigR%;LI>9f z8JrARlDb8)BG`_}CdI|URa{-Q9qTBWDt=6oRS7thb{6cGp+jiMeD=NGU2`EdKe)Vi z@9zKZ-Mau|3`XpCX&Cus^Z$m1n@^yrJ;RJafqWc&3Kq~X3vPdU@o#x(&GGPNqfk&2 zV$(FC(b$1@`xGq8f=;&s_l{4=absD9h^*l0{F;XV=JPq(%Wzm(foul$0>{_Y8ClUt zVK)tGA|}F4Whd^w)yvG)s?p%pRP zwxwSdlNDh3~_~+hkqWl}}xxFGq-fK1a&QC=}wwB7rnb$w!m~LcDv><`IA-Nl1hP z5s3t{2fD8F&^0bV)=(R5(wCk}*ibP!NVM#lfk#xD=s- zYljR@mQ0D8h?RmZbTO;AICL#ef@G7fag=~iQ8&q|6dX#N1-k|85Lyau&;HlX-&rYC z6qLAHtx~D9L$%roS(ZhOW`k~Rm(9_*Y(t7IYd6rxz%B5+U)DLQ zL#nvy;UmHblU&yo)9I9ro59Wc=`;8zr0Jd=i1WKwErh8|88sjX0`AEept-*JLl3{( zYLL$jEe`KdIfh<_Off5Gpauk|fcuI%6>Wc%ky%A$`5|v=~5?-eNMDa1JsCO1!&Y zlNI7==?(Jm5pjb`r6NmnAk34V97Pd@VYqk;wryws5NjELn26{P2_Y7EYpqVS00000 LNkvXXu0mjfZm7d` From 3b8278fe9b0da097e098a6668f6ff481bd9f342d Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 3 Oct 2024 23:03:10 -0400 Subject: [PATCH 058/159] Use a distinct slot atlas texture from the MI one --- .../guicomponent/EIModularSlotPanelSlots.java | 18 +++++++++++++++--- .../modularslots/ModularSlotPanel.java | 8 ++++---- .../modularslots/ModularSlotPanelClient.java | 7 +++++++ .../textures/gui/container/slot_atlas.png | Bin 0 -> 1522 bytes 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/assets/extended_industrialization/textures/gui/container/slot_atlas.png diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java index 087d8826..8997fb3d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java @@ -19,7 +19,7 @@ public final class EIModularSlotPanelSlots public static final ResourceLocation TESLA_TOWER_UPGRADE = register( "tesla_tower_upgrade", SlotGroup.UPGRADES, 64, (stack) -> stack.is(EIItems.TESLA_INTERDIMENSIONAL_UPGRADE.asItem()), - 0, 80, () -> line(EIText.TESLA_TOWER_UPGRADE) + 2, 0, () -> line(EIText.TESLA_TOWER_UPGRADE) ); public static void init() @@ -28,9 +28,21 @@ public static void init() private static ResourceLocation register(String name, SlotGroup group, int stackLimit, Predicate insertionChecker, - int u, int v, + int x, int y, Supplier tooltip) { - return ModularSlotPanel.registerSlot(EI.id(name), group, stackLimit, insertionChecker, u, v, tooltip); + return ModularSlotPanel.registerSlot( + EI.id(name), group, + stackLimit, insertionChecker, + EI.id("textures/gui/container/slot_atlas.png"), x * 18, y * 18, + tooltip + ); + } + + private static ResourceLocation register(String name, SlotGroup group, + int stackLimit, Predicate insertionChecker, + Supplier tooltip) + { + return register(name, group, stackLimit, insertionChecker, 0, 0, tooltip); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java index 9e372dad..a9590e08 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java @@ -40,20 +40,20 @@ public final class ModularSlotPanel public static ResourceLocation registerSlot(ResourceLocation id, SlotGroup group, int stackLimit, Predicate insertionChecker, - int u, int v, + ResourceLocation atlas, int u, int v, Supplier tooltip) { if(SLOTS.containsKey(id)) { throw new IllegalArgumentException("There is already a slot type registered for the id '" + id.toString() + "'"); } - SLOTS.put(id, new Slot(id, group, stackLimit, insertionChecker, u, v, tooltip)); + SLOTS.put(id, new Slot(id, group, stackLimit, insertionChecker, atlas, u, v, tooltip)); return id; } private static ResourceLocation registerMISlot(String name, SlotPanel.SlotType slotType) { - return registerSlot(MI.id(name), slotType.group, slotType.slotLimit, slotType.insertionChecker, slotType.u, slotType.v, () -> line(slotType.tooltip)); + return registerSlot(MI.id(name), slotType.group, slotType.slotLimit, slotType.insertionChecker, null, slotType.u, slotType.v, () -> line(slotType.tooltip)); } static Slot getSlot(ResourceLocation id) @@ -252,7 +252,7 @@ public boolean equals(Object o) public record Slot( ResourceLocation id, SlotGroup group, int stackLimit, Predicate insertionChecker, - int u, int v, + ResourceLocation atlas, int u, int v, Supplier tooltip ) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java index 16c69162..804e3b0d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java @@ -11,6 +11,7 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.Container; import net.minecraft.world.SimpleContainer; import net.minecraft.world.inventory.Slot; @@ -77,6 +78,12 @@ public int getMaxStackSize() return stackLimit.get(); } + @Override + public ResourceLocation getBackgroundAtlasLocation() + { + return slot.atlas(); + } + @Override public int getBackgroundU() { diff --git a/src/main/resources/assets/extended_industrialization/textures/gui/container/slot_atlas.png b/src/main/resources/assets/extended_industrialization/textures/gui/container/slot_atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..9a48a932ed8023133322b7abb7d85dee0c5101a5 GIT binary patch literal 1522 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$5xX)7d$|)7e=epeR2rGbfdS zLF4??iMAex9b}Hi2fOO(@|6h)o(Y)yW|2~#YM1MVfLmN^t!BjhV)d1pBqHv9aO;By z$CIueJQ^9!9_}dchoP{nAgE-b(EsToQ7v3?7VnPl-gEq}wL?b8jI^&u7<{*%4T%xj zyfbv;dr{^utp;rkXLOV&#+_O4`p2&J{`KX7^IHG+PMEb_;(>5y@)?8NN4$@2`rdx9 z$6qE*HB!}1eV)n7h9mtk;Wl-TV@e_)%uF<%JWHKVxcewynAMD_KD`xf7K^g1o^nU_ zhn|a`v(>A2>$#Kp5@%j(XRf;}<0|9rp};A~m8G$mNjfm9G)QMjM*OQs@`Zmri!`5T zHBU@t49%DjYyU&~&%0|{KK_-Sj+`%Q3+MC~F31J9%TcU-#tFN=A` zZV1Fr{>|I-^>_X${ADP-QnajOgq9QQiKlxKge zZ~JW1*Vn&4TYB&Q{rP3P@4nyt`fl;LwkoLB1g~G4JE%oY~i}U;q2)?xT6d zbsP+HKD_^4TAH7q|GRj#;d8mo3-Z1)^rZg%_3PIB>}ln9jOQDtFWoYNNJ~RFM z4W|C{&yAlIt0nUl%-zlYpdfR4&-vqDi$DMFKRcsG^1#!upKJwLna}lhmUVI*D3$xB z{NR=ggWmUaCIdmn9cO~s4k#T?ws~vLAlUHL_N(%Noq{vgNv7{&w>YoGxZ{ca_m$bx zl?=q{tS*~AW_Z54n&FsI-_w|)9ea+Sc`kde{8e1S&8&WgWXt1+_}aN^))oF;`knD~ z*ni#xoi|&%`PV#8v}cN{sc@P Date: Fri, 4 Oct 2024 04:31:29 -0400 Subject: [PATCH 059/159] Render arcs off the top-load of the tesla tower --- build.gradle | 16 ++++ gradle.properties | 4 +- .../extended_industrialization/EIClient.java | 8 +- .../tesla/TeslaPartHighlightRenderer.java | 42 --------- ....java => TeslaPartMultiblockRenderer.java} | 11 +-- .../client/tesla/TeslaPartRenderer.java | 82 +++++++++++++++++ ...TeslaPartSingleBlockHighlightRenderer.java | 22 ----- .../tesla/TeslaPartSingleBlockRenderer.java | 23 +++++ .../client/tesla/arcs/TeslaArcGenerator.java | 8 ++ .../client/tesla/arcs/TeslaArcs.java | 84 ++++++++++++++++++ .../teslatower/TeslaTowerBlockEntity.java | 34 ++++++- .../textures/vfx/tesla_arc.png | Bin 0 -> 168 bytes 12 files changed, 259 insertions(+), 75 deletions(-) delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartHighlightRenderer.java rename src/main/java/net/swedz/extended_industrialization/client/tesla/{TeslaPartMultiblockHighlightRenderer.java => TeslaPartMultiblockRenderer.java} (56%) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockHighlightRenderer.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockRenderer.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcGenerator.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java create mode 100644 src/main/resources/assets/extended_industrialization/textures/vfx/tesla_arc.png diff --git a/build.gradle b/build.gradle index 84e60252..eb56f784 100644 --- a/build.gradle +++ b/build.gradle @@ -71,6 +71,14 @@ repositories { includeGroup "top.theillusivec4.curios" } } + maven { + name = "BlameJared" + url = "https://maven.blamejared.com/" + content { + // Lodestone + includeGroup "team.lodestar.lodestone" + } + } } dependencies { @@ -112,6 +120,14 @@ dependencies { } else { compileOnly "top.theillusivec4.curios:curios-neoforge:${curios_version}" } + + jarJar(implementation("team.lodestar.lodestone:lodestone:${lodestone_version}")) { + version { + strictly lodestone_version_range + prefer lodestone_version + } + exclude group: 'top.theillusivec4.curios', module: 'curios-neoforge' + } } tasks.named('jar') { diff --git a/gradle.properties b/gradle.properties index d818dcbd..f239ed97 100644 --- a/gradle.properties +++ b/gradle.properties @@ -47,4 +47,6 @@ mixinextras_version=0.3.5 accessories_version=1.0.0-beta.34+1.21 accessories_version_range=[1.0.0-beta.34-, 1.1.0-) curios_version=9.0.10+1.21 -curios_version_range=[9,) \ No newline at end of file +curios_version_range=[9,) +lodestone_version=1.21.1-1.7.0.71 +lodestone_version_range=[1.21.1-1.7.0.71,) \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 164aad20..41ea5848 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -32,8 +32,8 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; -import net.swedz.extended_industrialization.client.tesla.TeslaPartMultiblockHighlightRenderer; -import net.swedz.extended_industrialization.client.tesla.TeslaPartSingleBlockHighlightRenderer; +import net.swedz.extended_industrialization.client.tesla.TeslaPartMultiblockRenderer; +import net.swedz.extended_industrialization.client.tesla.TeslaPartSingleBlockRenderer; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; @@ -118,11 +118,11 @@ else if(blockEntity instanceof TeslaNetworkPart) { if(blockEntity instanceof MultiblockMachineBlockEntity) { - BlockEntityRenderers.register(type, TeslaPartMultiblockHighlightRenderer::new); + BlockEntityRenderers.register(type, TeslaPartMultiblockRenderer::new); } else { - BlockEntityRenderers.register(type, TeslaPartSingleBlockHighlightRenderer::new); + BlockEntityRenderers.register(type, TeslaPartSingleBlockRenderer::new); } } else if(blockEntity instanceof LargeTankMultiblockBlockEntity) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartHighlightRenderer.java deleted file mode 100644 index cd4f9ea6..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartHighlightRenderer.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.swedz.extended_industrialization.client.tesla; - -import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.util.RenderHelper; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.player.Player; -import net.swedz.extended_industrialization.EIComponents; -import net.swedz.extended_industrialization.api.WorldPos; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; - -import java.util.Optional; - -final class TeslaPartHighlightRenderer -{ - static void render(MachineBlockEntity machine, float tickDelta, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) - { - BlockPos pos = machine.getBlockPos(); - - getHeldNetworkKey().ifPresent((networkKey) -> - { - if(machine instanceof TeslaNetworkPart part && - part.hasNetwork() && part.getNetworkKey().equals(networkKey)) - { - matrices.pushPose(); - matrices.translate(-0.005, -0.005, -0.005); - matrices.scale(1.01f, 1.01f, 1.01f); - RenderHelper.drawOverlay(matrices, buffer, 111f / 256, 111f / 256, 1f, RenderHelper.FULL_LIGHT, overlay); - matrices.popPose(); - } - }); - } - - private static Optional getHeldNetworkKey() - { - Player player = Minecraft.getInstance().player; - return player.getMainHandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getMainHandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : - player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : Optional.empty(); - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockRenderer.java similarity index 56% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockHighlightRenderer.java rename to src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockRenderer.java index b30136cb..2506e533 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockHighlightRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockRenderer.java @@ -6,17 +6,18 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -public class TeslaPartMultiblockHighlightRenderer extends MultiblockMachineBER +public class TeslaPartMultiblockRenderer extends MultiblockMachineBER { - public TeslaPartMultiblockHighlightRenderer(BlockEntityRendererProvider.Context ctx) + public TeslaPartMultiblockRenderer(BlockEntityRendererProvider.Context ctx) { super(ctx); } @Override - public void render(MultiblockMachineBlockEntity machine, float tickDelta, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + public void render(MultiblockMachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { - super.render(machine, tickDelta, matrices, buffer, light, overlay); - TeslaPartHighlightRenderer.render(machine, tickDelta, matrices, buffer, light, overlay); + super.render(machine, partialTick, matrices, buffer, light, overlay); + + TeslaPartRenderer.render(machine, partialTick, matrices, buffer, light, overlay); } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java new file mode 100644 index 00000000..c4a67939 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -0,0 +1,82 @@ +package net.swedz.extended_industrialization.client.tesla; + +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.util.RenderHelper; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIComponents; +import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.client.tesla.arcs.TeslaArcGenerator; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import team.lodestar.lodestone.handlers.RenderHandler; +import team.lodestar.lodestone.registry.client.LodestoneRenderTypes; +import team.lodestar.lodestone.systems.rendering.LodestoneRenderType; +import team.lodestar.lodestone.systems.rendering.VFXBuilders; +import team.lodestar.lodestone.systems.rendering.rendeertype.RenderTypeToken; +import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; + +import java.util.Optional; + +final class TeslaPartRenderer +{ + private static void renderHighlight(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + BlockPos pos = machine.getBlockPos(); + + getHeldNetworkKey().ifPresent((networkKey) -> + { + if(machine instanceof TeslaNetworkPart part && + part.hasNetwork() && part.getNetworkKey().equals(networkKey)) + { + matrices.pushPose(); + matrices.translate(-0.005, -0.005, -0.005); + matrices.scale(1.01f, 1.01f, 1.01f); + RenderHelper.drawOverlay(matrices, buffer, 111f / 256, 111f / 256, 1f, RenderHelper.FULL_LIGHT, overlay); + matrices.popPose(); + } + }); + } + + private static Optional getHeldNetworkKey() + { + Player player = Minecraft.getInstance().player; + return player.getMainHandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getMainHandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : + player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : Optional.empty(); + } + + private static RenderTypeToken getRenderTypeToken() + { + return RenderTypeToken.createToken(EI.id("textures/vfx/tesla_arc.png")); + } + + private static final LodestoneRenderType RENDER_LAYER = LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyAndCache(getRenderTypeToken()); + + private static void renderArcs(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + if(machine instanceof TeslaArcGenerator generator && generator.shouldRenderTeslaArcs()) + { + VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld(); + builder.replaceBufferSource(RenderHandler.LATE_DELAYED_RENDER.getTarget()) + .setRenderType(RENDER_LAYER) + .setColorRaw(1f, 1f, 1f) + .setAlpha(0.9f); + + for(TrailPointBuilder trail : generator.getTeslaArcs().getTrails()) + { + matrices.pushPose(); + builder.renderTrail(matrices, trail.getTrailPoints(), (i) -> 1 - i); + matrices.popPose(); + } + } + } + + static void render(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + renderHighlight(machine, partialTick, matrices, buffer, light, overlay); + renderArcs(machine, partialTick, matrices, buffer, light, overlay); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockHighlightRenderer.java deleted file mode 100644 index 8247b1ca..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockHighlightRenderer.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.swedz.extended_industrialization.client.tesla; - -import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; - -public class TeslaPartSingleBlockHighlightRenderer extends MachineBlockEntityRenderer -{ - public TeslaPartSingleBlockHighlightRenderer(BlockEntityRendererProvider.Context ctx) - { - super(ctx); - } - - @Override - public void render(MachineBlockEntity machine, float tickDelta, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) - { - super.render(machine, tickDelta, matrices, buffer, light, overlay); - TeslaPartHighlightRenderer.render(machine, tickDelta, matrices, buffer, light, overlay); - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockRenderer.java new file mode 100644 index 00000000..fe2e3818 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockRenderer.java @@ -0,0 +1,23 @@ +package net.swedz.extended_industrialization.client.tesla; + +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; + +public class TeslaPartSingleBlockRenderer extends MachineBlockEntityRenderer +{ + public TeslaPartSingleBlockRenderer(BlockEntityRendererProvider.Context ctx) + { + super(ctx); + } + + @Override + public void render(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + super.render(machine, partialTick, matrices, buffer, light, overlay); + + TeslaPartRenderer.render(machine, partialTick, matrices, buffer, light, overlay); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcGenerator.java new file mode 100644 index 00000000..ba234595 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcGenerator.java @@ -0,0 +1,8 @@ +package net.swedz.extended_industrialization.client.tesla.arcs; + +public interface TeslaArcGenerator +{ + TeslaArcs getTeslaArcs(); + + boolean shouldRenderTeslaArcs(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java new file mode 100644 index 00000000..36e55b00 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java @@ -0,0 +1,84 @@ +package net.swedz.extended_industrialization.client.tesla.arcs; + +import com.google.common.collect.Lists; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; + +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.function.Supplier; + +public final class TeslaArcs +{ + private static final Random RANDOM = new Random(); + + private final int arcDuration; + private final int arcs; + private final int minLength; + private final int maxLength; + private final float maxSectionLength; + + private final Supplier offset; + + private final List trails = Lists.newArrayList(); + + public TeslaArcs(int arcDuration, int arcs, int minLength, int maxLength, float maxSectionLength, + Supplier offset) + { + this.arcDuration = arcDuration; + this.arcs = arcs; + this.minLength = minLength; + this.maxLength = maxLength; + this.maxSectionLength = maxSectionLength; + this.offset = offset; + } + + public List getTrails() + { + return Collections.unmodifiableList(trails); + } + + private void createArc(Vec3 offset) + { + TrailPointBuilder trail = TrailPointBuilder.create(arcDuration); + int length = RANDOM.nextInt(minLength, maxLength + 1); + double x = offset.x(); + double y = offset.y(); + double z = offset.z(); + float dirX = RANDOM.nextFloat(3) - 1; + float dirY = RANDOM.nextFloat(3) - 1; + float dirZ = RANDOM.nextFloat(3) - 1; + for(int point = 0; point < length; point++) + { + trail.addTrailPoint(new Vec3(x, y, z)); + float sectionLength = maxSectionLength / (point + 1); + float offsetX = RANDOM.nextFloat(3) - 1; + float offsetY = RANDOM.nextFloat(3) - 1; + float offsetZ = RANDOM.nextFloat(3) - 1; + x += sectionLength * offsetX * dirX; + y += sectionLength * offsetY * dirY; + z += sectionLength * offsetZ * dirZ; + } + trails.add(trail); + } + + public void tick() + { + trails.removeIf((trail) -> + { + trail.tickTrailPoints(); + return trail.getTrailPoints().isEmpty(); + }); + + if(trails.size() < arcs) + { + Vec3 offset = this.offset.get(); + int arcsToCreate = arcs - trails.size(); + for(int arc = 0; arc < arcsToCreate; arc++) + { + this.createArc(offset); + } + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index f6a9f24e..07903965 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -13,12 +13,17 @@ import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; import aztech.modern_industrialization.machines.multiblocks.ShapeMatcher; import com.google.common.collect.Lists; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.client.tesla.arcs.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.arcs.TeslaArcs; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; @@ -35,7 +40,7 @@ import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; -public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate +public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaArcGenerator { private final RedstoneControlComponent redstoneControl; private final TeslaTowerUpgradeComponent upgrade; @@ -44,6 +49,8 @@ public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEnti private final TeslaTransmitterComponent transmitter; + private final TeslaArcs arcs; + private CableTier cableTier; public TeslaTowerBlockEntity(BEP bep) @@ -74,6 +81,18 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) () -> TeslaTransferLimits.of(cableTier, SHAPES.tiers().get(activeShape.getActiveShapeIndex())) ); + arcs = new TeslaArcs( + 1, 8, 4, 8, 8, + () -> + { + Direction facing = orientation.facingDirection; + BlockPos topLoadCenter = worldPosition + .relative(facing.getAxis(), -3) + .above(14); + return Vec3.atCenterOf(topLoadCenter.subtract(worldPosition)); + } + ); + this.registerComponents(redstoneControl, upgrade, transmitter); this.registerGuiComponent(new ModularMultiblockGui.Server(0, ModularMultiblockGui.HEIGHT, (content) -> @@ -125,6 +144,18 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) .with(EIModularSlotPanelSlots.TESLA_TOWER_UPGRADE, upgrade)); } + @Override + public TeslaArcs getTeslaArcs() + { + return arcs; + } + + @Override + public boolean shouldRenderTeslaArcs() + { + return isActive.isActive; + } + @Override public List getEnergyComponents() { @@ -209,6 +240,7 @@ public void tick() if(level.isClientSide()) { + arcs.tick(); return; } diff --git a/src/main/resources/assets/extended_industrialization/textures/vfx/tesla_arc.png b/src/main/resources/assets/extended_industrialization/textures/vfx/tesla_arc.png new file mode 100644 index 0000000000000000000000000000000000000000..79d72613832c50cb919d479b93c74ac9589787cd GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p?vK$y{C-$S4zgRQ5FV~B-+@}K|z_j58cH}eTZGi;O;&}KH| z7cgctH2T4QWPalhJ%RZxkF;NOd9W>J>yct$TFl0?hmnVep>Q8(z#;X_BS3=~JYD@< J);T3K0RW_2D}?|6 literal 0 HcmV?d00001 From 6f8468ca71fb37c24c5400ed314fd1b244124807 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 4 Oct 2024 15:59:38 -0400 Subject: [PATCH 060/159] Shorten arc length --- .../client/tesla/TeslaPartRenderer.java | 7 +------ .../multiblock/teslatower/TeslaTowerBlockEntity.java | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index c4a67939..831d880c 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -48,12 +48,7 @@ private static Optional getHeldNetworkKey() player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : Optional.empty(); } - private static RenderTypeToken getRenderTypeToken() - { - return RenderTypeToken.createToken(EI.id("textures/vfx/tesla_arc.png")); - } - - private static final LodestoneRenderType RENDER_LAYER = LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyAndCache(getRenderTypeToken()); + private static final LodestoneRenderType RENDER_LAYER = LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyAndCache(RenderTypeToken.createToken(EI.id("textures/vfx/tesla_arc.png"))); private static void renderArcs(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 07903965..b78f853d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -82,7 +82,7 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) ); arcs = new TeslaArcs( - 1, 8, 4, 8, 8, + 1, 8, 4, 8, 5, () -> { Direction facing = orientation.facingDirection; From 7a363316b4dfd0159b822a7672142d15d3fcad4d Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 4 Oct 2024 17:36:18 -0400 Subject: [PATCH 061/159] Make arcs less noisy and fade in/out quickly --- .../api/Assert.java | 82 +++++++++++++++++++ .../client/tesla/TeslaPartRenderer.java | 12 +++ .../client/tesla/arcs/TeslaArcs.java | 66 ++++++++++++--- .../teslatower/TeslaTowerBlockEntity.java | 2 +- 4 files changed, 150 insertions(+), 12 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/api/Assert.java diff --git a/src/main/java/net/swedz/extended_industrialization/api/Assert.java b/src/main/java/net/swedz/extended_industrialization/api/Assert.java new file mode 100644 index 00000000..4b9303ed --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/api/Assert.java @@ -0,0 +1,82 @@ +package net.swedz.extended_industrialization.api; + +import java.util.Objects; + +public final class Assert +{ + public static void that(boolean bool, String message, ThrowableSupplier throwable) + { + if(!bool) + { + throw throwable.apply(message); + } + } + + public static void that(boolean bool, String message) + { + that(bool, message, IllegalArgumentException::new); + } + + public static void that(boolean bool, ThrowableSupplier throwable) + { + that(bool, null, throwable); + } + + public static void that(boolean bool) + { + that(bool, (String) null); + } + + public static void notNull(Object object, String message, ThrowableSupplier throwable) + { + that(object != null, message, throwable); + } + + public static void notNull(Object object, String message) + { + notNull(object != null, message, NullPointerException::new); + } + + public static void notNull(Object object, ThrowableSupplier throwable) + { + notNull(object, null, throwable); + } + + public static void notNull(Object object) + { + notNull(object, (String) null); + } + + public static void noneNull(Object... objects) + { + for(Object object : objects) + { + that(object != null, null, NullPointerException::new); + } + } + + public static void equals(Object a, Object b, String message, ThrowableSupplier throwable) + { + that(Objects.equals(a, b), message, throwable); + } + + public static void equals(Object a, Object b, String message) + { + equals(a, b, message, IllegalArgumentException::new); + } + + public static void equals(Object a, Object b, ThrowableSupplier throwable) + { + equals(a, b, null, throwable); + } + + public static void equals(Object a, Object b) + { + equals(a, b, (String) null); + } + + public interface ThrowableSupplier + { + RuntimeException apply(String message); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 831d880c..913a0a65 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -17,8 +17,10 @@ import team.lodestar.lodestone.systems.rendering.LodestoneRenderType; import team.lodestar.lodestone.systems.rendering.VFXBuilders; import team.lodestar.lodestone.systems.rendering.rendeertype.RenderTypeToken; +import team.lodestar.lodestone.systems.rendering.trail.TrailPoint; import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; +import java.util.List; import java.util.Optional; final class TeslaPartRenderer @@ -62,8 +64,18 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po for(TrailPointBuilder trail : generator.getTeslaArcs().getTrails()) { + List points = trail.getTrailPoints(); + if(points.size() < 2) + { + continue; + } + int ticks = points.getFirst().getTimeActive(); + builder.setAlpha(0.9f * (ticks == 0 ? partialTick : ticks == generator.getTeslaArcs().duration() ? (1 - partialTick) : 1)); + matrices.pushPose(); + builder.renderTrail(matrices, trail.getTrailPoints(), (i) -> 1 - i); + matrices.popPose(); } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java index 36e55b00..97575ed5 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java @@ -2,6 +2,7 @@ import com.google.common.collect.Lists; import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.api.Assert; import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; import java.util.Collections; @@ -26,6 +27,13 @@ public final class TeslaArcs public TeslaArcs(int arcDuration, int arcs, int minLength, int maxLength, float maxSectionLength, Supplier offset) { + Assert.that(arcDuration > 0); + Assert.that(arcs > 0); + Assert.that(minLength > 0); + Assert.that(maxLength > 0 && maxLength >= minLength); + Assert.that(maxSectionLength > 0); + Assert.notNull(offset); + this.arcDuration = arcDuration; this.arcs = arcs; this.minLength = minLength; @@ -34,11 +42,46 @@ public TeslaArcs(int arcDuration, int arcs, int minLength, int maxLength, float this.offset = offset; } + public int duration() + { + return arcDuration; + } + + public int count() + { + return arcs; + } + + public int minLength() + { + return minLength; + } + + public int maxLength() + { + return maxLength; + } + + public float maxSectionLength() + { + return maxSectionLength; + } + + public Vec3 offset() + { + return offset.get(); + } + public List getTrails() { return Collections.unmodifiableList(trails); } + private float randomOffset() + { + return RANDOM.nextFloat(3) - 1; + } + private void createArc(Vec3 offset) { TrailPointBuilder trail = TrailPointBuilder.create(arcDuration); @@ -46,16 +89,16 @@ private void createArc(Vec3 offset) double x = offset.x(); double y = offset.y(); double z = offset.z(); - float dirX = RANDOM.nextFloat(3) - 1; - float dirY = RANDOM.nextFloat(3) - 1; - float dirZ = RANDOM.nextFloat(3) - 1; - for(int point = 0; point < length; point++) + float dirX = this.randomOffset(); + float dirY = this.randomOffset(); + float dirZ = this.randomOffset(); + for(int i = 0; i < length; i++) { trail.addTrailPoint(new Vec3(x, y, z)); - float sectionLength = maxSectionLength / (point + 1); - float offsetX = RANDOM.nextFloat(3) - 1; - float offsetY = RANDOM.nextFloat(3) - 1; - float offsetZ = RANDOM.nextFloat(3) - 1; + float sectionLength = maxSectionLength / (i + 1); + float offsetX = this.randomOffset(); + float offsetY = this.randomOffset(); + float offsetZ = this.randomOffset(); x += sectionLength * offsetX * dirX; y += sectionLength * offsetY * dirY; z += sectionLength * offsetZ * dirZ; @@ -73,9 +116,10 @@ public void tick() if(trails.size() < arcs) { - Vec3 offset = this.offset.get(); - int arcsToCreate = arcs - trails.size(); - for(int arc = 0; arc < arcsToCreate; arc++) + Vec3 offset = this.offset(); + int maxCreate = arcs - trails.size(); + int create = Math.max(Math.min(arcs / 2, maxCreate), 1); + for(int i = 0; i < create; i++) { this.createArc(offset); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index b78f853d..d679d409 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -82,7 +82,7 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) ); arcs = new TeslaArcs( - 1, 8, 4, 8, 5, + 2, 6, 4, 8, 5, () -> { Direction facing = orientation.facingDirection; From ad75a9f09f1aad12ed200d068a9d47dbc2171845 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 4 Oct 2024 18:12:06 -0400 Subject: [PATCH 062/159] Extend arcs over time --- .../client/tesla/TeslaPartRenderer.java | 7 +++++- .../client/tesla/arcs/TeslaArcs.java | 23 +++++++++++++++---- .../teslatower/TeslaTowerBlockEntity.java | 2 +- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 913a0a65..87ce91c3 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -71,10 +71,15 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po } int ticks = points.getFirst().getTimeActive(); builder.setAlpha(0.9f * (ticks == 0 ? partialTick : ticks == generator.getTeslaArcs().duration() ? (1 - partialTick) : 1)); + int halfPoints = points.size() / 2; + if(ticks == 0 || ticks == 1) + { + points = points.subList(0, (int) (halfPoints * partialTick) + (ticks == 1 ? halfPoints : 0)); + } matrices.pushPose(); - builder.renderTrail(matrices, trail.getTrailPoints(), (i) -> 1 - i); + builder.renderTrail(matrices, points, (i) -> 1 - i); matrices.popPose(); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java index 97575ed5..f5435a82 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java @@ -19,12 +19,15 @@ public final class TeslaArcs private final int minLength; private final int maxLength; private final float maxSectionLength; + private final int sectionSplits; private final Supplier offset; private final List trails = Lists.newArrayList(); - public TeslaArcs(int arcDuration, int arcs, int minLength, int maxLength, float maxSectionLength, + public TeslaArcs(int arcDuration, int arcs, + int minLength, int maxLength, + float maxSectionLength, int sectionSplits, Supplier offset) { Assert.that(arcDuration > 0); @@ -32,6 +35,7 @@ public TeslaArcs(int arcDuration, int arcs, int minLength, int maxLength, float Assert.that(minLength > 0); Assert.that(maxLength > 0 && maxLength >= minLength); Assert.that(maxSectionLength > 0); + Assert.that(sectionSplits > 0); Assert.notNull(offset); this.arcDuration = arcDuration; @@ -39,6 +43,7 @@ public TeslaArcs(int arcDuration, int arcs, int minLength, int maxLength, float this.minLength = minLength; this.maxLength = maxLength; this.maxSectionLength = maxSectionLength; + this.sectionSplits = sectionSplits; this.offset = offset; } @@ -67,6 +72,11 @@ public float maxSectionLength() return maxSectionLength; } + public int sectionSplits() + { + return sectionSplits; + } + public Vec3 offset() { return offset.get(); @@ -94,14 +104,17 @@ private void createArc(Vec3 offset) float dirZ = this.randomOffset(); for(int i = 0; i < length; i++) { - trail.addTrailPoint(new Vec3(x, y, z)); float sectionLength = maxSectionLength / (i + 1); float offsetX = this.randomOffset(); float offsetY = this.randomOffset(); float offsetZ = this.randomOffset(); - x += sectionLength * offsetX * dirX; - y += sectionLength * offsetY * dirY; - z += sectionLength * offsetZ * dirZ; + for(int j = 0; j < sectionSplits; j++) + { + trail.addTrailPoint(new Vec3(x, y, z)); + x += (sectionLength * offsetX * dirX) / sectionSplits; + y += (sectionLength * offsetY * dirY) / sectionSplits; + z += (sectionLength * offsetZ * dirZ) / sectionSplits; + } } trails.add(trail); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index d679d409..39a6ba58 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -82,7 +82,7 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) ); arcs = new TeslaArcs( - 2, 6, 4, 8, 5, + 3, 6, 4, 8, 5, 10, () -> { Direction facing = orientation.facingDirection; From 620c96abdc5f1be08838b71b002403063ce41205 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 4 Oct 2024 18:28:27 -0400 Subject: [PATCH 063/159] Fix trend for arcs to go positive directions --- .../extended_industrialization/client/tesla/arcs/TeslaArcs.java | 2 +- .../multiblock/teslatower/TeslaTowerBlockEntity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java index f5435a82..76fe1095 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java @@ -89,7 +89,7 @@ public List getTrails() private float randomOffset() { - return RANDOM.nextFloat(3) - 1; + return RANDOM.nextFloat(2) - 1; } private void createArc(Vec3 offset) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 39a6ba58..c2d91d53 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -82,7 +82,7 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) ); arcs = new TeslaArcs( - 3, 6, 4, 8, 5, 10, + 3, 6, 4, 8, 15, 10, () -> { Direction facing = orientation.facingDirection; From 27cc18d9815145c653db28a469f43c0185002d74 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 5 Oct 2024 03:58:36 -0400 Subject: [PATCH 064/159] Start work on rendering plasma on the top-load of the tower --- .../client/tesla/TeslaPartRenderer.java | 171 +++++++++++++++++- .../textures/vfx/plasma_overlay.png | Bin 0 -> 2202 bytes 2 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 87ce91c3..bbd695a4 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -2,11 +2,23 @@ import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.util.RenderHelper; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.RenderType; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.BooleanOp; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.api.WorldPos; @@ -23,6 +35,8 @@ import java.util.List; import java.util.Optional; +import static net.minecraft.client.renderer.RenderStateShard.*; + final class TeslaPartRenderer { private static void renderHighlight(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) @@ -50,7 +64,7 @@ private static Optional getHeldNetworkKey() player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : Optional.empty(); } - private static final LodestoneRenderType RENDER_LAYER = LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyAndCache(RenderTypeToken.createToken(EI.id("textures/vfx/tesla_arc.png"))); + private static final LodestoneRenderType TESLA_ARC = LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyAndCache(RenderTypeToken.createToken(EI.id("textures/vfx/tesla_arc.png"))); private static void renderArcs(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { @@ -58,7 +72,7 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po { VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld(); builder.replaceBufferSource(RenderHandler.LATE_DELAYED_RENDER.getTarget()) - .setRenderType(RENDER_LAYER) + .setRenderType(TESLA_ARC) .setColorRaw(1f, 1f, 1f) .setAlpha(0.9f); @@ -86,9 +100,162 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po } } + private static final VoxelShape TESLA_TOP_LOAD_SHAPE; + + static + { + VoxelShape shape = Shapes.empty(); + + for(int y = -2; y <= 2; y++) + { + for(int x = -1; x <= 1; x++) + { + for(int z = -1; z <= 1; z++) + { + shape = Shapes.joinUnoptimized(shape, Shapes.create(AABB.unitCubeFromLowerCorner(new Vec3(x, y, z)).inflate(0.05)), BooleanOp.OR); + } + } + } + + for(int y = -1; y <= 1; y++) + { + for(int x = -2; x <= 2; x++) + { + for(int z = -1; z <= 1; z++) + { + shape = Shapes.joinUnoptimized(shape, Shapes.create(AABB.unitCubeFromLowerCorner(new Vec3(x, y, z)).inflate(0.05)), BooleanOp.OR); + if(x != z) + { + shape = Shapes.joinUnoptimized(shape, Shapes.create(AABB.unitCubeFromLowerCorner(new Vec3(z, y, x)).inflate(0.05)), BooleanOp.OR); + } + } + } + } + + TESLA_TOP_LOAD_SHAPE = shape; + } + + private static RenderType getPlasmaRenderType(float u, float v) + { + return RenderType.create( + "plasma", DefaultVertexFormat.NEW_ENTITY, + VertexFormat.Mode.QUADS, 1536, + false, true, + RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENERGY_SWIRL_SHADER) + .setTextureState(new RenderStateShard.TextureStateShard(EI.id("textures/vfx/plasma_overlay.png"), false, false)) + .setTexturingState(new RenderStateShard.OffsetTexturingStateShard(u, v)) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setCullState(NO_CULL) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(false) + ); + } + + private static void renderPlasma(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + matrices.pushPose(); + + float tick = Minecraft.getInstance().levelRenderer.getTicks() + partialTick; + float speed = 0.015f; + float u = Mth.cos(tick * speed) * 0.5f % 1f; + float v = tick * speed * 0.75f % 1f; + VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); + + for(AABB box : TESLA_TOP_LOAD_SHAPE.toAabbs()) + { + for(Direction direction : Direction.values()) + { + renderPlasmaAddVertexesFace( + matrices, light, overlay, vc, direction, + (float) box.minX, (float) box.minY, (float) box.minZ, + (float) box.maxX, (float) box.maxY, (float) box.maxZ, + 0, 0 + ); + } + } + + /*LevelRenderer.renderVoxelShape( + matrices, + buffer.getBuffer(RenderType.lineStrip()), + TESLA_TOP_LOAD_SHAPE, + 0, 0, 0, + 0f, 0f, 1f, 1f, true + );*/ + + matrices.popPose(); + } + + private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, int overlay, + VertexConsumer vc, + Direction direction, + float x1, float y1, float z1, + float x2, float y2, float z2, + float u, float v) + { + // TODO calculate UV offsets based on the side - currently it scales wrong on taller/wider faces + float offsetV = 0.5f * 3f; + float offsetU = (offsetV / 2f);// * 3f; + switch (direction) + { + case DOWN: + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u + offsetU, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u + offsetU, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u, v + offsetV); + break; + case UP: + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u + offsetU, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u, v + offsetV); + break; + case NORTH: + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u + offsetU, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u + offsetU, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u, v + offsetV); + break; + case SOUTH: + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u + offsetU, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u, v + offsetV); + break; + case EAST: + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u + offsetU, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u, v + offsetV); + break; + case WEST: + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u + offsetU, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u + offsetU, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u, v + offsetV); + break; + } + } + + private static void renderPlasmaAddVertex(PoseStack matrices, int light, int overlay, + VertexConsumer vc, + float x, float y, float z, + float u, float v) + { + PoseStack.Pose pose = matrices.last(); + vc.addVertex(pose, x, y, z) + .setColor(1f, 1f, 1f, 0.5f) + .setLight(light) + .setNormal(pose, 0, 0, 0) + .setOverlay(overlay) + .setUv(u, v); + } + static void render(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { renderHighlight(machine, partialTick, matrices, buffer, light, overlay); renderArcs(machine, partialTick, matrices, buffer, light, overlay); + renderPlasma(machine, partialTick, matrices, buffer, light, overlay); } } diff --git a/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png b/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..e04c89c41b193998e5f18c4b06afbc517a64e7c6 GIT binary patch literal 2202 zcmV;L2xa$)P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2ro%QK~!i%t(j?0 z6-^L@doJ#RJ1&U30>J=A{UC{niT_(a8I5bA#s#7g2ndJ*Zs3BB_0-$dZ{Mb8?v;2F zGJAJd)u~g}m*U2a8?Fii0|VvDmoE!{nZ@?)+smChck21quV3AkEnD2jj~|OYd-jye z%gaS)XJ`54%a`KRsZ-^fH*dmN!^6YnlP6DV$L8B@+qSvgyLam~ zYghT{(A5i=H6Bb)PZzKVx)YRE#$$s&br{b){xS=U z=co=?T3RZ;ef#DP9XbTfnm#lt$H?6SzkdDFBQ!mB>{#Uj#29r1=^+%)z9(y`HQ?&i zt4+_b!JjHjH&REWDXb0{8X77Q81lEB6o8)oRAGa5bac2MKYr*v913^_CG|o;M7M6; zsz(-$VERW*n4h25`{Z_xakp;W3g4wc17f%up9&@-9YY=P^y$;W=l{CF$XBX?zf?d^ zf2#QK;e%e2r@w#yb|WJr%7!y%&Xl75N=bdu10`=4umr}j4u5MMazVoZxoQ!oBPC+f!BjY4MHNV) zIOi#cXA3M(`vcyDlUQ1=Ebk}*^4z=5196=pU71fMJsu2#uQNqsB)?DiV1M1%@hoKp3^Y;f4@;4phPCr}2y;Ye;%R%7st{HNr#!lg@> z_~|Ve$$GfPsbajg@T6)hM^M>dyy;1k2Cx{Z2;lSPO9!lOrz^w*kp zIx~!oe{u3o#fiEoD4FJS4pbY;D}Q1{_BTQpA@?fNHbz4fJ9x}CLu@2i5W2u03*<-% zynXw2A=_t^U*BaROz4LQh&wYtTEz5caX1bK;AkirM>vHs5XKU9U`>$y_;T&qH9bOc zg2gvn8;p%H0t2M6pl{cHo%$Z{qM#OKt;(Y;93~J!6GHCC0+|D%M2SU%=pb1*X+laO zRy0$0@7^u0U%##qm8znC<4 zHTAcD=s^cZRcI%tb0DH7XjKcfUx-N?3?`Bmc_=O4q1GA%QVd7pSW+a`kbeQjEuKAl zrrj3;NF>O0p_99L^X7&p!kPX3{VJpgXj&HI)L`q4isN|FpsJ$4PTFy+-~M(MRjqRl z4QoA7Q^b$Kae@g3?Jmc^0ftEAs47}otu(<9jy+{e723--uxKgwOau+t?1Yk`EjR*_koPU*ZWFGbbI3MKFkG%sG ziXc&rp{{?_1RTrw*u*Z8euX2OI)sz}q-+c#2o=Z2$Jb46xtbF-2E-_TsUX@^5=0D; zO8ibh&4wBFdqGTNB1F3l3#0<*eVAvJ$aI6~Q892tY6yroTIOg&Roc{UhRpc75*P#H zi8i}I1Cgb&pyIHCD#Ex`LYs5yMiD!)3i^Xc>Messz8&KM%Fiwk$Txb#c=8sSV?6XV z;}JG}DZ;-p9<(wZr~}ME`=!UkDo6WPpoGye3PqLv)6>&V8Wg25&&go} Date: Sun, 6 Oct 2024 01:09:51 -0400 Subject: [PATCH 065/159] Mostly fix plasma face rendering --- .../client/tesla/TeslaPartRenderer.java | 163 ++++++++++-------- 1 file changed, 95 insertions(+), 68 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index bbd695a4..2f7e4061 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -2,11 +2,13 @@ import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.util.RenderHelper; +import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderType; @@ -15,8 +17,6 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.swedz.extended_industrialization.EI; @@ -32,6 +32,7 @@ import team.lodestar.lodestone.systems.rendering.trail.TrailPoint; import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -100,39 +101,23 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po } } - private static final VoxelShape TESLA_TOP_LOAD_SHAPE; + private record IgnoreSideShape(Direction ignoreSide, VoxelShape shape) + { + } + + private static final List TESLA_TOP_LOAD_SHAPES; static { - VoxelShape shape = Shapes.empty(); - - for(int y = -2; y <= 2; y++) - { - for(int x = -1; x <= 1; x++) - { - for(int z = -1; z <= 1; z++) - { - shape = Shapes.joinUnoptimized(shape, Shapes.create(AABB.unitCubeFromLowerCorner(new Vec3(x, y, z)).inflate(0.05)), BooleanOp.OR); - } - } - } - - for(int y = -1; y <= 1; y++) - { - for(int x = -2; x <= 2; x++) - { - for(int z = -1; z <= 1; z++) - { - shape = Shapes.joinUnoptimized(shape, Shapes.create(AABB.unitCubeFromLowerCorner(new Vec3(x, y, z)).inflate(0.05)), BooleanOp.OR); - if(x != z) - { - shape = Shapes.joinUnoptimized(shape, Shapes.create(AABB.unitCubeFromLowerCorner(new Vec3(z, y, x)).inflate(0.05)), BooleanOp.OR); - } - } - } - } - - TESLA_TOP_LOAD_SHAPE = shape; + List shapes = Lists.newArrayList(); + double inflate = 0.05; + shapes.add(new IgnoreSideShape(Direction.UP, Shapes.create(new AABB(-1, -2 - inflate, -1, 1 + 1, -2 + 1 - inflate, 1 + 1).inflate(inflate, 0, inflate)))); + shapes.add(new IgnoreSideShape(Direction.DOWN, Shapes.create(new AABB(-1, 2 + inflate, -1, 1 + 1, 2 + 1 + inflate, 1 + 1).inflate(inflate, 0, inflate)))); + shapes.add(new IgnoreSideShape(Direction.WEST, Shapes.create(new AABB(2 + inflate, -1, -1, 2 + 1 + inflate, 1 + 1, 1 + 1).inflate(0, inflate, inflate)))); + shapes.add(new IgnoreSideShape(Direction.EAST, Shapes.create(new AABB(-2 - inflate, -1, -1, -2 + 1 - inflate, 1 + 1, 1 + 1).inflate(0, inflate, inflate)))); + shapes.add(new IgnoreSideShape(Direction.NORTH, Shapes.create(new AABB(-1, -1, 2 + inflate, 1 + 1, 1 + 1, 2 + 1 + inflate).inflate(inflate, inflate, 0)))); + shapes.add(new IgnoreSideShape(Direction.SOUTH, Shapes.create(new AABB(-1, -1, -2 - inflate, 1 + 1, 1 + 1, -2 + 1 - inflate).inflate(inflate, inflate, 0)))); + TESLA_TOP_LOAD_SHAPES = Collections.unmodifiableList(shapes); } private static RenderType getPlasmaRenderType(float u, float v) @@ -158,32 +143,38 @@ private static void renderPlasma(MachineBlockEntity machine, float partialTick, matrices.pushPose(); float tick = Minecraft.getInstance().levelRenderer.getTicks() + partialTick; - float speed = 0.015f; + float speed = 0.001f;//0.015f; float u = Mth.cos(tick * speed) * 0.5f % 1f; float v = tick * speed * 0.75f % 1f; VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); - for(AABB box : TESLA_TOP_LOAD_SHAPE.toAabbs()) + for(IgnoreSideShape shape : TESLA_TOP_LOAD_SHAPES) { - for(Direction direction : Direction.values()) + for(AABB box : shape.shape().toAabbs()) { - renderPlasmaAddVertexesFace( - matrices, light, overlay, vc, direction, - (float) box.minX, (float) box.minY, (float) box.minZ, - (float) box.maxX, (float) box.maxY, (float) box.maxZ, - 0, 0 - ); + for(Direction direction : Direction.values()) + { + if(direction != shape.ignoreSide()) + { + renderPlasmaAddVertexesFace( + matrices, light, overlay, vc, direction, + (float) box.minX, (float) box.minY, (float) box.minZ, + (float) box.maxX, (float) box.maxY, (float) box.maxZ, + 0, 0 + ); + } + } } + + /*LevelRenderer.renderVoxelShape( + matrices, + buffer.getBuffer(RenderType.lines()), + shape.shape(), + 0, 0, 0, + 1f, 1f, 1f, 1f, true + );*/ } - /*LevelRenderer.renderVoxelShape( - matrices, - buffer.getBuffer(RenderType.lineStrip()), - TESLA_TOP_LOAD_SHAPE, - 0, 0, 0, - 0f, 0f, 1f, 1f, true - );*/ - matrices.popPose(); } @@ -194,47 +185,83 @@ private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, i float x2, float y2, float z2, float u, float v) { - // TODO calculate UV offsets based on the side - currently it scales wrong on taller/wider faces - float offsetV = 0.5f * 3f; - float offsetU = (offsetV / 2f);// * 3f; + float dx = Math.abs(x2 - x1); + float dy = Math.abs(y2 - y1); + float dz = Math.abs(z2 - z1); + float width, height; switch (direction) { - case DOWN: + case DOWN -> + { + width = dx; + height = dz; + } + case UP -> + { + width = dz; + height = dx; + } + case NORTH, SOUTH -> + { + width = dx; + height = dy; + } + case WEST, EAST -> + { + width = dz; + height = dy; + } + default -> throw new IllegalStateException("Unexpected value: " + direction); + } + + float scale = 8f / 64f; + float offsetU = width / 64f / scale; + float offsetV = height / 32f / scale; + + switch (direction) + { + case DOWN -> + { renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u + offsetU, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u + offsetU, v + offsetV); renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u, v + offsetV); - break; - case UP: + } + case UP -> + { renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u + offsetU, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u, v + offsetV); - break; - case NORTH: + } + case NORTH -> + { renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u + offsetU, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u + offsetU, v + offsetV); renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u, v + offsetV); - break; - case SOUTH: + } + case SOUTH -> + { renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u + offsetU, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u, v + offsetV); - break; - case EAST: - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u + offsetU, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u, v + offsetV); - break; - case WEST: + } + case WEST -> + { renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u + offsetU, v); renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u + offsetU, v + offsetV); renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u, v + offsetV); - break; + } + case EAST -> + { + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u + offsetU, v); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u, v + offsetV); + } } } From cd7ab73dfe269d922efd07060651b96da77a5bb4 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sun, 6 Oct 2024 01:10:05 -0400 Subject: [PATCH 066/159] Change plasma texture to a testing texture --- .../textures/vfx/plasma_overlay.png | Bin 2202 -> 231 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png b/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png index e04c89c41b193998e5f18c4b06afbc517a64e7c6..e0df0f3b35689057f8da60d6e938f5e3dacaf1fc 100644 GIT binary patch delta 166 zcmbOw_?&TqXZ=A22EK!gJ0@noWnf^a@pN$v$#8yp%8-k}QGn^--~Y>>&pLgkC)bhd zVEL21@=Lea`%5`%ygfhpn1I*s&r1wjF8#B~OB NJYD@<);T3K0RZ&)PAmWb delta 2152 zcmV-u2$%Qg0h$qzNq@rt01m?e$8V@)000OtNklbxlz+?1%SC5rXZhvJm*Ui^ zQ{|gCZ^Br^!^7p1Cr@g}=G$%Cwz=KAck4Cd%h+ypb+z`pR@k*`SNZAFCmo}qcPfxG ze*gacr9V|{-n`lE*s((wDFeH;wKcbQ?_M>Y=bJWd()VKH0mgTAbv2EZg0UGFC&;@F zM{_TSef##+j(-)yj0b@MMC|9!pLltl(e2{Ii4(er#l=PU`Sa&6&XFTW%Guf3aDDjj z;c{+nE?mbEG4%HK!W{Sg`*+u9G}Hm{H+3-9`O7RMXywYvN}&uOViH+C)Q2%}j6V&? z-2-B@E;vPOJSijd>A5i=H6Bb)PZzKVx)YRE#$$s&b$=MoJpM8ZjOVBhSXx>tzJ2@V z4jnoK&6++mD#ys(1HXR#(jzoIcI;T?0>l_~1nD6Z&%P&XsWss0)vHa5tZruvsr9lH?xEh}dCL$d}9q{z&)57Qfy1~d-s)4^$Ku>?F`0(L_UX!Q4 zfB$wPBO}U&GiT0}qW(%rebECYZx^rx#<326YaMby!vVQ!5vL<83srzY$lq9H@t{oX zCMPHT9p}!TJsTF1(u?S`*s-xOgizD!)vH(j>3{#oEi4DdM*v}{u%KzabnX~D!9lgro}9Y1&%Rb7;}rb`n&&u zG5G%E$&)%){2j*lQ?0YB=|q+y;c!s6O>p z?&&*6j~>+s8U5n?=ea+v1>=ey(5Pg;v2-$a;>Qg#?53QhN^Mi|GKsK37*z;phNA3v_nCs?d6 zX4Kyxs{t&Q{H8Os{s8)k253p7BniDy{os8lNP7wW&Ye5QqLe)tFW+o9LIC!q!U#w^ zSOzoeG^Gx;+hH6*9ZnV1j7H>0m4D~YpNGkDz=aDJG~eI7d*>!5CJHu5<^;-JtoXp5 zlhai_e{RFnF35kX5e~yq!p_pxT>fb7dp&-#fJYft%nr?yr1)w`Az_}Tw4?Hek zzFark>UpA`oGAjAp>!0`0LTYa^ibMSr8v7}$wT z4XLv#CSpids4y-yo+z9@e_r3^IXTL?MWf1i&yID^;x4cbIpc9UX~)sussybs#-mTx z@;4B+si`RyE9sCzO=eLzB>p3^Y;f4@;4phPCr}2y;Ye;%R%7st{HNr#!lg@>_~|Ve z$$GfPsbajg@T6)hM^M>dynpFQlLoLDspUEtttT%68WO4k-jhX#{lcS1kM!4?b~-bR zjel|SPQ{73C@7ica}HD+$}4|jMD{mA7$Ns6(>6v!6gzm#HbZPASP;6v9}DD23A}y# zb|KqmlwaRvAx!9p2#7l~Kw8A~XK^?V2jFNZ8AmvUF%ZTQbzn`9{eSp!?bI;0PFj5r3`9Ch!8Ldj*;q{$RwzhY$6L6X-Pg37y~wi`q()D&Ukfh=pu5 z^|ycMK?g@wXeXz0AfhH{RSUIWh)Ej^CXyC;C@tTi)*1v-3`gQvQY6-pe*wlVo;`b} z-4_B#B*=B4le>BI=7uN2nf?9!Dx?T#S{CEfVC#*F<9O1bs(+%uPTFy+-~M(MRjqRl z4QoA7Q^b$Kae@g3?Jmc^0ftEAs47}otu(<9jy+{e723--uxKgwOau+t?1Yk`EjR*_koPU*ZWFGbbI3MKFkG%sG ziXc&rp{{?_1b-aM_}IiQk$#0En>vJ)0HkaTA_x`7$H&)AZn>HhH3q~ef2knaR1!oC zkV^bcK+T33_Ip80VP8Veu?qTwNa`(vMPa@j;{nRgE)d8!dc=707Mf!` z^fluVHhn3=zcL=QG9IV{%s~64$HXc}`&OWY(J=}|mHyMy(@q)`r7_RRVFTmKb=LVC eL6tUC!?{1>RK$=^!Ni#W0000 Date: Sun, 6 Oct 2024 01:25:44 -0400 Subject: [PATCH 067/159] Make texture scrolling linear --- .../client/tesla/TeslaPartRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 2f7e4061..1653dcdc 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -144,8 +144,8 @@ private static void renderPlasma(MachineBlockEntity machine, float partialTick, float tick = Minecraft.getInstance().levelRenderer.getTicks() + partialTick; float speed = 0.001f;//0.015f; - float u = Mth.cos(tick * speed) * 0.5f % 1f; - float v = tick * speed * 0.75f % 1f; + float u = (tick * speed) % 1f; + float v = (tick * speed) % 1f; VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); for(IgnoreSideShape shape : TESLA_TOP_LOAD_SHAPES) From d9b75b61f6ebfbbdb68f14a9cb711443d7548f79 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sun, 6 Oct 2024 03:00:20 -0400 Subject: [PATCH 068/159] Finish plasma rendering --- .../client/tesla/TeslaPartRenderer.java | 120 +++++++++--------- .../client/tesla/arcs/TeslaArcGenerator.java | 8 -- .../tesla/generator/TeslaArcGenerator.java | 12 ++ .../tesla/{arcs => generator}/TeslaArcs.java | 26 +--- .../tesla/generator/TeslaPlasmaGenerator.java | 10 ++ .../teslatower/TeslaTowerBlockEntity.java | 41 ++++-- .../textures/vfx/plasma_overlay.png | Bin 231 -> 1742 bytes 7 files changed, 115 insertions(+), 102 deletions(-) delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcGenerator.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java rename src/main/java/net/swedz/extended_industrialization/client/tesla/{arcs => generator}/TeslaArcs.java (84%) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 1653dcdc..8f9bbd7c 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -8,21 +8,21 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderType; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.api.WorldPos; -import net.swedz.extended_industrialization.client.tesla.arcs.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaGenerator; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import team.lodestar.lodestone.handlers.RenderHandler; import team.lodestar.lodestone.registry.client.LodestoneRenderTypes; @@ -74,8 +74,7 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld(); builder.replaceBufferSource(RenderHandler.LATE_DELAYED_RENDER.getTarget()) .setRenderType(TESLA_ARC) - .setColorRaw(1f, 1f, 1f) - .setAlpha(0.9f); + .setColorRaw(1f, 1f, 1f); for(TrailPointBuilder trail : generator.getTeslaArcs().getTrails()) { @@ -94,6 +93,9 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po matrices.pushPose(); + Vec3 offset = generator.getTeslaArcsOffset(); + matrices.translate(offset.x(), offset.y(), offset.z()); + builder.renderTrail(matrices, points, (i) -> 1 - i); matrices.popPose(); @@ -110,7 +112,7 @@ private record IgnoreSideShape(Direction ignoreSide, VoxelShape shape) static { List shapes = Lists.newArrayList(); - double inflate = 0.05; + double inflate = 0.1; shapes.add(new IgnoreSideShape(Direction.UP, Shapes.create(new AABB(-1, -2 - inflate, -1, 1 + 1, -2 + 1 - inflate, 1 + 1).inflate(inflate, 0, inflate)))); shapes.add(new IgnoreSideShape(Direction.DOWN, Shapes.create(new AABB(-1, 2 + inflate, -1, 1 + 1, 2 + 1 + inflate, 1 + 1).inflate(inflate, 0, inflate)))); shapes.add(new IgnoreSideShape(Direction.WEST, Shapes.create(new AABB(2 + inflate, -1, -1, 2 + 1 + inflate, 1 + 1, 1 + 1).inflate(0, inflate, inflate)))); @@ -140,50 +142,46 @@ private static RenderType getPlasmaRenderType(float u, float v) private static void renderPlasma(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { - matrices.pushPose(); - - float tick = Minecraft.getInstance().levelRenderer.getTicks() + partialTick; - float speed = 0.001f;//0.015f; - float u = (tick * speed) % 1f; - float v = (tick * speed) % 1f; - VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); - - for(IgnoreSideShape shape : TESLA_TOP_LOAD_SHAPES) + if(machine instanceof TeslaPlasmaGenerator generator && generator.shouldRenderTeslaPlasma()) { - for(AABB box : shape.shape().toAabbs()) + matrices.pushPose(); + + Vec3 offset = generator.getTeslaPlasmaOffset(); + matrices.translate(offset.x(), offset.y(), offset.z()); + + float tick = Minecraft.getInstance().levelRenderer.getTicks() + partialTick; + float speed = 0.0075f; + float u = (tick * speed) % 1f; + float v = (tick * speed) % 1f; + VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); + + for(IgnoreSideShape shape : TESLA_TOP_LOAD_SHAPES) { - for(Direction direction : Direction.values()) + for(AABB box : shape.shape().toAabbs()) { - if(direction != shape.ignoreSide()) + for(Direction direction : Direction.values()) { - renderPlasmaAddVertexesFace( - matrices, light, overlay, vc, direction, - (float) box.minX, (float) box.minY, (float) box.minZ, - (float) box.maxX, (float) box.maxY, (float) box.maxZ, - 0, 0 - ); + if(direction != shape.ignoreSide()) + { + renderPlasmaAddVertexesFace( + matrices, light, overlay, vc, direction, + (float) box.minX, (float) box.minY, (float) box.minZ, + (float) box.maxX, (float) box.maxY, (float) box.maxZ + ); + } } } } - /*LevelRenderer.renderVoxelShape( - matrices, - buffer.getBuffer(RenderType.lines()), - shape.shape(), - 0, 0, 0, - 1f, 1f, 1f, 1f, true - );*/ + matrices.popPose(); } - - matrices.popPose(); } private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, Direction direction, float x1, float y1, float z1, - float x2, float y2, float z2, - float u, float v) + float x2, float y2, float z2) { float dx = Math.abs(x2 - x1); float dy = Math.abs(y2 - y1); @@ -214,7 +212,7 @@ private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, i default -> throw new IllegalStateException("Unexpected value: " + direction); } - float scale = 8f / 64f; + float scale = 32f / 64f; float offsetU = width / 64f / scale; float offsetV = height / 32f / scale; @@ -222,45 +220,45 @@ private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, i { case DOWN -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u + offsetU, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u + offsetU, v + offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, 0, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, offsetU, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, offsetU, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, 0, offsetV); } case UP -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u + offsetU, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, 0, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, offsetU, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, offsetU, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, 0, offsetV); } case NORTH -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u + offsetU, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u + offsetU, v + offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, 0, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, offsetU, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, offsetU, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, 0, offsetV); } case SOUTH -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u + offsetU, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, 0, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, offsetU, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, offsetU, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, 0, offsetV); } case WEST -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u + offsetU, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u + offsetU, v + offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, 0, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, offsetU, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, offsetU, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, 0, offsetV); } case EAST -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u + offsetU, v); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u + offsetU, v + offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u, v + offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, 0, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, offsetU, 0); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, offsetU, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, 0, offsetV); } } } @@ -272,7 +270,7 @@ private static void renderPlasmaAddVertex(PoseStack matrices, int light, int ove { PoseStack.Pose pose = matrices.last(); vc.addVertex(pose, x, y, z) - .setColor(1f, 1f, 1f, 0.5f) + .setColor(1f, 1f, 1f, 0.8f) .setLight(light) .setNormal(pose, 0, 0, 0) .setOverlay(overlay) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcGenerator.java deleted file mode 100644 index ba234595..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcGenerator.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.swedz.extended_industrialization.client.tesla.arcs; - -public interface TeslaArcGenerator -{ - TeslaArcs getTeslaArcs(); - - boolean shouldRenderTeslaArcs(); -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java new file mode 100644 index 00000000..e6b65ecb --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java @@ -0,0 +1,12 @@ +package net.swedz.extended_industrialization.client.tesla.generator; + +import net.minecraft.world.phys.Vec3; + +public interface TeslaArcGenerator +{ + Vec3 getTeslaArcsOffset(); + + TeslaArcs getTeslaArcs(); + + boolean shouldRenderTeslaArcs(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java similarity index 84% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java rename to src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java index 76fe1095..df558c42 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/arcs/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.client.tesla.arcs; +package net.swedz.extended_industrialization.client.tesla.generator; import com.google.common.collect.Lists; import net.minecraft.world.phys.Vec3; @@ -8,7 +8,6 @@ import java.util.Collections; import java.util.List; import java.util.Random; -import java.util.function.Supplier; public final class TeslaArcs { @@ -21,14 +20,11 @@ public final class TeslaArcs private final float maxSectionLength; private final int sectionSplits; - private final Supplier offset; - private final List trails = Lists.newArrayList(); public TeslaArcs(int arcDuration, int arcs, int minLength, int maxLength, - float maxSectionLength, int sectionSplits, - Supplier offset) + float maxSectionLength, int sectionSplits) { Assert.that(arcDuration > 0); Assert.that(arcs > 0); @@ -36,7 +32,6 @@ public TeslaArcs(int arcDuration, int arcs, Assert.that(maxLength > 0 && maxLength >= minLength); Assert.that(maxSectionLength > 0); Assert.that(sectionSplits > 0); - Assert.notNull(offset); this.arcDuration = arcDuration; this.arcs = arcs; @@ -44,7 +39,6 @@ public TeslaArcs(int arcDuration, int arcs, this.maxLength = maxLength; this.maxSectionLength = maxSectionLength; this.sectionSplits = sectionSplits; - this.offset = offset; } public int duration() @@ -77,11 +71,6 @@ public int sectionSplits() return sectionSplits; } - public Vec3 offset() - { - return offset.get(); - } - public List getTrails() { return Collections.unmodifiableList(trails); @@ -92,13 +81,13 @@ private float randomOffset() return RANDOM.nextFloat(2) - 1; } - private void createArc(Vec3 offset) + private void createArc() { TrailPointBuilder trail = TrailPointBuilder.create(arcDuration); int length = RANDOM.nextInt(minLength, maxLength + 1); - double x = offset.x(); - double y = offset.y(); - double z = offset.z(); + double x = 0; + double y = 0; + double z = 0; float dirX = this.randomOffset(); float dirY = this.randomOffset(); float dirZ = this.randomOffset(); @@ -129,12 +118,11 @@ public void tick() if(trails.size() < arcs) { - Vec3 offset = this.offset(); int maxCreate = arcs - trails.size(); int create = Math.max(Math.min(arcs / 2, maxCreate), 1); for(int i = 0; i < create; i++) { - this.createArc(offset); + this.createArc(); } } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java new file mode 100644 index 00000000..2f84edde --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java @@ -0,0 +1,10 @@ +package net.swedz.extended_industrialization.client.tesla.generator; + +import net.minecraft.world.phys.Vec3; + +public interface TeslaPlasmaGenerator +{ + Vec3 getTeslaPlasmaOffset(); + + boolean shouldRenderTeslaPlasma(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index c2d91d53..1cdc448b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -22,8 +22,9 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; -import net.swedz.extended_industrialization.client.tesla.arcs.TeslaArcGenerator; -import net.swedz.extended_industrialization.client.tesla.arcs.TeslaArcs; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaGenerator; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; @@ -40,7 +41,7 @@ import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; -public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaArcGenerator +public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaArcGenerator, TeslaPlasmaGenerator { private final RedstoneControlComponent redstoneControl; private final TeslaTowerUpgradeComponent upgrade; @@ -81,17 +82,7 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) () -> TeslaTransferLimits.of(cableTier, SHAPES.tiers().get(activeShape.getActiveShapeIndex())) ); - arcs = new TeslaArcs( - 3, 6, 4, 8, 15, 10, - () -> - { - Direction facing = orientation.facingDirection; - BlockPos topLoadCenter = worldPosition - .relative(facing.getAxis(), -3) - .above(14); - return Vec3.atCenterOf(topLoadCenter.subtract(worldPosition)); - } - ); + arcs = new TeslaArcs(3, 6, 4, 8, 15, 10); this.registerComponents(redstoneControl, upgrade, transmitter); @@ -150,12 +141,34 @@ public TeslaArcs getTeslaArcs() return arcs; } + @Override + public Vec3 getTeslaArcsOffset() + { + Direction facing = orientation.facingDirection; + BlockPos topLoadCenter = worldPosition + .relative(facing.getAxis(), -3) + .above(14); + return Vec3.atCenterOf(topLoadCenter.subtract(worldPosition)); + } + @Override public boolean shouldRenderTeslaArcs() { return isActive.isActive; } + @Override + public Vec3 getTeslaPlasmaOffset() + { + return this.getTeslaArcsOffset().subtract(0.5, 0.5, 0.5); + } + + @Override + public boolean shouldRenderTeslaPlasma() + { + return this.shouldRenderTeslaArcs(); + } + @Override public List getEnergyComponents() { diff --git a/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png b/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png index e0df0f3b35689057f8da60d6e938f5e3dacaf1fc..9754b7e14e1410d1bdaf699006c8a4e579db6d88 100644 GIT binary patch delta 1689 zcmV;K24?x^0nQDONq@os01m>_4`AQ>x{AUuAk)X{QP{74~tk?S*h37*6jDo%S*Mm zxL7?tJ`T3Gx9f+8hr#;#dj0(TJczcYvCX~9%gbgH{Qmx8yMKCnd+WTf51X5t^=LFQ z8$&zOf|7%KdwX^MX;@fTFbCO^;p+SQyV}{=G4hPh&(GU+(H6%W8yjP`B4k?_4u^KG zgx%fUPFo%#4;lrKv9GT$vN%C{T98%tPft&5jh&N|lltP~qB%Z3KCUk>FPmeZ5dmAT zudmg|$A=M5!GEg!JzbFM@?jCHtE<=_m;%UHI>C)L=s{re&jzJ);QjsGWE$bgQ!)?& zQa~gRPzWkQ?j)s;JRI`R3i3QB9~J?5_U6g`{kB;fIVv9KFG#;q?1nzRD$C0BcGZ;ThbzV;L8z}{VB!-jNrWQvZ~jVseEQU`%zwX zT{q=%cYk+hdnwDK^kIL0zwtwT0sFrBC1SRxB)Wpg7%JoWu{T5vl_{VphnhV&IIx)k#KzGDO32qd z(_t*DQuc0cZW=#gUx0{Dj&H(kswmAy!r|dzbAMfNCFo@ilu?30ufPGapa20~JVbNX-e|}^oW*b-m>v~< zB*^m8*Dv)t7z~R2VHTji*cbt2hssc9SAS3G!bA@MkiuyQl2!J8V~h==%97UB9wP5E z>8CqE<86x_$n(OK4;w(5S*DM?-Z=;ud+$%@_W*(J-&ey(kZhnFniul?*UXoI+*KwJ z^KYF1alVDm}>nJqOF5i5-W#?@Wr5Roorg$$?hsopnAn3Y@vOJ7t;e-huJ8h=+J zQfyR^i{#0IWW>0p6=kE1JP$6BFO@|JCGrHFz9X4;!Ir+s2cT)$6u=vt|Lnx_6Q`21 zc1~dGLE3_@&4)#JHN*@uhP^ai>>(c9OR^L|k_8#2OrV!JX0TWm9!iA#80!JbYJ_S! zg7X-gW@QFhob&|J)+}!+jV{LpW`7$#z42TUKv1GWQA9e|TDBfTPueeBFs`o8VuL*o zBXSU79Ov2M>Ji{*{%Jr3Uj8_zz+p@44I3ZkT__MPpCDPH23G94H^Y- zGg(Nrgi#1L&N2(6T5pXgj^h*=^qtu^$P#EuBJVL8jcf|V7XmI~TuZr<0Dq0y4GCQ1 zk0H;DrBpcH}&CrZU{JTH<5oi9U>=T(!&)>n4`k~r7a+yIVXw{7u6P)m;f4G3Z) z-)YMNAX(;f4W@YujPP0XP{!%JlJDQx|G!~{BJy%x(*7IgSi}gBX5oSaHT`Mr4zNGV j7w0~7tt88+s{a57eiBI*Q~~=r00000NkvXXu0mjfMk6lH delta 166 zcmX@d`>&pLgkC)bhd zVEL21@=Lea`%5`%ygfhpn1I*s&r1wjF8#B~OB NJYD@<);T3K0RR*$PFw&0 From d4957e8371a5c44e057236d5940e9fa8aeeb529e Mon Sep 17 00:00:00 2001 From: Swedz Date: Sun, 6 Oct 2024 03:00:54 -0400 Subject: [PATCH 069/159] Include testing plasma overlay texture for future testing --- .../textures/vfx/plasma_overlay_test.png | Bin 0 -> 231 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay_test.png diff --git a/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay_test.png b/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay_test.png new file mode 100644 index 0000000000000000000000000000000000000000..e0df0f3b35689057f8da60d6e938f5e3dacaf1fc GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4uUY_j)~cCfr2%jE{-7?&QDJnaxpjxFdh8+fBExSr_c1{ zI&vK>f3jD8=@xr`DQAth=O-T%@cR9EiDAp7e>Rys3n>=f^ZYLRvZHV1*d4a~0J?+0 M)78&qol`;+0R8-000000 literal 0 HcmV?d00001 From 9eb4dba453f96b1c5dbd8cc3196db128348d81f1 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 7 Oct 2024 20:49:00 -0400 Subject: [PATCH 070/159] Add special winding blocks for the tesla tower --- .../blockstates/aluminum_tesla_winding.json | 7 +++++ .../annealed_copper_tesla_winding.json | 7 +++++ .../blockstates/copper_tesla_winding.json | 7 +++++ .../blockstates/electrum_tesla_winding.json | 7 +++++ .../superconductor_tesla_winding.json | 7 +++++ .../lang/en_us.json | 12 +++++++-- .../models/block/aluminum_tesla_winding.json | 7 +++++ .../block/annealed_copper_tesla_winding.json | 7 +++++ .../models/block/copper_tesla_winding.json | 7 +++++ .../models/block/electrum_tesla_winding.json | 7 +++++ .../block/superconductor_tesla_winding.json | 7 +++++ .../models/item/aluminum_tesla_winding.json | 3 +++ .../item/annealed_copper_tesla_winding.json | 3 +++ .../models/item/copper_tesla_winding.json | 3 +++ .../models/item/electrum_tesla_winding.json | 3 +++ .../item/superconductor_tesla_winding.json | 3 +++ .../data_maps/block/tesla_tower_tier.json | 21 ++++++++++++--- .../blocks/aluminum_tesla_winding.json | 21 +++++++++++++++ .../blocks/annealed_copper_tesla_winding.json | 21 +++++++++++++++ .../blocks/copper_tesla_winding.json | 21 +++++++++++++++ .../blocks/electrum_tesla_winding.json | 21 +++++++++++++++ .../blocks/superconductor_tesla_winding.json | 21 +++++++++++++++ .../recipe/tesla_winding/aluminum.json | 21 +++++++++++++++ .../recipe/tesla_winding/annealed_copper.json | 21 +++++++++++++++ .../recipe/tesla_winding/copper.json | 21 +++++++++++++++ .../recipe/tesla_winding/electrum.json | 21 +++++++++++++++ .../recipe/tesla_winding/superconductor.json | 21 +++++++++++++++ .../tags/block/mineable/pickaxe.json | 5 ++++ .../tags/block/needs_stone_tool.json | 5 ++++ .../extended_industrialization/EIBlocks.java | 21 ++++++++++++--- .../provider/LanguageDatagenProvider.java | 7 +++-- .../datamaps/DataMapDatagenProvider.java | 14 ++++++---- .../CommonRecipesServerDatagenProvider.java | 24 ++++++++++++++++++ .../block/aluminum_tesla_winding_end.png | Bin 0 -> 752 bytes .../block/aluminum_tesla_winding_side.png | Bin 0 -> 812 bytes .../annealed_copper_tesla_winding_end.png | Bin 0 -> 730 bytes .../annealed_copper_tesla_winding_side.png | Bin 0 -> 762 bytes .../block/copper_tesla_winding_end.png | Bin 0 -> 729 bytes .../block/copper_tesla_winding_side.png | Bin 0 -> 735 bytes .../block/electrum_tesla_winding_end.png | Bin 0 -> 743 bytes .../block/electrum_tesla_winding_side.png | Bin 0 -> 812 bytes .../superconductor_tesla_winding_end.png | Bin 0 -> 784 bytes .../superconductor_tesla_winding_side.png | Bin 0 -> 868 bytes 43 files changed, 389 insertions(+), 15 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/aluminum_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/annealed_copper_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/copper_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/electrum_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/superconductor_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/aluminum_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/annealed_copper_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/copper_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/electrum_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/superconductor_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/aluminum_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/annealed_copper_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/copper_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/electrum_tesla_winding.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/superconductor_tesla_winding.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/aluminum_tesla_winding.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/annealed_copper_tesla_winding.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/copper_tesla_winding.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/electrum_tesla_winding.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/superconductor_tesla_winding.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tesla_winding/aluminum.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tesla_winding/annealed_copper.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tesla_winding/copper.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tesla_winding/electrum.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tesla_winding/superconductor.json create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/aluminum_tesla_winding_end.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/aluminum_tesla_winding_side.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/annealed_copper_tesla_winding_end.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/annealed_copper_tesla_winding_side.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/copper_tesla_winding_end.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/copper_tesla_winding_side.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/electrum_tesla_winding_end.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/electrum_tesla_winding_side.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/superconductor_tesla_winding_end.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/superconductor_tesla_winding_side.png diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/aluminum_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/blockstates/aluminum_tesla_winding.json new file mode 100644 index 00000000..d696f484 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/aluminum_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/aluminum_tesla_winding" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/annealed_copper_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/blockstates/annealed_copper_tesla_winding.json new file mode 100644 index 00000000..a294807d --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/annealed_copper_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/annealed_copper_tesla_winding" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/copper_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/blockstates/copper_tesla_winding.json new file mode 100644 index 00000000..2bfe101c --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/copper_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/copper_tesla_winding" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/electrum_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/blockstates/electrum_tesla_winding.json new file mode 100644 index 00000000..bf6089c9 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/electrum_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/electrum_tesla_winding" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/superconductor_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/blockstates/superconductor_tesla_winding.json new file mode 100644 index 00000000..a106186e --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/superconductor_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/superconductor_tesla_winding" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 2d456271..2009f870 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -1,10 +1,13 @@ { + "block.extended_industrialization.aluminum_tesla_winding": "Aluminum Tesla Winding", + "block.extended_industrialization.annealed_copper_tesla_winding": "Annealed Copper Tesla Winding", "block.extended_industrialization.blazing_essence": "Blazing Essence", "block.extended_industrialization.bronze_bending_machine": "Bronze Bending Machine", "block.extended_industrialization.bronze_composter": "Bronze Composter", "block.extended_industrialization.bronze_solar_boiler": "Bronze Solar Boiler", "block.extended_industrialization.bronze_waste_collector": "Bronze Waste Collector", "block.extended_industrialization.composted_manure": "Composted Manure", + "block.extended_industrialization.copper_tesla_winding": "Copper Tesla Winding", "block.extended_industrialization.distilled_water": "Distilled Water", "block.extended_industrialization.electric_alloy_smelter": "Electric Alloy Smelter", "block.extended_industrialization.electric_bending_machine": "Electric Bending Machine", @@ -14,6 +17,7 @@ "block.extended_industrialization.electric_farmer": "Electric Farmer", "block.extended_industrialization.electric_honey_extractor": "Electric Honey Extractor", "block.extended_industrialization.electric_waste_collector": "Electric Waste Collector", + "block.extended_industrialization.electrum_tesla_winding": "Electrum Tesla Winding", "block.extended_industrialization.honey": "Honey", "block.extended_industrialization.hv_solar_panel": "HV Solar Panel", "block.extended_industrialization.large_configurable_chest": "Large Configurable Chest", @@ -42,6 +46,7 @@ "block.extended_industrialization.steel_plated_bricks": "Steel Plated Bricks", "block.extended_industrialization.steel_solar_boiler": "Steel Solar Boiler", "block.extended_industrialization.steel_waste_collector": "Steel Waste Collector", + "block.extended_industrialization.superconductor_tesla_winding": "Superconductor Tesla Winding", "block.extended_industrialization.tesla_receiver": "Tesla Receiver", "block.extended_industrialization.tesla_tower": "Tesla Tower", "block.extended_industrialization.universal_transformer": "Universal Transformer", @@ -100,8 +105,11 @@ "tag.item.extended_industrialization.farmer_voidable": "Farmer Voidable", "tag.item.extended_industrialization.photovoltaic_cell": "Photovoltaic Cells", "tag.item.extended_industrialization.rainbow_dyeable": "Rainbow Dyeable", - "teslatower_tier.extended_industrialization.modern_industrialization.cupronickel_coil": "Cupronickel", - "teslatower_tier.extended_industrialization.modern_industrialization.superconductor_coil": "Superconductor", + "teslatower_tier.extended_industrialization.extended_industrialization.aluminum_tesla_winding": "Aluminum", + "teslatower_tier.extended_industrialization.extended_industrialization.annealed_copper_tesla_winding": "Annealed Copper", + "teslatower_tier.extended_industrialization.extended_industrialization.copper_tesla_winding": "Copper", + "teslatower_tier.extended_industrialization.extended_industrialization.electrum_tesla_winding": "Electrum", + "teslatower_tier.extended_industrialization.extended_industrialization.superconductor_tesla_winding": "Superconductor", "text.extended_industrialization.activated": "Activated", "text.extended_industrialization.brewery_brews_multiple": "Brews %s potions at a time.", "text.extended_industrialization.brewery_requires_blazing_essence": "Requires %s to brew potions.", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/aluminum_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/block/aluminum_tesla_winding.json new file mode 100644 index 00000000..425f723d --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/aluminum_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "extended_industrialization:block/aluminum_tesla_winding_end", + "side": "extended_industrialization:block/aluminum_tesla_winding_side" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/annealed_copper_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/block/annealed_copper_tesla_winding.json new file mode 100644 index 00000000..2e6e73c9 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/annealed_copper_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "extended_industrialization:block/annealed_copper_tesla_winding_end", + "side": "extended_industrialization:block/annealed_copper_tesla_winding_side" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/copper_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/block/copper_tesla_winding.json new file mode 100644 index 00000000..f5de203f --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/copper_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "extended_industrialization:block/copper_tesla_winding_end", + "side": "extended_industrialization:block/copper_tesla_winding_side" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electrum_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/block/electrum_tesla_winding.json new file mode 100644 index 00000000..339414e0 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/electrum_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "extended_industrialization:block/electrum_tesla_winding_end", + "side": "extended_industrialization:block/electrum_tesla_winding_side" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/superconductor_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/block/superconductor_tesla_winding.json new file mode 100644 index 00000000..43e158a3 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/superconductor_tesla_winding.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "extended_industrialization:block/superconductor_tesla_winding_end", + "side": "extended_industrialization:block/superconductor_tesla_winding_side" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/aluminum_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/item/aluminum_tesla_winding.json new file mode 100644 index 00000000..cea4222e --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/aluminum_tesla_winding.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/aluminum_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/annealed_copper_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/item/annealed_copper_tesla_winding.json new file mode 100644 index 00000000..5990844e --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/annealed_copper_tesla_winding.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/annealed_copper_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/copper_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/item/copper_tesla_winding.json new file mode 100644 index 00000000..dbe83a02 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/copper_tesla_winding.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/copper_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/electrum_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/item/electrum_tesla_winding.json new file mode 100644 index 00000000..a8d4bc57 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/electrum_tesla_winding.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/electrum_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/superconductor_tesla_winding.json b/src/generated/resources/assets/extended_industrialization/models/item/superconductor_tesla_winding.json new file mode 100644 index 00000000..7148ec6b --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/superconductor_tesla_winding.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/superconductor_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json b/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json index 31094bae..daf11fca 100644 --- a/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json +++ b/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json @@ -1,12 +1,27 @@ { "values": { - "modern_industrialization:cupronickel_coil": { + "extended_industrialization:aluminum_tesla_winding": { + "distance": 512, + "loss": 0.15, + "transfer": 8192 + }, + "extended_industrialization:annealed_copper_tesla_winding": { + "distance": 1024, + "loss": 0.1, + "transfer": 65536 + }, + "extended_industrialization:copper_tesla_winding": { "distance": 128, "loss": 0.25, "transfer": 256 }, - "modern_industrialization:superconductor_coil": { - "distance": 1024, + "extended_industrialization:electrum_tesla_winding": { + "distance": 256, + "loss": 0.2, + "transfer": 1024 + }, + "extended_industrialization:superconductor_tesla_winding": { + "distance": 2048, "loss": 0.0, "transfer": 1024000000 } diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/aluminum_tesla_winding.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/aluminum_tesla_winding.json new file mode 100644 index 00000000..6ac9c172 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/aluminum_tesla_winding.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:aluminum_tesla_winding" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/aluminum_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/annealed_copper_tesla_winding.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/annealed_copper_tesla_winding.json new file mode 100644 index 00000000..bd474199 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/annealed_copper_tesla_winding.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:annealed_copper_tesla_winding" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/annealed_copper_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/copper_tesla_winding.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/copper_tesla_winding.json new file mode 100644 index 00000000..412b2b1d --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/copper_tesla_winding.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:copper_tesla_winding" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/copper_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/electrum_tesla_winding.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/electrum_tesla_winding.json new file mode 100644 index 00000000..78ed586b --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/electrum_tesla_winding.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:electrum_tesla_winding" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/electrum_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/superconductor_tesla_winding.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/superconductor_tesla_winding.json new file mode 100644 index 00000000..c9d56540 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/superconductor_tesla_winding.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:superconductor_tesla_winding" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/superconductor_tesla_winding" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/aluminum.json b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/aluminum.json new file mode 100644 index 00000000..b63c1f8a --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/aluminum.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 100, + "eu": 8, + "item_inputs": [ + { + "amount": 8, + "item": "modern_industrialization:aluminum_cable" + }, + { + "amount": 4, + "tag": "c:plates/stainless_steel" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:aluminum_tesla_winding" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/annealed_copper.json b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/annealed_copper.json new file mode 100644 index 00000000..badc1d0c --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/annealed_copper.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 100, + "eu": 8, + "item_inputs": [ + { + "amount": 8, + "item": "modern_industrialization:annealed_copper_cable" + }, + { + "amount": 4, + "tag": "c:plates/stainless_steel" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:annealed_copper_tesla_winding" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/copper.json b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/copper.json new file mode 100644 index 00000000..5679ddb0 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/copper.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 100, + "eu": 8, + "item_inputs": [ + { + "amount": 8, + "item": "modern_industrialization:copper_cable" + }, + { + "amount": 4, + "tag": "c:plates/stainless_steel" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:copper_tesla_winding" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/electrum.json b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/electrum.json new file mode 100644 index 00000000..742d37f7 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/electrum.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 100, + "eu": 8, + "item_inputs": [ + { + "amount": 8, + "item": "modern_industrialization:electrum_cable" + }, + { + "amount": 4, + "tag": "c:plates/stainless_steel" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:electrum_tesla_winding" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/superconductor.json b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/superconductor.json new file mode 100644 index 00000000..394a7076 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/superconductor.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 100, + "eu": 8, + "item_inputs": [ + { + "amount": 8, + "item": "modern_industrialization:superconductor_cable" + }, + { + "amount": 4, + "tag": "c:plates/stainless_steel" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:superconductor_tesla_winding" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index b6287b5a..85bfab2b 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -1,9 +1,12 @@ { "values": [ + "extended_industrialization:aluminum_tesla_winding", + "extended_industrialization:annealed_copper_tesla_winding", "extended_industrialization:bronze_bending_machine", "extended_industrialization:bronze_composter", "extended_industrialization:bronze_solar_boiler", "extended_industrialization:bronze_waste_collector", + "extended_industrialization:copper_tesla_winding", "extended_industrialization:electric_alloy_smelter", "extended_industrialization:electric_bending_machine", "extended_industrialization:electric_brewery", @@ -12,6 +15,7 @@ "extended_industrialization:electric_farmer", "extended_industrialization:electric_honey_extractor", "extended_industrialization:electric_waste_collector", + "extended_industrialization:electrum_tesla_winding", "extended_industrialization:hv_solar_panel", "extended_industrialization:large_configurable_chest", "extended_industrialization:large_electric_furnace", @@ -34,6 +38,7 @@ "extended_industrialization:steel_plated_bricks", "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", + "extended_industrialization:superconductor_tesla_winding", "extended_industrialization:tesla_receiver", "extended_industrialization:tesla_tower", "extended_industrialization:universal_transformer" diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index b6287b5a..85bfab2b 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -1,9 +1,12 @@ { "values": [ + "extended_industrialization:aluminum_tesla_winding", + "extended_industrialization:annealed_copper_tesla_winding", "extended_industrialization:bronze_bending_machine", "extended_industrialization:bronze_composter", "extended_industrialization:bronze_solar_boiler", "extended_industrialization:bronze_waste_collector", + "extended_industrialization:copper_tesla_winding", "extended_industrialization:electric_alloy_smelter", "extended_industrialization:electric_bending_machine", "extended_industrialization:electric_brewery", @@ -12,6 +15,7 @@ "extended_industrialization:electric_farmer", "extended_industrialization:electric_honey_extractor", "extended_industrialization:electric_waste_collector", + "extended_industrialization:electrum_tesla_winding", "extended_industrialization:hv_solar_panel", "extended_industrialization:large_configurable_chest", "extended_industrialization:large_electric_furnace", @@ -34,6 +38,7 @@ "extended_industrialization:steel_plated_bricks", "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", + "extended_industrialization:superconductor_tesla_winding", "extended_industrialization:tesla_receiver", "extended_industrialization:tesla_tower", "extended_industrialization:universal_transformer" diff --git a/src/main/java/net/swedz/extended_industrialization/EIBlocks.java b/src/main/java/net/swedz/extended_industrialization/EIBlocks.java index fde6a1ea..0e4b7e14 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIBlocks.java +++ b/src/main/java/net/swedz/extended_industrialization/EIBlocks.java @@ -46,9 +46,16 @@ public static void init(IEventBus bus) Registry.init(bus); } - public static final BlockHolder MACHINE_CHAINER_RELAY = create("machine_chainer_relay", "Machine Chainer Relay", Block::new, BlockItem::new, EISortOrder.MACHINES).withProperties((p) -> p.mapColor(MapColor.METAL).destroyTime(4f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).tag(EITags.Blocks.MACHINE_CHAINER_RELAY).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockstateOnly).register(); - public static final BlockHolder STEEL_PLATED_BRICKS = create("steel_plated_bricks", "Steel Plated Bricks", Block::new, BlockItem::new, EISortOrder.CASINGS).withProperties((p) -> p.destroyTime(5f).explosionResistance(6f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockCubeAll).register(); - public static final BlockHolder POLISHED_STAINLESS_STEEL_CASING = create("polished_stainless_steel_casing", "Polished Stainless Steel Casing", Block::new, BlockItem::new, EISortOrder.CASINGS).withProperties((p) -> p.mapColor(MapColor.METAL).destroyTime(5f).explosionResistance(6f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockCubeAll).register(); + public static final BlockHolder MACHINE_CHAINER_RELAY = create("machine_chainer_relay", "Machine Chainer Relay", Block::new, BlockItem::new, EISortOrder.MACHINES).withProperties((p) -> p.mapColor(MapColor.METAL).destroyTime(4f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).tag(EITags.Blocks.MACHINE_CHAINER_RELAY).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockstateOnly).register(); + + public static final BlockHolder STEEL_PLATED_BRICKS = createSimple("steel_plated_bricks", "Steel Plated Bricks", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockCubeAll).register(); + public static final BlockHolder POLISHED_STAINLESS_STEEL_CASING = createSimple("polished_stainless_steel_casing", "Polished Stainless Steel Casing", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockCubeAll).register(); + + public static final BlockHolder COPPER_TESLA_WINDING = createSimple("copper_tesla_winding", "Copper Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); + public static final BlockHolder ELECTRUM_TESLA_WINDING = createSimple("electrum_tesla_winding", "Electrum Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); + public static final BlockHolder ALUMINUM_TESLA_WINDING = createSimple("aluminum_tesla_winding", "Aluminum Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); + public static final BlockHolder ANNEALED_COPPER_TESLA_WINDING = createSimple("annealed_copper_tesla_winding", "Annealed Copper Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); + public static final BlockHolder SUPERCONDUCTOR_TESLA_WINDING = createSimple("superconductor_tesla_winding", "Superconductor Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); public static Set values() { @@ -88,4 +95,12 @@ public static BlockWithIte EIItems.Registry.include(holder.item()); return holder; } + + public static BlockHolder createSimple(String id, String englishName, SortOrder sortOrder, MapColor mapColor, float destroyTime, float explosionResistance) + { + return create(id, englishName, Block::new, BlockItem::new, sortOrder) + .withProperties((p) -> p.mapColor(mapColor).destroyTime(destroyTime).explosionResistance(explosionResistance).requiresCorrectToolForDrops()) + .tag(TagHelper.getMiningLevelTag(1)) + .withLootTable(CommonLootTableBuilders::self); + } } diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java index 7c455fe1..a7e34b11 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java @@ -53,7 +53,10 @@ protected void addTranslations() this.add("lef_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "cupronickel_coil"), "Cupronickel"); this.add("lef_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "kanthal_coil"), "Kanthal"); - this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "cupronickel_coil"), "Cupronickel"); - this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, MI.ID, "superconductor_coil"), "Superconductor"); + this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, EI.ID, "copper_tesla_winding"), "Copper"); + this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, EI.ID, "electrum_tesla_winding"), "Electrum"); + this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, EI.ID, "aluminum_tesla_winding"), "Aluminum"); + this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, EI.ID, "annealed_copper_tesla_winding"), "Annealed Copper"); + this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, EI.ID, "superconductor_tesla_winding"), "Superconductor"); } } diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java index e253fba7..68791db9 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java @@ -8,12 +8,14 @@ import net.minecraft.world.level.block.Blocks; import net.neoforged.neoforge.common.data.DataMapProvider; import net.neoforged.neoforge.data.event.GatherDataEvent; +import net.swedz.extended_industrialization.EIBlocks; import net.swedz.extended_industrialization.EIDataMaps; import net.swedz.extended_industrialization.EIFluids; import net.swedz.extended_industrialization.datamap.FarmerSimpleTallCropSize; import net.swedz.extended_industrialization.datamap.FertilizerPotency; import net.swedz.extended_industrialization.datamap.LargeElectricFurnaceTier; import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; +import net.swedz.tesseract.neoforge.registry.holder.BlockHolder; import net.swedz.tesseract.neoforge.registry.holder.FluidHolder; public final class DataMapDatagenProvider extends DataMapProvider @@ -36,9 +38,11 @@ protected void gather() this.addLargeElectricFurnaceTier(MI.id("cupronickel_coil"), 8, 0.75f); this.addLargeElectricFurnaceTier(MI.id("kanthal_coil"), 32, 0.75f); - // TODO use special coils for tesla tower - this.addTeslaTowerTier(MI.id("cupronickel_coil"), CableTier.LV.getMaxTransfer(), 128, 0.25f); - this.addTeslaTowerTier(MI.id("superconductor_coil"), CableTier.SUPERCONDUCTOR.getMaxTransfer(), 128 * 8, 0f); + this.addTeslaTowerTier(EIBlocks.COPPER_TESLA_WINDING, CableTier.LV.getMaxTransfer(), 128, 0.25f); + this.addTeslaTowerTier(EIBlocks.ELECTRUM_TESLA_WINDING, CableTier.MV.getMaxTransfer(), 128 * 2, 0.2f); + this.addTeslaTowerTier(EIBlocks.ALUMINUM_TESLA_WINDING, CableTier.HV.getMaxTransfer(), 128 * 2 * 2, 0.15f); + this.addTeslaTowerTier(EIBlocks.ANNEALED_COPPER_TESLA_WINDING, CableTier.EV.getMaxTransfer(), 128 * 2 * 2 * 2, 0.1f); + this.addTeslaTowerTier(EIBlocks.SUPERCONDUCTOR_TESLA_WINDING, CableTier.SUPERCONDUCTOR.getMaxTransfer(), 128 * 2 * 2 * 2 * 2, 0f); } private void addFarmerSimpleTallCropSize(ResourceLocation block, int maxHeight) @@ -61,9 +65,9 @@ private void addLargeElectricFurnaceTier(ResourceLocation block, int batchSize, this.builder(EIDataMaps.LARGE_ELECTRIC_FURNACE_TIER).add(block, new LargeElectricFurnaceTier(batchSize, euCostMultiplier), false); } - private void addTeslaTowerTier(ResourceLocation block, long maxTransfer, int maxDistance, float maxLoss) + private void addTeslaTowerTier(BlockHolder block, long maxTransfer, int maxDistance, float maxLoss) { - this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block, new TeslaTowerTierData(maxTransfer, maxDistance, maxLoss), false); + this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block.identifier().location(), new TeslaTowerTierData(maxTransfer, maxDistance, maxLoss), false); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java index 77bfe4eb..bcefa766 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java @@ -246,6 +246,28 @@ private static void nanoSuit(RecipeOutput output) ); } + private static void teslaWinding(String name, RecipeOutput output) + { + addMachineRecipe( + "tesla_winding", name, MIMachineRecipeTypes.ASSEMBLER, + 8, 5 * 20, + (b) -> b + .addItemInput("modern_industrialization:%s_cable".formatted(name), 8) + .addItemInput(EITags.itemCommon("plates/stainless_steel"), 4) + .addItemOutput("extended_industrialization:%s_tesla_winding".formatted(name), 1), + output + ); + } + + private static void tesla(RecipeOutput output) + { + teslaWinding("copper", output); + teslaWinding("electrum", output); + teslaWinding("aluminum", output); + teslaWinding("annealed_copper", output); + teslaWinding("superconductor", output); + } + @Override protected void buildRecipes(RecipeOutput output) { @@ -401,5 +423,7 @@ protected void buildRecipes(RecipeOutput output) ); nanoSuit(output); + + tesla(output); } } diff --git a/src/main/resources/assets/extended_industrialization/textures/block/aluminum_tesla_winding_end.png b/src/main/resources/assets/extended_industrialization/textures/block/aluminum_tesla_winding_end.png new file mode 100644 index 0000000000000000000000000000000000000000..3f276e21ac076c7eb61e945e7278ce9ad84133b2 GIT binary patch literal 752 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0)bxYelh2CF&2s)nEi@_d2Y+Zn1d$9#H?#F(1FEq;8zL~js7 z8x7Mm6pb=3p(}%WUBhVl$*QW>ST1KcI6Q$Ti$v%e>(Sp$aDJ2FARQu$6^2;^-v=TE ztZj=s#)zJi-HUG@A)k~M8D`XtV`jt05gt&EIuQ;jr~Me?UW}7&gk##nL}8y|*{7D} zNXg*jE4zEWObOuI400Ofj9SL<{g`>Ln9;UwskE#uE8YOlR#!X z$`U*x$e18v@A0zF(uhw6Hq?J#LWMhaxhhKnD0CQ z5rS?QupsTLnjn?KCFPn7mh{X0N=oEorJ_v}t?V}svSCv$%ap;Fd@Ld$^6-j`7SwV- zqsW%Z)Et|r-n~67;F1kBA=yW>h^|An}II?b6d^<=}@ee|hqR64%ynf$G3ENV(9hMo3 i9nM?(-uHhB-r^q@$R8)gVgG*s0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0>Mc{K~y+TO;b%z z6HydBZ$6k#J5VXqDguo$As}IATztsxHcxn82^C_e}FECOINIli5e1h#m0r2 zCK%$9$btxI3aEVa14^g!?Rk$jadC6!-FfHUd(M4VyjxyRIxQbT(4l#>vv1FH;rlKE z-$xXM2t)cXR2GH-W0CUW+2_OLG>oy?jxg;QsJIb2ae_fpL%HE&K4+mG#K`CZV`&{f zPeM#&3|z_@Xm(;~X;a{9-NzKceitaMwBNz)Aq#yPP_%Ug{&wW!=6OqjH6dUd0@{o1 z7Up;{%bOWP!vKS&$^o8Sv@yn{Vbzmy~F=nkN213K!H;X+O#5t+GvHiUPviWHbsi`AF6FklA25|i)wxX zyr~|YaVEb}niOeiw~YrA4leMVqR^cn!K+^_+#0svSWGCBvarDG4W`k7Rzqb$HGB9HsXhbnB!C{^HaP~^8h~625xc})-B4;dlk7aaha?V%SqQRJK+2tGfPR>{R zO;o9sD=BjVD>WZ?NLlO6Sc1!k9ywdcGl3kP1b^Id71(754r3C$xYtr(SyUU%n&hZq znRC87o>nuq$yvr;lJo3;oTcE4TYvFr#9={0X(ozG)uht)pppL#RxUSO6w{XC+^p?) z`F7t4-+JULret}1=Z qHI=Ix$I{CfzkBCytam4hL;M2=CTE3lQ>r-t0000}| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/annealed_copper_tesla_winding_end.png b/src/main/resources/assets/extended_industrialization/textures/block/annealed_copper_tesla_winding_end.png new file mode 100644 index 0000000000000000000000000000000000000000..a11aa88c7d294e8d960985f9e9737c3f0d0bf6e2 GIT binary patch literal 730 zcmV<00ww*4P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0&ht~K~y+TJyW}G z6)_M!Ywz>s-XMX5A|W9PegM%^(joo;r9l+@0tE$M0u4y~1QjI|bW}(|A`c}YyKAps zyPWYR+|_8t_IP~eoVmrP&p(!F@Cad|IocXKXW_j?@E$2e#7G}wwipBVQuf7%_urSN z&mO|~gn3zDUBnb-#CgVe=`i&HS7$6{1B;I6`*U1gp2C_QXD5G9dOtCF!MCr!(QP%H zckm(5987QEtj9D=@Q(XLW$l2Ai&Naba~CsFlmges8Jk@R_wfa~N?~6sG_-|Z!Oy1| zjyZwe(toL+Lw?el@_f;S#FsrtIM@;Bu@+56+V<8Fg|AJ zH4iIYVAp8uw;J27!iMo4i!{6}=QYpgIgwnKiB!UNObZ!z&_%&SCKJh~sj%PG*wJL& zvVasXm=iHBZZ91wTkFD@m zQ__bs93I0-WP(U0gLE|!0a1xJTw5w7=Z+BN(Nzf|OI%!>A9FxPSidGtggtU12Ttce zKT;*xlXK5@WZa8Ftt3X7Zw4}9k|ZN7m$F@7lwyKPVrfUFR8&hOv3ULJ-Ewg60gitC zgw|yq5P>K}rbJ>H2g)X~jI;c?jO}r7a33efN6?QSJ$b7&hh}#RRb9~M!v8;1^v%cQ@ufiPh4{?(poT`cgiU0rr M07*qoM6N<$f(a-;TL1t6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/annealed_copper_tesla_winding_side.png b/src/main/resources/assets/extended_industrialization/textures/block/annealed_copper_tesla_winding_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d72843827b319cff4f706b92aebeacbe7cf1c8e3 GIT binary patch literal 762 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0*^^VK~y+TJyW}G z6fqP%p7-u%cd|(Uk&sYPLWPqFu`#+sF6ZbM95IUVpa5u|`!D93@A)F3TKR=cu$sT^ks~*%&vB zskm3WS-pR9+g7#3VXiUXi!muGn8qRrJ#1wqmWK(7szK;`=*I#6o@xv`A<|CZ_PvM) zqb$c^sK_QurvjW}FcL6+kDGq#W zAC(U56D*Wd(%(PPSR5pXcrLmKcw^_p=_PlBu~)<5(|Gbf=K%#0k=B{>wWSn&DlV7B zsSl%!u5=KSnP?_~)r))Atxu)JMwc^L$b3M%#G#ZARCVK0`ZHmza4qR*GN0>)P;VaH zv;yECgE+)K9~x45(LweN0b>H^N&Bc|5sB5@|4B>upR^~ zKw%`{FWW~BEPC;Qz*+QdxAj>(cD8vQ)>scxOtH(?bJo54b%3i=y*Sj%`!{SR`SQZT zOpHykNExwW&YSdEBDZxCf=d@{s+s7e)}P+72d5Rz%|ys@HVbb_?qh-%*c%ypL;UZ? zVzqWw7p6XYh;^{Zq7bk)ZH@xoU^??XR-0{{{{sH8cZy~9f#faaEtOV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/copper_tesla_winding_end.png b/src/main/resources/assets/extended_industrialization/textures/block/copper_tesla_winding_end.png new file mode 100644 index 0000000000000000000000000000000000000000..783f9c059e65d3a824ced80a6b61712f1d69bd32 GIT binary patch literal 729 zcmV;~0w(>5P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0&Yn}K~y+TJyW@k z(@+#WUNec4$uLYt5l9FmegM%^($OK&(jW?cfr5fR;18fe;y>tsf{p?q4H8*q62`Hg z-{NP^eNM1+b(eRSa~DS+KYj0-oq@FtNt1e6YXxHztTAX?2j|G03*?-otqnZ-@cvu( z_{n|LriJf1DDBW#59d9qtwvK?T(6l-SthMemRHzrS5S3{_3{r=V;VYl`1<)bhT{a< zXc%ir8g*GiD}!d&z-ZcuN~s+-n-xxPp2HJGDsYYS7)?^F-aSJWM@XUwMFbS+zqSJ` ziwM``Uv53^?QAVJtf+0v$|eM749*!mpgd0FKsjY0isXRfoI18E^N0mOZCrq!GB{!I zG>b8t6gZnsa8itLoHDT_2=5WRZ#i5Y1{uq=9kB@##)eA8XoMRl$C%H~aDH|g^dU1# za`AE2h5q*~DE#G=Rb7LzeWf%(F&tt#yN5i>NGUfI+76!}z#d8LIC0Nc%{7UW49mF| zm15%6&%g~UN^#tZiTV5vmWvA{4<9^wlOzeolPR)1BMmS(Izpc37!He& zG~(z71F;<;%fvnoMXIVq^y2yJPFgs$a+t8}So9zt^u6u>7QDkh8f_K^^ANH#00000 LNkvXXu0mjfF3UE{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/copper_tesla_winding_side.png b/src/main/resources/assets/extended_industrialization/textures/block/copper_tesla_winding_side.png new file mode 100644 index 0000000000000000000000000000000000000000..92bdb43840b4d4284f2953dd239d18e7f1281c83 GIT binary patch literal 735 zcmV<50wDc~P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0(414K~y+THB-B8 z6G0R`Gy7ieI>vUOh$0F^foKq+qDP{kLC_)^{(?{O4}d5r_y)d!f&zge5s5@3F^=us z*~bj$&e|)DW_EPXz2}^JM}7G8&DHA$ZCi60uHkG zr#PJ5!em?^Cb(`XVe#yNV__&(0UVl6=)x~B86*9!xh(ZF1S$&QLG(v`es$t1iWc29 zwa#PBU{Lpvq~-n5DDl-KCW```Z5qT361JKcueom89hjF?J|_J&*&LS{vMfcJ=N|l% zlErM1E9Pq!@|x$=JRxYF#onaTO^cJ`+n7^x8pkk=!T0NmMFQlcCY}ikwRrxJ9LSY@ z-D_4_!;vx%2wAlgnqD*SxXY1lAYu~r@#SMDbVT=<)UGLB+!y_MLhZ)jkLgj+WbsI7 zM~uHRo$nCmVCb=c&lz}kQeaw+e2)cu%JvD^(tb(m!CNzc`L7R0DH5I}@cy*)Jx*CU zNn-q18O%g83nY{!O0L!wrg?&rEX6amc=5<_sJ;Fq4*3SCGYkPsdqp!pX?L3=hWbp3odpA5+K2`3P)a0pJE4$qBy#L?b?PGe|;XlO|NDGK0 R1l#}s002ovPDHLkV1n|mOiBO% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/electrum_tesla_winding_end.png b/src/main/resources/assets/extended_industrialization/textures/block/electrum_tesla_winding_end.png new file mode 100644 index 0000000000000000000000000000000000000000..a4cdade876e450a6ea7b74c8fd657a2867921b62 GIT binary patch literal 743 zcmV?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0(?nCK~y+TJyW}i z6+sX^J@2^>uWuHFMbIA*1G5dy{09>;@CyV31HVKgK}^j}3^gzl1Z4&9?y`5iGt)iY z(=+3#o_lwosP5{n>Z)_jsP`Yfk8SPHbuG=(rnR*O&KY#hq3=Dsr}sXX_Z?$>@ao;$ zZ{y=9_n}>nVH{zsN81hX!+_?(qOCe?&sfZKEZU%|&T(;Z3ZpBWo%}`OT+7QNzJB?G zauLHi3)git3teegx^&`+I0+AL6{tJE2pN8v>w8>h=6E$j6;o#s9C+lOx4<8)8j!EBQ zxe6jmGf`WCjDji4c_=E#=efiRq|`!LF2W;CQ$am@`f8LB_M_|(7LH}VM?LI!u}c;P ZkN@~Y8#*mxgPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0>Mc{K~y+THB-w{ z6HyR7ci!Z|B*P>?5C~wgkSfZu^ncv=7j9j-b?XOMx_7OGkFtDJA@M;HBMC@C5=;z` zd0+e9A&aiQ({s=5KBv3cvlj>4y9f}59+^*;o_&9cAebTy0>p8IC?X$4(xND&SS&rO zf8XU%5Mq3Oj$+Bh#rU7RWLOruojz7JmJxU!G+jr=&STsk!d`H|91Hv^gaT8==}`v- z*F_R15-9Aj*2j&_3RG1=&YqXx9^JDymLwPqfT2S9x>rYKV;$<84$aVEmQ;DZ+~K`x(-;H)J(Tbu%}P5oPaTZ>R;Jr>~M?-S&zC9ruag?cQ&f4(&&I0_>Y&6ME%&)pPENfp(}&}9XkgF4)u zYT9E0GhIP#?~rDMVwMVxI19mFzv^Q5&JwIbUTVf(KF{&NFy*^k(a~xJa2Et`pxNP| z#L`MMCrOg(G}CNrm1x#a?((odfw63ZpL>#{YG^oXAHyk^F&T|yW-FV;;8g6!D!l0x zwb7sf)1XXfC?wdYL7_eiaI4moixpijl>j$?^l463h%@a*u^=_mh(3F8{~=G;l~$F! q$R<`bNrV?MI?ukZW3xMP65&6Y2w#>9v1sA|0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0;NerK~y+TJyW}G z)IbzHw%6YEKBY|vOAsVNL4p$KDd}jbX%Izzfr5fBfeMMApn{5*5`+{AB0`dVurIG? zJmay=nc0MquI|0_xQ}!0cyHewRM|=+&ohdmtZk(vw3f)VMo}0TLv4%`V{+~lPJ3@& zf2kfl-hZbL?WQ1Mz+eJ757<{lq<|;WArz+P_l}eEmxZo%}xzZ7U$S)wb73o*pB-! zRf(GCW5kDNQeu>47|RU%??1vW+nTSLQRM|QYxnp@vxU7*7dxF6?q2EQ_GTM*x;?jd zEsoKxhcLvcV!IX(-&P>BaiwoH8cuFqjnV7*Xf`~=l07i- zQ4w*4RxQM!8N>I0&A`X~Mufev=KPILgnm>aeRa4H1^fm@fq7T@-v1cygtm=cFGUOHPUEEXk1 zRyjTVo8xD)bmym}(uPONqH&3uXII8@O{3((PV{h(-{sIGyE3obHSGE zxO>FIfoSY})36gJIL1Gg3w)i;C{r9&+kgJ58eHGS$?*{a zvS0_qmRRyH6a_yG?VMSyZO7SuE+G>P1~)Mpo*;N|@8QdU+_pPCgi%N#*BqEAiV(*w z7t|y2bq-JzH4uh&zwMHwY}I@A^hIS`xNPMTVau`goqg$F?EPn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/superconductor_tesla_winding_side.png b/src/main/resources/assets/extended_industrialization/textures/block/superconductor_tesla_winding_side.png new file mode 100644 index 0000000000000000000000000000000000000000..03f2d3b76a204fb3494d36f2846e586c563a9827 GIT binary patch literal 868 zcmV-q1DpJbP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0{KZqK~y+TJ(EpH zR8bVi|Mxi`jx)}rqmJW8h)!c#nn5452#gjLE+Q8#1R+nyGjOx}M@n zbLIExbP}0N5_%?sY}SBb&>DtXhN1H;tE{*&v23oT(|G?oijL}9jIFI;Q`b>jD=7tgtX6mk zw)u7;v=mV=Rlvg3C46`E3r_m|D7D-8(+spN1{j=}Lw9REny9(D%&v-bXEcm!hk_`# zXexlry!TxgSDTtp?ABDxDvKPf!GkyK1*^(b^O}ok=^c~0dG4Y$sMlbW^%yN*WUV+G za1}!w8w#7U$Fg1fd~S>^uHk5v7gVC!L>$kj=5eN~2A|hgRjq2+=7I0?=nU+Jw%ub1 zKb`u4_WCk73dIh5Yb31TznsVlyCV-%vV`SNwMwrQjv|5E)O@+E0d9hFOawFT9Sq}o z(|&3eD5vHG(;oQv6`d`0XsPh1nh87`GLgv1GQ(YJ!RB%ra599_{D)fkZF^2+CF!?Q zGj9n*|H7&{^DBWyzY`l9IgYaqPoWi$re|@sW;aGwm(_^xb$bw6jNoE0h`B^e-3_ Date: Mon, 7 Oct 2024 21:04:50 -0400 Subject: [PATCH 071/159] Reference "windings" instead of "coils" --- .../lang/en_us.json | 6 +-- .../extended_industrialization/EIText.java | 6 +-- .../EITooltips.java | 8 +-- .../teslatower/TeslaTowerBlockEntity.java | 2 +- .../teslatower/TeslaTowerShapes.java | 52 +++++++++---------- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 2009f870..ab9a4df7 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -115,7 +115,6 @@ "text.extended_industrialization.brewery_requires_blazing_essence": "Requires %s to brew potions.", "text.extended_industrialization.calcification_percentage": "Calcification: %d %%", "text.extended_industrialization.coils_lef_tier": "Runs LEF in batches of up to %d at %s the EU cost.", - "text.extended_industrialization.coils_tesla_tower_tier": "Allows the Tesla Tower to transmit up to %s within %s blocks with a max loss of %s.", "text.extended_industrialization.command_tesla_network_dump_cant_have_network": "The block at %s is not a network part.", "text.extended_industrialization.command_tesla_network_dump_chunk_not_loaded": "Chunk at %s is not loaded.", "text.extended_industrialization.command_tesla_network_dump_no_network": "No existing network could be found for %s.", @@ -234,7 +233,7 @@ "text.extended_industrialization.tesla_receiver_too_far": "Transmitter is too far", "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", "text.extended_industrialization.tesla_tower_help_1": "Wirelessly transmits energy to receivers within range.", - "text.extended_industrialization.tesla_tower_help_2": "Energy transfer rate and range is determined by the coils used.", + "text.extended_industrialization.tesla_tower_help_2": "Energy transfer rate and range is determined by the windings used.", "text.extended_industrialization.tesla_tower_help_3": "Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier.", "text.extended_industrialization.tesla_tower_upgrade": "Add tesla upgrades to increase maximum range.", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", @@ -244,5 +243,6 @@ "text.extended_industrialization.tesla_transmitter_voltage": "Transmitting %s power", "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", "text.extended_industrialization.universal_transformer_to_tier_input": "Casing for cable tier to convert to (LV by default).", - "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected." + "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected.", + "text.extended_industrialization.windings_tesla_tower_tier": "Allows the Tesla Tower to transmit up to %s within %s blocks with a max loss of %s." } \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index ab3377b9..d0a1071a 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -9,7 +9,6 @@ public enum EIText implements TranslatableTextEnum BREWERY_REQUIRES_BLAZING_ESSENCE("Requires %s to brew potions."), CALCIFICATION_PERCENTAGE("Calcification: %d %%"), COILS_LEF_TIER("Runs LEF in batches of up to %d at %s the EU cost."), - COILS_TESLA_TOWER_TIER("Allows the Tesla Tower to transmit up to %s within %s blocks with a max loss of %s."), COMMAND_TESLA_NETWORK_DUMP_CANT_HAVE_NETWORK("The block at %s is not a network part."), COMMAND_TESLA_NETWORK_DUMP_CHUNK_NOT_LOADED("Chunk at %s is not loaded."), COMMAND_TESLA_NETWORK_DUMP_NO_NETWORK("No existing network could be found for %s."), @@ -128,7 +127,7 @@ public enum EIText implements TranslatableTextEnum TESLA_RECEIVER_TOO_FAR("Transmitter is too far"), TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), TESLA_TOWER_HELP_1("Wirelessly transmits energy to receivers within range."), - TESLA_TOWER_HELP_2("Energy transfer rate and range is determined by the coils used."), + TESLA_TOWER_HELP_2("Energy transfer rate and range is determined by the windings used."), TESLA_TOWER_HELP_3("Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier."), TESLA_TOWER_UPGRADE("Add tesla upgrades to increase maximum range."), TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), @@ -138,7 +137,8 @@ public enum EIText implements TranslatableTextEnum TESLA_TRANSMITTER_VOLTAGE("Transmitting %s power"), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), - WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."); + WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."), + WINDINGS_TESLA_TOWER_TIER("Allows the Tesla Tower to transmit up to %s within %s blocks with a max loss of %s."); private final String englishText; diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index fbaac999..a6035167 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -94,15 +94,15 @@ public final class EITooltips } ); - public static final TooltipAttachment COILS_TESLA = TooltipAttachment.singleLine( + public static final TooltipAttachment WINDINGS_TESLA = TooltipAttachment.singleLine( (stack, item) -> item instanceof BlockItem blockItem && - TeslaTowerBlockEntity.getTiersByCoil().containsKey(BuiltInRegistries.BLOCK.getKey(blockItem.getBlock())), + TeslaTowerBlockEntity.getTiersByWinding().containsKey(BuiltInRegistries.BLOCK.getKey(blockItem.getBlock())), (stack, item) -> { - TeslaTowerTier tier = TeslaTowerBlockEntity.getTiersByCoil() + TeslaTowerTier tier = TeslaTowerBlockEntity.getTiersByWinding() .get(BuiltInRegistries.BLOCK.getKey(((BlockItem) stack.getItem()).getBlock())); - return line(EIText.COILS_TESLA_TOWER_TIER) + return line(EIText.WINDINGS_TESLA_TOWER_TIER) .arg(tier.maxTransfer(), EU_PER_TICK_PARSER) .arg(tier.maxDistance()) .arg(tier.maxLoss(), SPACED_PERCENTAGE_PARSER); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 1cdc448b..7c183944 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -300,7 +300,7 @@ public static void registerTieredShapes() SHAPES.register(); } - public static Map getTiersByCoil() + public static Map getTiersByWinding() { return SHAPES.tiersByBlock(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index 7e128640..4221ccf0 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -27,20 +27,20 @@ public final class TeslaTowerShapes extends DataMapMultiblockTieredShapes Date: Mon, 7 Oct 2024 23:35:36 -0400 Subject: [PATCH 072/159] Use different position for distance calculations --- .../teslatower/TeslaTowerBlockEntity.java | 20 ++++++++++++------- .../component/tesla/TeslaNetworkPart.java | 2 ++ .../tesla/receiver/PlayerTeslaReceiver.java | 6 ++++++ .../tesla/receiver/TeslaReceiver.java | 10 ++++++++-- .../receiver/TeslaReceiverComponent.java | 6 ++++++ .../tesla/transmitter/TeslaTransmitter.java | 6 ++++++ .../TeslaTransmitterComponent.java | 10 +++++++++- 7 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 7c183944..5ef62b2a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -79,7 +79,8 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) transmitter = new TeslaTransmitterComponent( this, energyInputs, - () -> TeslaTransferLimits.of(cableTier, SHAPES.tiers().get(activeShape.getActiveShapeIndex())) + () -> TeslaTransferLimits.of(cableTier, SHAPES.tiers().get(activeShape.getActiveShapeIndex())), + () -> new WorldPos(level, this.getTopLoadPosition()) ); arcs = new TeslaArcs(3, 6, 4, 8, 15, 10); @@ -135,6 +136,15 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) .with(EIModularSlotPanelSlots.TESLA_TOWER_UPGRADE, upgrade)); } + public BlockPos getTopLoadPosition() + { + Direction facing = orientation.facingDirection; + BlockPos topLoadCenter = worldPosition + .relative(facing.getAxis(), -3) + .above(14); + return topLoadCenter.subtract(worldPosition); + } + @Override public TeslaArcs getTeslaArcs() { @@ -144,11 +154,7 @@ public TeslaArcs getTeslaArcs() @Override public Vec3 getTeslaArcsOffset() { - Direction facing = orientation.facingDirection; - BlockPos topLoadCenter = worldPosition - .relative(facing.getAxis(), -3) - .above(14); - return Vec3.atCenterOf(topLoadCenter.subtract(worldPosition)); + return Vec3.atCenterOf(this.getTopLoadPosition()); } @Override @@ -160,7 +166,7 @@ public boolean shouldRenderTeslaArcs() @Override public Vec3 getTeslaPlasmaOffset() { - return this.getTeslaArcsOffset().subtract(0.5, 0.5, 0.5); + return Vec3.atLowerCornerOf(this.getTopLoadPosition()); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java index 837c6b78..c861c8c6 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java @@ -29,5 +29,7 @@ default TeslaNetwork getNetwork() WorldPos getPosition(); + WorldPos getSourcePosition(); + CableTier getCableTier(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java index 4678ae61..fd008fb6 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java @@ -74,6 +74,12 @@ public WorldPos getPosition() return new WorldPos(player.level(), player.blockPosition()); } + @Override + public WorldPos getSourcePosition() + { + return this.getPosition(); + } + @Override public CableTier getCableTier() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 079ada15..5425e841 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -12,8 +12,8 @@ public interface TeslaReceiver extends TeslaNetworkPart default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { TeslaTransmitter transmitter = network.getTransmitter(); - WorldPos transmitterPos = transmitter.getPosition(); - WorldPos receiverPos = this.getPosition(); + WorldPos transmitterPos = transmitter.getSourcePosition(); + WorldPos receiverPos = this.getSourcePosition(); if(!transmitterPos.isSameDimension(receiverPos)) { @@ -111,6 +111,12 @@ default WorldPos getPosition() return this.getDelegateReceiver().getPosition(); } + @Override + default WorldPos getSourcePosition() + { + return this.getDelegateReceiver().getSourcePosition(); + } + @Override default CableTier getCableTier() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 654359aa..ae889bd0 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -130,6 +130,12 @@ public WorldPos getPosition() return new WorldPos(machine.getLevel(), machine.getBlockPos()); } + @Override + public WorldPos getSourcePosition() + { + return this.getPosition(); + } + @Override public CableTier getCableTier() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index 6b0380f4..20aff337 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -41,6 +41,12 @@ default WorldPos getPosition() return this.getDelegateTransmitter().getPosition(); } + @Override + default WorldPos getSourcePosition() + { + return this.getDelegateTransmitter().getSourcePosition(); + } + @Override default CableTier getCableTier() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index d9ed935a..b84514f4 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -25,10 +25,11 @@ public class TeslaTransmitterComponent implements IComponent.ServerOnly, TeslaTr private final MIEnergyStorage energyStorage; private final Supplier limits; + private final Supplier sourcePosition; private Optional networkKey = Optional.empty(); - public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs, Supplier limits) + public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs, Supplier limits, Supplier sourcePosition) { this.machine = machine; @@ -78,6 +79,7 @@ public boolean canExtract() }; this.limits = limits; + this.sourcePosition = sourcePosition; } @Override @@ -104,6 +106,12 @@ public WorldPos getPosition() return new WorldPos(machine.getLevel(), machine.getBlockPos()); } + @Override + public WorldPos getSourcePosition() + { + return sourcePosition.get(); + } + @Override public CableTier getCableTier() { From df53489c923f0b8cc87aa03d90f27bf710670452 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 8 Oct 2024 09:16:07 -0400 Subject: [PATCH 073/159] Replace variable loss with constant drain cost --- .../lang/en_us.json | 7 ++-- .../data_maps/block/tesla_tower_tier.json | 30 ++++++------- .../extended_industrialization/EIText.java | 11 ++--- .../EITooltips.java | 2 +- .../datamaps/DataMapDatagenProvider.java | 14 +++---- .../datamap/TeslaTowerTierData.java | 8 ++-- .../TeslaReceiverMachineBlockEntity.java | 11 ++--- .../teslatower/TeslaTowerBlockEntity.java | 21 +++++++--- .../multiblock/teslatower/TeslaTowerTier.java | 4 +- .../component/tesla/TeslaNetwork.java | 5 --- .../component/tesla/TeslaTransferLimits.java | 10 ++--- .../tesla/receiver/TeslaReceiver.java | 42 +++++-------------- .../receiver/TeslaReceiverComponent.java | 4 +- .../tesla/transmitter/TeslaTransmitter.java | 4 +- .../TeslaTransmitterComponent.java | 4 +- 15 files changed, 80 insertions(+), 97 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index ab9a4df7..ed53162a 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -227,7 +227,6 @@ "text.extended_industrialization.tesla_receiver_help_1": "Can receive energy from a linked Tesla Tower.", "text.extended_industrialization.tesla_receiver_help_2": "Must accept energy of the same voltage as the linked tower.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", - "text.extended_industrialization.tesla_receiver_loss": "Energy Loss: %s", "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Cannot receive %s power", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_receiver_too_far": "Transmitter is too far", @@ -236,13 +235,15 @@ "text.extended_industrialization.tesla_tower_help_2": "Energy transfer rate and range is determined by the windings used.", "text.extended_industrialization.tesla_tower_help_3": "Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier.", "text.extended_industrialization.tesla_tower_upgrade": "Add tesla upgrades to increase maximum range.", + "text.extended_industrialization.tesla_transmitter_consuming": "Consuming: %s", + "text.extended_industrialization.tesla_transmitter_drain": "Drain: %s", "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", "text.extended_industrialization.tesla_transmitter_no_energy_hatches": "No energy hatches provided", "text.extended_industrialization.tesla_transmitter_no_network": "No network found", "text.extended_industrialization.tesla_transmitter_receivers": "Receivers: %d", - "text.extended_industrialization.tesla_transmitter_voltage": "Transmitting %s power", + "text.extended_industrialization.tesla_transmitter_transmitting": "Transmitting: %s (%s)", "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", "text.extended_industrialization.universal_transformer_to_tier_input": "Casing for cable tier to convert to (LV by default).", "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected.", - "text.extended_industrialization.windings_tesla_tower_tier": "Allows the Tesla Tower to transmit up to %s within %s blocks with a max loss of %s." + "text.extended_industrialization.windings_tesla_tower_tier": "Allows the Tesla Tower to transmit up to %s within %s blocks with a passive drain of %s." } \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json b/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json index daf11fca..0156496b 100644 --- a/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json +++ b/src/generated/resources/data/extended_industrialization/data_maps/block/tesla_tower_tier.json @@ -1,29 +1,29 @@ { "values": { "extended_industrialization:aluminum_tesla_winding": { - "distance": 512, - "loss": 0.15, - "transfer": 8192 + "distance": 128, + "drain": 1024, + "transfer": 49152 }, "extended_industrialization:annealed_copper_tesla_winding": { - "distance": 1024, - "loss": 0.1, - "transfer": 65536 + "distance": 256, + "drain": 4096, + "transfer": 393216 }, "extended_industrialization:copper_tesla_winding": { - "distance": 128, - "loss": 0.25, - "transfer": 256 + "distance": 32, + "drain": 64, + "transfer": 1536 }, "extended_industrialization:electrum_tesla_winding": { - "distance": 256, - "loss": 0.2, - "transfer": 1024 + "distance": 64, + "drain": 256, + "transfer": 6144 }, "extended_industrialization:superconductor_tesla_winding": { - "distance": 2048, - "loss": 0.0, - "transfer": 1024000000 + "distance": 512, + "drain": 16384, + "transfer": 6144000000 } } } \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index d0a1071a..e20a6b74 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -1,8 +1,8 @@ package net.swedz.extended_industrialization; -import net.swedz.tesseract.neoforge.tooltip.TranslatableTextEnum; +import net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTranslatableTextEnum; -public enum EIText implements TranslatableTextEnum +public enum EIText implements MICompatibleTranslatableTextEnum { ACTIVATED("Activated"), BREWERY_BREWS_MULTIPLE("Brews %s potions at a time."), @@ -121,7 +121,6 @@ public enum EIText implements TranslatableTextEnum TESLA_RECEIVER_HELP_1("Can receive energy from a linked Tesla Tower."), TESLA_RECEIVER_HELP_2("Must accept energy of the same voltage as the linked tower."), TESLA_RECEIVER_LINKED("Linked to %s"), - TESLA_RECEIVER_LOSS("Energy Loss: %s"), TESLA_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), TESLA_RECEIVER_TOO_FAR("Transmitter is too far"), @@ -130,15 +129,17 @@ public enum EIText implements TranslatableTextEnum TESLA_TOWER_HELP_2("Energy transfer rate and range is determined by the windings used."), TESLA_TOWER_HELP_3("Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier."), TESLA_TOWER_UPGRADE("Add tesla upgrades to increase maximum range."), + TESLA_TRANSMITTER_CONSUMING("Consuming: %s"), + TESLA_TRANSMITTER_DRAIN("Drain: %s"), TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), TESLA_TRANSMITTER_NO_ENERGY_HATCHES("No energy hatches provided"), TESLA_TRANSMITTER_NO_NETWORK("No network found"), TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), - TESLA_TRANSMITTER_VOLTAGE("Transmitting %s power"), + TESLA_TRANSMITTER_TRANSMITTING("Transmitting: %s (%s)"), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."), - WINDINGS_TESLA_TOWER_TIER("Allows the Tesla Tower to transmit up to %s within %s blocks with a max loss of %s."); + WINDINGS_TESLA_TOWER_TIER("Allows the Tesla Tower to transmit up to %s within %s blocks with a passive drain of %s."); private final String englishText; diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index a6035167..a232fdf7 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -105,7 +105,7 @@ public final class EITooltips return line(EIText.WINDINGS_TESLA_TOWER_TIER) .arg(tier.maxTransfer(), EU_PER_TICK_PARSER) .arg(tier.maxDistance()) - .arg(tier.maxLoss(), SPACED_PERCENTAGE_PARSER); + .arg(tier.drain(), EU_PER_TICK_PARSER); } ); diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java index 68791db9..d56436b4 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java @@ -38,11 +38,11 @@ protected void gather() this.addLargeElectricFurnaceTier(MI.id("cupronickel_coil"), 8, 0.75f); this.addLargeElectricFurnaceTier(MI.id("kanthal_coil"), 32, 0.75f); - this.addTeslaTowerTier(EIBlocks.COPPER_TESLA_WINDING, CableTier.LV.getMaxTransfer(), 128, 0.25f); - this.addTeslaTowerTier(EIBlocks.ELECTRUM_TESLA_WINDING, CableTier.MV.getMaxTransfer(), 128 * 2, 0.2f); - this.addTeslaTowerTier(EIBlocks.ALUMINUM_TESLA_WINDING, CableTier.HV.getMaxTransfer(), 128 * 2 * 2, 0.15f); - this.addTeslaTowerTier(EIBlocks.ANNEALED_COPPER_TESLA_WINDING, CableTier.EV.getMaxTransfer(), 128 * 2 * 2 * 2, 0.1f); - this.addTeslaTowerTier(EIBlocks.SUPERCONDUCTOR_TESLA_WINDING, CableTier.SUPERCONDUCTOR.getMaxTransfer(), 128 * 2 * 2 * 2 * 2, 0f); + this.addTeslaTowerTier(EIBlocks.COPPER_TESLA_WINDING, CableTier.LV.getMaxTransfer() * 6, 32, 64); + this.addTeslaTowerTier(EIBlocks.ELECTRUM_TESLA_WINDING, CableTier.MV.getMaxTransfer() * 6, 32 * 2, 64 * 4); + this.addTeslaTowerTier(EIBlocks.ALUMINUM_TESLA_WINDING, CableTier.HV.getMaxTransfer() * 6, 32 * 2 * 2, 64 * 4 * 4); + this.addTeslaTowerTier(EIBlocks.ANNEALED_COPPER_TESLA_WINDING, CableTier.EV.getMaxTransfer() * 6, 32 * 2 * 2 * 2, 64 * 4 * 4 * 4); + this.addTeslaTowerTier(EIBlocks.SUPERCONDUCTOR_TESLA_WINDING, CableTier.SUPERCONDUCTOR.getMaxTransfer() * 6, 32 * 2 * 2 * 2 * 2, 64 * 4 * 4 * 4 * 4); } private void addFarmerSimpleTallCropSize(ResourceLocation block, int maxHeight) @@ -65,9 +65,9 @@ private void addLargeElectricFurnaceTier(ResourceLocation block, int batchSize, this.builder(EIDataMaps.LARGE_ELECTRIC_FURNACE_TIER).add(block, new LargeElectricFurnaceTier(batchSize, euCostMultiplier), false); } - private void addTeslaTowerTier(BlockHolder block, long maxTransfer, int maxDistance, float maxLoss) + private void addTeslaTowerTier(BlockHolder block, long maxTransfer, int maxDistance, long drain) { - this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block.identifier().location(), new TeslaTowerTierData(maxTransfer, maxDistance, maxLoss), false); + this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block.identifier().location(), new TeslaTowerTierData(maxTransfer, maxDistance, drain), false); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java index a733833e..428dbb5a 100644 --- a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java +++ b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java @@ -7,19 +7,21 @@ import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; import net.swedz.extended_industrialization.machines.tieredshapes.DataMultiblockTier; -public record TeslaTowerTierData(long maxTransfer, int maxDistance, float maxLoss) implements DataMultiblockTier +public record TeslaTowerTierData( + long maxTransfer, int maxDistance, long drain +) implements DataMultiblockTier { public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance .group( Codec.LONG.fieldOf("transfer").forGetter(TeslaTowerTierData::maxTransfer), Codec.INT.fieldOf("distance").forGetter(TeslaTowerTierData::maxDistance), - Codec.FLOAT.fieldOf("loss").forGetter(TeslaTowerTierData::maxLoss) + Codec.LONG.fieldOf("drain").forGetter(TeslaTowerTierData::drain) ) .apply(instance, TeslaTowerTierData::new)); @Override public TeslaTowerTier wrap(ResourceKey key) { - return new TeslaTowerTier(key.location(), maxTransfer, maxDistance, maxLoss); + return new TeslaTowerTier(key.location(), maxTransfer, maxDistance, drain); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index e3e7f02f..10f9d100 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -26,7 +26,6 @@ import static net.swedz.extended_industrialization.EITooltips.*; import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; -import static net.swedz.tesseract.neoforge.tooltip.Parser.*; public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable { @@ -77,17 +76,13 @@ protected void setCasingStack(ItemStack stack) if(network.isTransmitterLoaded()) { ReceiveCheckResult result = this.checkReceiveFrom(network); - if(result.isSuccess()) + if(result.isFailure()) { - content.add(EIText.TESLA_RECEIVER_LOSS.arg(result.loss(), 1, FLOAT_PERCENTAGE_SPACED)); - } - else - { - if(result.type() == ReceiveCheckResult.Type.MISMATCHING_VOLTAGE) + if(result == ReceiveCheckResult.MISMATCHING_VOLTAGE) { content.add(EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE.arg(network.getCableTier(), CABLE_TIER_SHORT), RED); } - else if(result.type() == ReceiveCheckResult.Type.TOO_FAR) + else if(result == ReceiveCheckResult.TOO_FAR) { content.add(EIText.TESLA_RECEIVER_TOO_FAR, RED); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 5ef62b2a..fee9a708 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -38,6 +38,7 @@ import java.util.List; import java.util.Map; +import static aztech.modern_industrialization.MITooltips.*; import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; @@ -53,6 +54,7 @@ public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEnti private final TeslaArcs arcs; private CableTier cableTier; + private long lastEnergyTransmitted; public TeslaTowerBlockEntity(BEP bep) { @@ -99,9 +101,12 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) if(network.isTransmitterLoaded()) { - content.add(EIText.TESLA_TRANSMITTER_VOLTAGE.arg(network.getCableTier(), CABLE_TIER_SHORT)); - content.add(EIText.TESLA_TRANSMITTER_RECEIVERS.arg(network.receiverCount())); + + content.add(EIText.TESLA_TRANSMITTER_TRANSMITTING.arg(lastEnergyTransmitted, EU_PER_TICK_PARSER).arg(network.getCableTier(), CABLE_TIER_SHORT)); + long drain = this.getPassiveDrain(); + content.add(EIText.TESLA_TRANSMITTER_DRAIN.arg(drain, EU_PER_TICK_PARSER)); + content.add(EIText.TESLA_TRANSMITTER_CONSUMING.arg(lastEnergyTransmitted + drain, EU_PER_TICK_PARSER)); } else { @@ -263,16 +268,20 @@ public void tick() return; } + lastEnergyTransmitted = 0; boolean active = false; if(shapeValid.shapeValid) { if(redstoneControl.doAllowNormalOperation(this)) { - // TODO limit transmit rate - this.transmitEnergy(Long.MAX_VALUE); - - active = true; + long amountToDrain = this.getPassiveDrain(); + long drained = this.extractEnergy(amountToDrain, false); + if(drained == amountToDrain) + { + lastEnergyTransmitted = this.transmitEnergy(this.getMaxTransfer()); + active = true; + } } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java index e542df74..2c7f640c 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java @@ -4,7 +4,9 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.machines.tieredshapes.MultiblockTier; -public record TeslaTowerTier(ResourceLocation blockId, long maxTransfer, int maxDistance, float maxLoss) implements MultiblockTier +public record TeslaTowerTier( + ResourceLocation blockId, long maxTransfer, int maxDistance, long drain +) implements MultiblockTier { public String getTranslationKey() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index 2e9b4b1d..3fc1c8fd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -146,11 +146,6 @@ public long receive(long maxReceive, boolean simulate) int remainingStorages = receivers.size() - index; long amountToReceive = remainingStorages == 1 ? remaining : remaining / remainingStorages; - float loss = receiver.checkReceiveFrom(this).loss(); - if(loss > 0) - { - amountToReceive = amountToReceive - (long) Math.floor(amountToReceive * loss); - } long received = receiver.receiveEnergy(amountToReceive, simulate); amountReceived += received; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java index 6c057c87..76e425f1 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java @@ -28,9 +28,9 @@ public int getMaxDistance() } @Override - public float getMaxLoss() + public long getPassiveDrain() { - return towerTier.maxLoss(); + return towerTier.drain(); } }; } @@ -41,7 +41,7 @@ public float getMaxLoss() int getMaxDistance(); - float getMaxLoss(); + long getPassiveDrain(); interface Delegate extends TeslaTransferLimits { @@ -66,9 +66,9 @@ default int getMaxDistance() } @Override - default float getMaxLoss() + default long getPassiveDrain() { - return this.getDelegateTransferLimits().getMaxLoss(); + return this.getDelegateTransferLimits().getPassiveDrain(); } } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 5425e841..de183a36 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -2,9 +2,9 @@ import aztech.modern_industrialization.api.energy.CableTier; import net.minecraft.util.Mth; +import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; public interface TeslaReceiver extends TeslaNetworkPart @@ -17,9 +17,7 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) if(!transmitterPos.isSameDimension(receiverPos)) { - return transmitter.isInterdimensional() ? - ReceiveCheckResult.success(network.getMaxLoss()) : - ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); + return transmitter.isInterdimensional() ? ReceiveCheckResult.SUCCESS : ReceiveCheckResult.TOO_FAR; } double distanceSqr = transmitterPos.distanceSqr(receiverPos); @@ -27,13 +25,10 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) if(distanceSqr > maxDistanceSqr) { // TODO check for global upgrade - return transmitter.isInterdimensional() ? - ReceiveCheckResult.success(network.getMaxLoss()) : - ReceiveCheckResult.failure(ReceiveCheckResult.Type.TOO_FAR); + return transmitter.isInterdimensional() ? ReceiveCheckResult.SUCCESS : ReceiveCheckResult.TOO_FAR; } - float loss = ((float) distanceSqr / maxDistanceSqr) * network.getMaxLoss(); - return ReceiveCheckResult.success(loss); + return ReceiveCheckResult.SUCCESS; } long receiveEnergy(long maxReceive, boolean simulate); @@ -42,39 +37,22 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) long getEnergyCapacity(); - record ReceiveCheckResult(Type type, float loss) + enum ReceiveCheckResult { - public static ReceiveCheckResult success(float loss) - { - return new ReceiveCheckResult(Type.SUCCESS, loss); - } - - public static ReceiveCheckResult failure(Type type) - { - if(type == Type.SUCCESS) - { - throw new IllegalArgumentException("Cannot create failure result with success type"); - } - return new ReceiveCheckResult(type, 0f); - } + SUCCESS, + MISMATCHING_VOLTAGE, + TOO_FAR, + UNDEFINED; public boolean isSuccess() { - return type == Type.SUCCESS; + return this == ReceiveCheckResult.SUCCESS; } public boolean isFailure() { return !this.isSuccess(); } - - public enum Type - { - SUCCESS, - MISMATCHING_VOLTAGE, - TOO_FAR, - UNDEFINED - } } interface Delegate extends TeslaReceiver diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index ae889bd0..8e482d53 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -85,7 +85,7 @@ public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { if(this.getCableTier() != network.getCableTier()) { - return ReceiveCheckResult.failure(ReceiveCheckResult.Type.MISMATCHING_VOLTAGE); + return ReceiveCheckResult.MISMATCHING_VOLTAGE; } else if(machine.hasLevel()) { @@ -93,7 +93,7 @@ else if(machine.hasLevel()) } else { - return ReceiveCheckResult.failure(ReceiveCheckResult.Type.UNDEFINED); + return ReceiveCheckResult.UNDEFINED; } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index 20aff337..a79b3971 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -66,9 +66,9 @@ default int getMaxDistance() } @Override - default float getMaxLoss() + default long getPassiveDrain() { - return this.getDelegateTransmitter().getMaxLoss(); + return this.getDelegateTransmitter().getPassiveDrain(); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index b84514f4..c3e2a5af 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -131,9 +131,9 @@ public int getMaxDistance() } @Override - public float getMaxLoss() + public long getPassiveDrain() { - return limits.get().getMaxLoss(); + return limits.get().getPassiveDrain(); } @Override From ca526084d14b5467512e20802608fa6f68a28baf Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 8 Oct 2024 09:44:30 -0400 Subject: [PATCH 074/159] Use cuboidal distance check rather than spherical --- .../tesla/receiver/TeslaReceiver.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index de183a36..4c6fd212 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,7 +1,6 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; import aztech.modern_industrialization.api.energy.CableTier; -import net.minecraft.util.Mth; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; @@ -12,20 +11,27 @@ public interface TeslaReceiver extends TeslaNetworkPart default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) { TeslaTransmitter transmitter = network.getTransmitter(); + + if(transmitter.isInterdimensional()) + { + return ReceiveCheckResult.SUCCESS; + } + WorldPos transmitterPos = transmitter.getSourcePosition(); WorldPos receiverPos = this.getSourcePosition(); if(!transmitterPos.isSameDimension(receiverPos)) { - return transmitter.isInterdimensional() ? ReceiveCheckResult.SUCCESS : ReceiveCheckResult.TOO_FAR; + return ReceiveCheckResult.TOO_FAR; } - double distanceSqr = transmitterPos.distanceSqr(receiverPos); - int maxDistanceSqr = Mth.square(network.getMaxDistance()); - if(distanceSqr > maxDistanceSqr) + int maxDistance = network.getMaxDistance(); + int distX = Math.abs(transmitterPos.pos().getX() - receiverPos.pos().getX()); + int distY = Math.abs(transmitterPos.pos().getY() - receiverPos.pos().getY()); + int distZ = Math.abs(transmitterPos.pos().getZ() - receiverPos.pos().getZ()); + if(distX > maxDistance || distY > maxDistance || distZ > maxDistance) { - // TODO check for global upgrade - return transmitter.isInterdimensional() ? ReceiveCheckResult.SUCCESS : ReceiveCheckResult.TOO_FAR; + return ReceiveCheckResult.TOO_FAR; } return ReceiveCheckResult.SUCCESS; From 638ffdd29dd32bd66453206fa3cede92801b84be Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 8 Oct 2024 09:46:34 -0400 Subject: [PATCH 075/159] Code clean up --- .../machines/component/tesla/receiver/TeslaReceiver.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 4c6fd212..b4346d24 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,6 +1,7 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; import aztech.modern_industrialization.api.energy.CableTier; +import net.minecraft.core.BlockPos; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; @@ -18,7 +19,9 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) } WorldPos transmitterPos = transmitter.getSourcePosition(); + BlockPos transmitterBlockPos = transmitterPos.pos(); WorldPos receiverPos = this.getSourcePosition(); + BlockPos receiverBlockPos = receiverPos.pos(); if(!transmitterPos.isSameDimension(receiverPos)) { @@ -26,9 +29,9 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) } int maxDistance = network.getMaxDistance(); - int distX = Math.abs(transmitterPos.pos().getX() - receiverPos.pos().getX()); - int distY = Math.abs(transmitterPos.pos().getY() - receiverPos.pos().getY()); - int distZ = Math.abs(transmitterPos.pos().getZ() - receiverPos.pos().getZ()); + int distX = Math.abs(transmitterBlockPos.getX() - receiverBlockPos.getX()); + int distY = Math.abs(transmitterBlockPos.getY() - receiverBlockPos.getY()); + int distZ = Math.abs(transmitterBlockPos.getZ() - receiverBlockPos.getZ()); if(distX > maxDistance || distY > maxDistance || distZ > maxDistance) { return ReceiveCheckResult.TOO_FAR; From 446311ef66839d18ba5a19e5ed138a1d596180ad Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 8 Oct 2024 09:48:51 -0400 Subject: [PATCH 076/159] Add xyz getters directly in worldpos --- .../extended_industrialization/api/WorldPos.java | 15 +++++++++++++++ .../component/tesla/receiver/TeslaReceiver.java | 9 +++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java index f21e0951..99840a26 100644 --- a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java +++ b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java @@ -71,6 +71,21 @@ public double distanceSqr(WorldPos other) return pos.distSqr(other.pos()); } + public int getX() + { + return pos.getX(); + } + + public int getY() + { + return pos.getY(); + } + + public int getZ() + { + return pos.getZ(); + } + @Override public int hashCode() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index b4346d24..080a2de5 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,7 +1,6 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; import aztech.modern_industrialization.api.energy.CableTier; -import net.minecraft.core.BlockPos; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; @@ -19,9 +18,7 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) } WorldPos transmitterPos = transmitter.getSourcePosition(); - BlockPos transmitterBlockPos = transmitterPos.pos(); WorldPos receiverPos = this.getSourcePosition(); - BlockPos receiverBlockPos = receiverPos.pos(); if(!transmitterPos.isSameDimension(receiverPos)) { @@ -29,9 +26,9 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) } int maxDistance = network.getMaxDistance(); - int distX = Math.abs(transmitterBlockPos.getX() - receiverBlockPos.getX()); - int distY = Math.abs(transmitterBlockPos.getY() - receiverBlockPos.getY()); - int distZ = Math.abs(transmitterBlockPos.getZ() - receiverBlockPos.getZ()); + int distX = Math.abs(receiverPos.getX() - receiverPos.getX()); + int distY = Math.abs(receiverPos.getY() - receiverPos.getY()); + int distZ = Math.abs(receiverPos.getZ() - receiverPos.getZ()); if(distX > maxDistance || distY > maxDistance || distZ > maxDistance) { return ReceiveCheckResult.TOO_FAR; From ea6a453ac15a13c1393c1bf65365f6de654264cc Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 8 Oct 2024 09:49:55 -0400 Subject: [PATCH 077/159] Wrong position --- .../machines/component/tesla/receiver/TeslaReceiver.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 080a2de5..a0596b9d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -26,9 +26,9 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) } int maxDistance = network.getMaxDistance(); - int distX = Math.abs(receiverPos.getX() - receiverPos.getX()); - int distY = Math.abs(receiverPos.getY() - receiverPos.getY()); - int distZ = Math.abs(receiverPos.getZ() - receiverPos.getZ()); + int distX = Math.abs(transmitterPos.getX() - receiverPos.getX()); + int distY = Math.abs(transmitterPos.getY() - receiverPos.getY()); + int distZ = Math.abs(transmitterPos.getZ() - receiverPos.getZ()); if(distX > maxDistance || distY > maxDistance || distZ > maxDistance) { return ReceiveCheckResult.TOO_FAR; From 130a1aeecfb06a0623c51f009549187552f240dc Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 11 Oct 2024 20:59:51 -0400 Subject: [PATCH 078/159] Allow calibrator and handheld receivers to use arbitrary transmitters and receivers rather than just the specific blocks --- .../teslalinkable/TeslaCalibratorItem.java | 25 +++++++++++-------- .../TeslaHandheldReceiverItem.java | 4 +-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java index dd0ddf6f..6f7e0179 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.item.teslalinkable; +import aztech.modern_industrialization.machines.MachineBlockEntity; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -19,7 +20,7 @@ import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; -import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import java.util.List; @@ -36,7 +37,7 @@ public TeslaCalibratorItem(Properties properties) } @SubscribeEvent(priority = EventPriority.LOWEST) - private static void onPlaceMachineWithConfig(BlockEvent.EntityPlaceEvent event) + private static void onPlaceReceiverWithCalibrator(BlockEvent.EntityPlaceEvent event) { if(event.getEntity() instanceof Player player) { @@ -46,11 +47,12 @@ private static void onPlaceMachineWithConfig(BlockEvent.EntityPlaceEvent event) WorldPos key = offhand.get(EIComponents.SELECTED_TESLA_NETWORK); BlockEntity blockEntity = event.getLevel().getBlockEntity(event.getPos()); - if(blockEntity instanceof TeslaReceiverMachineBlockEntity receiver) + if(blockEntity instanceof MachineBlockEntity machine && + blockEntity instanceof TeslaReceiver receiver) { receiver.setNetwork(key); - receiver.setChanged(); - receiver.sync(); + machine.setChanged(); + machine.sync(); player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_SUCCESS.text(), true); } } @@ -67,16 +69,19 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) InteractionHand usedHand = context.getHand(); ItemStack itemStack = player.getItemInHand(usedHand); BlockEntity hitBlockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); - if(player.isShiftKeyDown() && hitBlockEntity instanceof TeslaTransmitter) + if(player.isShiftKeyDown() && + hitBlockEntity instanceof TeslaTransmitter transmitter) { if(!client) { - itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new WorldPos(context.getLevel(), context.getClickedPos())); + itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, transmitter.getPosition()); player.displayClientMessage(EIText.TESLA_CALIBRATOR_SELECTED.text(), true); } return InteractionResult.sidedSuccess(client); } - else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachineBlockEntity receiver) + else if(!player.isShiftKeyDown() && + hitBlockEntity instanceof MachineBlockEntity machine && + hitBlockEntity instanceof TeslaReceiver receiver) { if(!client) { @@ -84,8 +89,8 @@ else if(!player.isShiftKeyDown() && hitBlockEntity instanceof TeslaReceiverMachi { WorldPos key = itemStack.get(EIComponents.SELECTED_TESLA_NETWORK); receiver.setNetwork(key); - receiver.setChanged(); - receiver.sync(); + machine.setChanged(); + machine.sync(); player.displayClientMessage(EIText.TESLA_CALIBRATOR_LINK_SUCCESS.text(), true); } else diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java index c57fd346..a9249103 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java @@ -38,11 +38,11 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) InteractionHand usedHand = context.getHand(); ItemStack itemStack = player.getItemInHand(usedHand); BlockEntity hitBlockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); - if(hitBlockEntity instanceof TeslaTransmitter) + if(hitBlockEntity instanceof TeslaTransmitter transmitter) { if(!client) { - itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new WorldPos(context.getLevel(), context.getClickedPos())); + itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, transmitter.getPosition()); player.displayClientMessage(EIText.TESLA_HANDHELD_SELECTED.text(), true); } return InteractionResult.sidedSuccess(client); From 17a3d78b28d1794ef5e852a1ee366da61c1b0e0a Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 12 Oct 2024 04:14:49 -0400 Subject: [PATCH 079/159] Let a tesla arc generator determine which directions are allowed for arcs to point in --- .../client/tesla/generator/TeslaArcs.java | 80 ++++++++++++++++--- .../teslatower/TeslaTowerBlockEntity.java | 2 +- 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java index df558c42..998bd51f 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java @@ -1,18 +1,28 @@ package net.swedz.extended_industrialization.client.tesla.generator; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import net.minecraft.core.Direction; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.api.Assert; import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; +import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Random; +import java.util.Set; +import java.util.function.Supplier; +import java.util.stream.Collectors; public final class TeslaArcs { + private static final Set ALL_DIRECTIONS = Arrays.stream(Direction.values()).collect(Collectors.toUnmodifiableSet()); + private static final Random RANDOM = new Random(); + private final float widthScale; private final int arcDuration; private final int arcs; private final int minLength; @@ -20,25 +30,74 @@ public final class TeslaArcs private final float maxSectionLength; private final int sectionSplits; + private final Map> offsetGenerators; + private final List trails = Lists.newArrayList(); - public TeslaArcs(int arcDuration, int arcs, + public TeslaArcs(float widthScale, + int arcDuration, int arcs, int minLength, int maxLength, - float maxSectionLength, int sectionSplits) + float maxSectionLength, int sectionSplits, + Set allowedDirections) { + Assert.that(widthScale > 0); Assert.that(arcDuration > 0); Assert.that(arcs > 0); Assert.that(minLength > 0); Assert.that(maxLength > 0 && maxLength >= minLength); Assert.that(maxSectionLength > 0); Assert.that(sectionSplits > 0); + Assert.notNull(allowedDirections); + Assert.that(!allowedDirections.isEmpty()); + this.widthScale = widthScale; this.arcDuration = arcDuration; this.arcs = arcs; this.minLength = minLength; this.maxLength = maxLength; this.maxSectionLength = maxSectionLength; this.sectionSplits = sectionSplits; + this.offsetGenerators = this.buildOffsetGenerators(allowedDirections); + } + + public TeslaArcs(float widthScale, + int arcDuration, int arcs, + int minLength, int maxLength, + float maxSectionLength, int sectionSplits) + { + this(widthScale, arcDuration, arcs, minLength, maxLength, maxSectionLength, sectionSplits, ALL_DIRECTIONS); + } + + private Map> buildOffsetGenerators(Set allowedDirections) + { + Map> generators = Maps.newHashMap(); + + for(Direction.Axis axis : Direction.Axis.values()) + { + Direction positive = Direction.get(Direction.AxisDirection.POSITIVE, axis); + boolean allowPositive = allowedDirections.contains(positive); + Direction negative = Direction.get(Direction.AxisDirection.NEGATIVE, axis); + boolean allowNegative = allowedDirections.contains(negative); + if(allowPositive && allowNegative) + { + generators.put(axis, () -> RANDOM.nextFloat(2) - 1); + } + else if(allowPositive) + { + generators.put(axis, RANDOM::nextFloat); + } + else if(allowNegative) + { + generators.put(axis, () -> RANDOM.nextFloat() - 1); + } + } + + return Collections.unmodifiableMap(generators); + } + + public float widthScale() + { + return widthScale; } public int duration() @@ -76,9 +135,10 @@ public List getTrails() return Collections.unmodifiableList(trails); } - private float randomOffset() + private float randomOffset(Direction.Axis axis) { - return RANDOM.nextFloat(2) - 1; + Supplier generator = offsetGenerators.get(axis); + return generator != null ? generator.get() : 0; } private void createArc() @@ -88,15 +148,15 @@ private void createArc() double x = 0; double y = 0; double z = 0; - float dirX = this.randomOffset(); - float dirY = this.randomOffset(); - float dirZ = this.randomOffset(); + float dirX = this.randomOffset(Direction.Axis.X); + float dirY = this.randomOffset(Direction.Axis.Y); + float dirZ = this.randomOffset(Direction.Axis.Z); for(int i = 0; i < length; i++) { float sectionLength = maxSectionLength / (i + 1); - float offsetX = this.randomOffset(); - float offsetY = this.randomOffset(); - float offsetZ = this.randomOffset(); + float offsetX = this.randomOffset(Direction.Axis.X); + float offsetY = this.randomOffset(Direction.Axis.Y); + float offsetZ = this.randomOffset(Direction.Axis.Z); for(int j = 0; j < sectionSplits; j++) { trail.addTrailPoint(new Vec3(x, y, z)); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index fee9a708..f550ceab 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -85,7 +85,7 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) () -> new WorldPos(level, this.getTopLoadPosition()) ); - arcs = new TeslaArcs(3, 6, 4, 8, 15, 10); + arcs = new TeslaArcs(1f, 3, 6, 4, 8, 15, 10); this.registerComponents(redstoneControl, upgrade, transmitter); From 53bad3e99cf6a06f3a17d60f86205b1a1554ce7f Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 12 Oct 2024 04:16:27 -0400 Subject: [PATCH 080/159] Add tesla coil (single block tesla transmitter) --- .../blockstates/tesla_coil.json | 7 + .../lang/en_us.json | 1 + .../models/block/tesla_coil.json | 13 ++ .../models/item/tesla_coil.json | 3 + .../loot_table/blocks/tesla_coil.json | 21 ++ .../tags/block/mineable/pickaxe.json | 1 + .../tags/block/needs_stone_tool.json | 1 + .../EIMachines.java | 8 + .../client/tesla/TeslaPartRenderer.java | 8 +- .../tesla/generator/TeslaArcGenerator.java | 4 +- .../TeslaCoilMachineBlockEntity.java | 207 ++++++++++++++++++ .../component/tesla/TeslaTransferLimits.java | 11 +- .../TeslaTransmitterComponent.java | 5 + .../machines/tesla_coil/overlay_side.png | Bin 0 -> 380 bytes .../tesla_coil/overlay_side_active.png | Bin 0 -> 380 bytes .../block/machines/tesla_coil/overlay_top.png | Bin 0 -> 447 bytes .../tesla_coil/overlay_top_active.png | Bin 0 -> 366 bytes 17 files changed, 282 insertions(+), 8 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/tesla_coil.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_coil.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_coil.json create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side_active.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_top.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_top_active.png diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/tesla_coil.json b/src/generated/resources/assets/extended_industrialization/blockstates/tesla_coil.json new file mode 100644 index 00000000..671eacbf --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/tesla_coil.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/tesla_coil" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index ed53162a..1ac2a302 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -47,6 +47,7 @@ "block.extended_industrialization.steel_solar_boiler": "Steel Solar Boiler", "block.extended_industrialization.steel_waste_collector": "Steel Waste Collector", "block.extended_industrialization.superconductor_tesla_winding": "Superconductor Tesla Winding", + "block.extended_industrialization.tesla_coil": "Tesla Coil", "block.extended_industrialization.tesla_receiver": "Tesla Receiver", "block.extended_industrialization.tesla_tower": "Tesla Tower", "block.extended_industrialization.universal_transformer": "Universal Transformer", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json b/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json new file mode 100644 index 00000000..2eddd36c --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json @@ -0,0 +1,13 @@ +{ + "casing": "modern_industrialization:lv", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output", + "side": "extended_industrialization:block/machines/tesla_coil/overlay_side", + "side_active": "extended_industrialization:block/machines/tesla_coil/overlay_side_active", + "top": "extended_industrialization:block/machines/tesla_coil/overlay_top", + "top_active": "extended_industrialization:block/machines/tesla_coil/overlay_top_active" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_coil.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_coil.json new file mode 100644 index 00000000..2f615ad5 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/tesla_coil.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/tesla_coil" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_coil.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_coil.json new file mode 100644 index 00000000..dbb214c5 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/tesla_coil.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:tesla_coil" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/tesla_coil" +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 85bfab2b..926f1cc4 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -39,6 +39,7 @@ "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", "extended_industrialization:superconductor_tesla_winding", + "extended_industrialization:tesla_coil", "extended_industrialization:tesla_receiver", "extended_industrialization:tesla_tower", "extended_industrialization:universal_transformer" diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index 85bfab2b..926f1cc4 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -39,6 +39,7 @@ "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", "extended_industrialization:superconductor_tesla_winding", + "extended_industrialization:tesla_coil", "extended_industrialization:tesla_receiver", "extended_industrialization:tesla_tower", "extended_industrialization:universal_transformer" diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index 17c0db41..1ed58e5d 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -27,6 +27,7 @@ import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarBoilerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarPanelMachineBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.TeslaCoilMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.UniversalTransformerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.ElectricBreweryMachineBlockEntity; @@ -408,6 +409,13 @@ public static void singleBlockSpecial(SingleBlockSpecialMachinesMIHookContext ho MachineBlockEntity::registerItemApi ); + hook.register( + "Tesla Coil", "tesla_coil", "tesla_coil", + CableTier.LV.casing, false, true, true, true, + TeslaCoilMachineBlockEntity::new, + TeslaCoilMachineBlockEntity::registerEnergyApi + ); + hook.register( "Tesla Receiver", "tesla_receiver", "tesla_receiver", CableTier.LV.casing, false, true, true, true, diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 8f9bbd7c..334d9f9d 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -22,6 +22,7 @@ import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaGenerator; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import team.lodestar.lodestone.handlers.RenderHandler; @@ -76,7 +77,8 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po .setRenderType(TESLA_ARC) .setColorRaw(1f, 1f, 1f); - for(TrailPointBuilder trail : generator.getTeslaArcs().getTrails()) + TeslaArcs arcs = generator.getTeslaArcs(); + for(TrailPointBuilder trail : arcs.getTrails()) { List points = trail.getTrailPoints(); if(points.size() < 2) @@ -84,7 +86,7 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po continue; } int ticks = points.getFirst().getTimeActive(); - builder.setAlpha(0.9f * (ticks == 0 ? partialTick : ticks == generator.getTeslaArcs().duration() ? (1 - partialTick) : 1)); + builder.setAlpha(0.9f * (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1)); int halfPoints = points.size() / 2; if(ticks == 0 || ticks == 1) { @@ -96,7 +98,7 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po Vec3 offset = generator.getTeslaArcsOffset(); matrices.translate(offset.x(), offset.y(), offset.z()); - builder.renderTrail(matrices, points, (i) -> 1 - i); + builder.renderTrail(matrices, points, (i) -> (1 - i) * arcs.widthScale()); matrices.popPose(); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java index e6b65ecb..135bb3d4 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java @@ -4,9 +4,9 @@ public interface TeslaArcGenerator { - Vec3 getTeslaArcsOffset(); - TeslaArcs getTeslaArcs(); + Vec3 getTeslaArcsOffset(); + boolean shouldRenderTeslaArcs(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java new file mode 100644 index 00000000..1da5ce91 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -0,0 +1,207 @@ +package net.swedz.extended_industrialization.machines.blockentity; + +import aztech.modern_industrialization.MICapabilities; +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.api.energy.EnergyApi; +import aztech.modern_industrialization.api.energy.MIEnergyStorage; +import aztech.modern_industrialization.api.machine.component.EnergyAccess; +import aztech.modern_industrialization.api.machine.holder.EnergyComponentHolder; +import aztech.modern_industrialization.inventory.MIInventory; +import aztech.modern_industrialization.machines.BEP; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.components.CasingComponent; +import aztech.modern_industrialization.machines.components.EnergyComponent; +import aztech.modern_industrialization.machines.components.IsActiveComponent; +import aztech.modern_industrialization.machines.components.OrientationComponent; +import aztech.modern_industrialization.machines.components.RedstoneControlComponent; +import aztech.modern_industrialization.machines.gui.MachineGuiParameters; +import aztech.modern_industrialization.machines.guicomponents.EnergyBar; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import aztech.modern_industrialization.util.Tickable; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; +import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; + +import java.util.List; +import java.util.Set; + +public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaArcGenerator +{ + private final IsActiveComponent isActive; + + private final RedstoneControlComponent redstoneControl; + private final CasingComponent casing; + + private final EnergyComponent energy; + private final MIEnergyStorage insertable; + + private final TeslaTransmitterComponent transmitter; + + private final TeslaArcs arcs; + + private long lastEnergyTransmitted; + + public TeslaCoilMachineBlockEntity(BEP bep) + { + super( + bep, + new MachineGuiParameters.Builder(EI.id("tesla_coil"), false).build(), + new OrientationComponent.Params(false, false, false) + ); + + isActive = new IsActiveComponent(); + + redstoneControl = new RedstoneControlComponent(); + casing = new CasingComponent() + { + @Override + protected void setCasingStack(ItemStack stack) + { + super.setCasingStack(stack); + + if(level != null && !level.isClientSide()) + { + transmitter.getNetwork().updateAll(); + } + } + }; + + energy = new EnergyComponent(this, casing::getEuCapacity); + insertable = energy.buildInsertable(casing::canInsertEu); + + transmitter = new TeslaTransmitterComponent( + this, List.of(energy), + () -> + { + CableTier tier = casing.getCableTier(); + long maxTransfer = tier.getMaxTransfer(); + return TeslaTransferLimits.of(tier, maxTransfer, 32, 2); + } + ); + + arcs = new TeslaArcs(0.25f, 3, 6, 1, 3, 2, 5, Set.of(Direction.UP, Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST)); + + this.registerComponents(isActive, redstoneControl, casing, energy, transmitter); + + this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(81, 34), energy::getEu, energy::getCapacity)); + this.registerGuiComponent(new ModularSlotPanel.Server(this, 0) + .withRedstoneModule(redstoneControl) + .withCasings(casing)); + } + + @Override + public TeslaArcs getTeslaArcs() + { + return arcs; + } + + @Override + public Vec3 getTeslaArcsOffset() + { + return Vec3.upFromBottomCenterOf(Vec3i.ZERO, 1); + } + + @Override + public boolean shouldRenderTeslaArcs() + { + return isActive.isActive; + } + + @Override + public MIInventory getInventory() + { + return MIInventory.EMPTY; + } + + @Override + public EnergyAccess getEnergyComponent() + { + return energy; + } + + @Override + public TeslaTransmitter getDelegateTransmitter() + { + return transmitter; + } + + @Override + protected MachineModelClientData getMachineModelData() + { + MachineModelClientData data = new MachineModelClientData(casing.getCasing()); + data.isActive = isActive.isActive; + orientation.writeModelData(data); + return data; + } + + @Override + public void setLevel(Level level) + { + super.setLevel(level); + + this.setNetwork(this.getPosition()); + this.getNetwork().loadTransmitter(transmitter); + } + + @Override + public void setRemoved() + { + super.setRemoved(); + + if(level.isClientSide()) + { + return; + } + + if(this.hasNetwork()) + { + this.getNetwork().unloadTransmitter(); + } + else + { + EI.LOGGER.error("Failed to unload transmitter into the network because no network was set yet"); + } + } + + @Override + public void tick() + { + if(level.isClientSide()) + { + arcs.tick(); + return; + } + + lastEnergyTransmitted = 0; + boolean active = false; + + if(redstoneControl.doAllowNormalOperation(this)) + { + long amountToDrain = this.getPassiveDrain(); + long drained = this.extractEnergy(amountToDrain, false); + if(drained == amountToDrain) + { + lastEnergyTransmitted = this.transmitEnergy(this.getMaxTransfer()); + active = true; + } + } + + isActive.updateActive(active, this); + } + + public static void registerEnergyApi(BlockEntityType bet) + { + MICapabilities.onEvent((event) -> + event.registerBlockEntity(EnergyApi.SIDED, bet, (be, direction) -> ((TeslaCoilMachineBlockEntity) be).insertable)); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java index 76e425f1..3cfa46f5 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java @@ -6,6 +6,11 @@ public interface TeslaTransferLimits { static TeslaTransferLimits of(CableTier cableTier, TeslaTowerTier towerTier) + { + return of(cableTier, towerTier.maxTransfer(), towerTier.maxDistance(), towerTier.drain()); + } + + static TeslaTransferLimits of(CableTier cableTier, long maxTransfer, int maxDistance, long passiveDrain) { return new TeslaTransferLimits() { @@ -18,19 +23,19 @@ public CableTier getCableTier() @Override public long getMaxTransfer() { - return towerTier.maxTransfer(); + return maxTransfer; } @Override public int getMaxDistance() { - return towerTier.maxDistance(); + return maxDistance; } @Override public long getPassiveDrain() { - return towerTier.drain(); + return passiveDrain; } }; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index c3e2a5af..4c14a32c 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -82,6 +82,11 @@ public boolean canExtract() this.sourcePosition = sourcePosition; } + public TeslaTransmitterComponent(MachineBlockEntity machine, List energyInputs, Supplier limits) + { + this(machine, energyInputs, limits, () -> new WorldPos(machine.getLevel(), machine.getBlockPos())); + } + @Override public boolean hasNetwork() { diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side.png new file mode 100644 index 0000000000000000000000000000000000000000..98f101765a8dc0f2d9a1c0da418f3cd2bba60575 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4T7F7jv*HQ$$$R;w`W#u;PjfzyJ45Y?dwnM zrG=H5rHzf7RruAJjfI7owFT18+&;?@%EWFFo1mn3CP82E)PiG&nMDus6-XU8c;d{5 z*Z=L?&e#7pkofS~(bbSKjM?Gb^TfooA0K|}H}ibzqYCeog66!rAhDb?E{riK!LeBzG%X#4>RGbzqYCeog66!rAhDb?E{riK!LeBzG%X#4>RGPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0aQsuK~y+Tos!Q= z!$1(mXE#ZMZSn#>fL8@?Lh;axf1rJhzJmv!p)cTB@T6F8f_f1|qNvM$~l=!HFfch8LJ( zC}{xpfrcGe2jlVUQj|1+@3<$tE0D5D+9F&+?mG>nY?1~r9d?gV!3vPFNgA-$(s}>t zr-LdOV<`8R=>5IzLaJ86O1)0)c5B|mate}NNdwk9m`$hi67YKhDVwB$&&h=Q@b59A z2RsFAa$9|jC>s~3+oz$sAH47e(?CgBAEOZ;Tm*Gzvy9K-d~<7^)brcB!%u;Fu*&h6 p%+TrCC12L*w7y-Ii4d(Z^ac4z^N?9=_s#$S002ovPDHLkV1oJu#p(b6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_top_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_top_active.png new file mode 100644 index 0000000000000000000000000000000000000000..aad06a210a6ab4d77bdc6f2ab73784328346d4c9 GIT binary patch literal 366 zcmV-!0g?WRP);V}SR$AJcnpA6<*6Nl$S!5vPduGc`r_Qn>qv-J;>I^nm5!}Jya>vg3 z&bif9PG&&JYfXY0T>6L*KNF~H3Cc#t5q$qX|9tx4V>|HMCte(o3S_r{ z;b03~kr-GI_s~Ex8eEP_r(PU_YdgM~C>aYSmbQ+)2m*=p&@@LX?XDwW09~>oLEteG zhMTLa1e1?b*^9#@FJ36uZUMt#JhGat)+~V&iGc}DIIk%7qcIA+344aiR4nNRco;6;6W!WzR9|G-ep9?Ah2F8Wi@TbF9%2VD0<*=ha9OaK4? M07*qoM6N<$f;_^XI{*Lx literal 0 HcmV?d00001 From a61490bc6841c1e964065764cace95c84f9b067a Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 14 Oct 2024 21:00:35 -0400 Subject: [PATCH 081/159] Improve tesla coil appearance and add arc animations --- .../models/block/tesla_coil.json | 2 ++ .../EIMachines.java | 2 +- .../client/tesla/TeslaPartRenderer.java | 3 --- .../tesla/generator/TeslaArcGenerator.java | 4 ---- .../client/tesla/generator/TeslaArcs.java | 19 ++++++++++++------ .../TeslaCoilMachineBlockEntity.java | 19 +++++++++++------- .../teslatower/TeslaTowerBlockEntity.java | 11 ++++------ .../machines/tesla_coil/overlay_front.png | Bin 0 -> 361 bytes .../tesla_coil/overlay_front_active.png | Bin 0 -> 364 bytes .../machines/tesla_coil/overlay_side.png | Bin 380 -> 226 bytes .../tesla_coil/overlay_side_active.png | Bin 380 -> 226 bytes .../block/machines/tesla_coil/overlay_top.png | Bin 447 -> 312 bytes .../tesla_coil/overlay_top_active.png | Bin 366 -> 312 bytes 13 files changed, 32 insertions(+), 28 deletions(-) create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_front.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_front_active.png diff --git a/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json b/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json index 2eddd36c..e249f026 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json @@ -2,6 +2,8 @@ "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/tesla_coil/overlay_front", + "front_active": "extended_industrialization:block/machines/tesla_coil/overlay_front_active", "item_auto": "modern_industrialization:block/overlays/item_auto", "output": "modern_industrialization:block/overlays/output", "side": "extended_industrialization:block/machines/tesla_coil/overlay_side", diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index 1ed58e5d..38f5a76b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -411,7 +411,7 @@ public static void singleBlockSpecial(SingleBlockSpecialMachinesMIHookContext ho hook.register( "Tesla Coil", "tesla_coil", "tesla_coil", - CableTier.LV.casing, false, true, true, true, + CableTier.LV.casing, true, true, true, true, TeslaCoilMachineBlockEntity::new, TeslaCoilMachineBlockEntity::registerEnergyApi ); diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 334d9f9d..84b44d17 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -95,9 +95,6 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po matrices.pushPose(); - Vec3 offset = generator.getTeslaArcsOffset(); - matrices.translate(offset.x(), offset.y(), offset.z()); - builder.renderTrail(matrices, points, (i) -> (1 - i) * arcs.widthScale()); matrices.popPose(); diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java index 135bb3d4..e6d4f801 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java @@ -1,12 +1,8 @@ package net.swedz.extended_industrialization.client.tesla.generator; -import net.minecraft.world.phys.Vec3; - public interface TeslaArcGenerator { TeslaArcs getTeslaArcs(); - Vec3 getTeslaArcsOffset(); - boolean shouldRenderTeslaArcs(); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java index 998bd51f..6b52cdeb 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java @@ -20,7 +20,7 @@ public final class TeslaArcs { private static final Set ALL_DIRECTIONS = Arrays.stream(Direction.values()).collect(Collectors.toUnmodifiableSet()); - private static final Random RANDOM = new Random(); + public static final Random RANDOM = new Random(); private final float widthScale; private final int arcDuration; @@ -30,6 +30,8 @@ public final class TeslaArcs private final float maxSectionLength; private final int sectionSplits; + private final Supplier originSupplier; + private final Map> offsetGenerators; private final List trails = Lists.newArrayList(); @@ -38,6 +40,7 @@ public TeslaArcs(float widthScale, int arcDuration, int arcs, int minLength, int maxLength, float maxSectionLength, int sectionSplits, + Supplier originSupplier, Set allowedDirections) { Assert.that(widthScale > 0); @@ -47,6 +50,7 @@ public TeslaArcs(float widthScale, Assert.that(maxLength > 0 && maxLength >= minLength); Assert.that(maxSectionLength > 0); Assert.that(sectionSplits > 0); + Assert.notNull(originSupplier); Assert.notNull(allowedDirections); Assert.that(!allowedDirections.isEmpty()); @@ -57,15 +61,17 @@ public TeslaArcs(float widthScale, this.maxLength = maxLength; this.maxSectionLength = maxSectionLength; this.sectionSplits = sectionSplits; + this.originSupplier = originSupplier; this.offsetGenerators = this.buildOffsetGenerators(allowedDirections); } public TeslaArcs(float widthScale, int arcDuration, int arcs, int minLength, int maxLength, - float maxSectionLength, int sectionSplits) + float maxSectionLength, int sectionSplits, + Supplier originSupplier) { - this(widthScale, arcDuration, arcs, minLength, maxLength, maxSectionLength, sectionSplits, ALL_DIRECTIONS); + this(widthScale, arcDuration, arcs, minLength, maxLength, maxSectionLength, sectionSplits, originSupplier, ALL_DIRECTIONS); } private Map> buildOffsetGenerators(Set allowedDirections) @@ -145,9 +151,10 @@ private void createArc() { TrailPointBuilder trail = TrailPointBuilder.create(arcDuration); int length = RANDOM.nextInt(minLength, maxLength + 1); - double x = 0; - double y = 0; - double z = 0; + Vec3 origin = originSupplier.get(); + double x = origin.x(); + double y = origin.y(); + double z = origin.z(); float dirX = this.randomOffset(Direction.Axis.X); float dirY = this.randomOffset(Direction.Axis.Y); float dirZ = this.randomOffset(Direction.Axis.Z); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java index 1da5ce91..7663f5ac 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -89,7 +89,18 @@ protected void setCasingStack(ItemStack stack) } ); - arcs = new TeslaArcs(0.25f, 3, 6, 1, 3, 2, 5, Set.of(Direction.UP, Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST)); + arcs = new TeslaArcs( + 0.25f, 3, 3, 1, 3, 2, 5, + () -> + { + double radius = 0.35; + boolean side = TeslaArcs.RANDOM.nextBoolean(); + double x = (side ? radius : radius * TeslaArcs.RANDOM.nextDouble()) * (TeslaArcs.RANDOM.nextBoolean() ? 1 : -1); + double z = (!side ? radius : radius * TeslaArcs.RANDOM.nextDouble()) * (TeslaArcs.RANDOM.nextBoolean() ? 1 : -1); + return Vec3.upFromBottomCenterOf(Vec3i.ZERO, 1).add(x, -0.2, z); + }, + Set.of(Direction.UP, Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST) + ); this.registerComponents(isActive, redstoneControl, casing, energy, transmitter); @@ -105,12 +116,6 @@ public TeslaArcs getTeslaArcs() return arcs; } - @Override - public Vec3 getTeslaArcsOffset() - { - return Vec3.upFromBottomCenterOf(Vec3i.ZERO, 1); - } - @Override public boolean shouldRenderTeslaArcs() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index f550ceab..0fbbc345 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -85,7 +85,10 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) () -> new WorldPos(level, this.getTopLoadPosition()) ); - arcs = new TeslaArcs(1f, 3, 6, 4, 8, 15, 10); + arcs = new TeslaArcs( + 1f, 3, 6, 4, 8, 15, 10, + () -> Vec3.atCenterOf(this.getTopLoadPosition()) + ); this.registerComponents(redstoneControl, upgrade, transmitter); @@ -156,12 +159,6 @@ public TeslaArcs getTeslaArcs() return arcs; } - @Override - public Vec3 getTeslaArcsOffset() - { - return Vec3.atCenterOf(this.getTopLoadPosition()); - } - @Override public boolean shouldRenderTeslaArcs() { diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_front.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..f4f5460a0d3f6b0e3816aae398e62063bead9824 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufG}g$wN6f;;6G0n#}EtuWS+h?|NlS!UCt)(;K37?%R3l+ zWO*8{82iQ4J+$ZF&k({PTJ!S<<0&VGl&uPt$9CS9`@>$SGPUwR(}@Q^@9GDLX*H~5 zJ=q+~@Mywot^x^%n-UC`IT!x&Gxq>Zz2Yy@ApPLsLq_wLXJ?xy{5mt!xF>;4V8Q9b zPi7oY3P{Mzh^XX;acPG_0sueA>SH3x|$hqE|`+1H-eurJt9*ULOby2?kGBKbLh*2~7aL C$cPaD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_front_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..e10dfcacafcc9a6d4be663b03a1a2a041a45434e GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DX1EZ&lV~B-+GEd){|NkHVE@u;X@Zbr{@rl{b4UunOb?E>BNJdcl86rv>H~j zo@|a~cr@WPSAm4XO$i3eoC|;XnR|eyUhx-ckbdy+A*1=rv$M?;ew~?V+>^j2u;BFJ zCo>Kx1#Cz@&Szj({Y>ZZ=J53k7I7qGWpW=o!H~yrCd^Gig>}IWhWTkTSYI$4Wk?oI zwm8N)H6<8e&Ih4zW`JS6@2;l0m?!EWVIl9#<|-b{0DI)m3hE|$l&?iFHjaLfT;z^ zgIxgPkn0L?7(m$=06A>X{SO0-|NrCEPZVH+(qw~C14a!10U8PoU|;|Mv1%*5e7)0~Nsza2mkD$jtET z|38M$fB!HT@bf`MF#%QsK+fl3VP^R7`!9nG7bgQdD+^Qx6MtYg0O^@c$mnl*@C{Q3o^u>rh+xc|i~hTTtJFr0Y)1}cIH20Aw~FaQ9feMRDdB19(u O0000)H6<8e&Ih4zW`JS6@2;l0m?!EWVIl9#<|-b{0DI)m3hE|$l&?iFHjaLfT;z^ zgIxgPkn0L?7(m$=06A>X{SO0-|NrCEPZVH+(qw~C14a!10U8PoU|;|Mv1%*5e7)0~Nsza2mkD$jtET z|38M$fB!HT@bf`MF#%QsK+fl3VP^R7`!9nG7bgQdD+^Qx6MtYg0O^@c$mnl*@C{Q3o^u>rh+xc|i~hTTtJFr0Y)1}cIH20Aw~FaQ9feMRDdB19(u O0000~VE{?|!~(DZumB?m zptyh>Fz^PzV*wPuu=o#&YQUPjk)sqA;9vtl8esyUct!{4u>%TlSb}0gHx(NO0h~!0 xN~0uWY#2Ey!)ylutl1e`GDZe4c?Jds1^~(EcKH6+kM95g002ovPDHLkV1hy@Unl?o delta 383 zcmV-_0f7Fv0>1;0Nq@rt01m?e$8V@)00040Nkl_?(Mv5A+U#cCZ<{k`o% zs#d~Ey-w|RYk1zoate}NNdwk9m`$hi67YKhDVwB$&&h=Q@b59A2RsFAa$9|jC>s~3 z+oz$sAH47e(?CgBAEOZ;Tm*Gzvy9K-d~<7^)brcB!%u;Fu*&h6%+TrCC12L*w7y-I di4d(Z^ac4z^N?9=_s#$S002ovPDHLkV1fbsy5;}? diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_top_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_top_active.png index aad06a210a6ab4d77bdc6f2ab73784328346d4c9..273dfed34fe441efe33c297cfc4417c91d62589d 100644 GIT binary patch delta 296 zcmaFIw1a7aWIY=L1B3kM|A|0~u{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstUx|zfk$L9 z0|Vbd5N6ylG5al0@T{kcV~B-+GEd){|K}YT8Ke`Qi*r0(#3Wb8sKG5<^YcgJ!wbv4 z^7sVUMHpI53wd_1Ya-+2{`dD6`gE)`;9)xdzOMdYS0clb>8z*Pm?vy@U`R7yS683G z#yDX{bcM)`QiFy>29Jx=zRv9l(Bt~RsdJp8phBX7VbjSYOdA+CFetMx*wG+k@PX|> zGNZ`;4L|rhvkuJKGjXwq*n8Ihl(}voX%`l=NDxlAI%9 ssd+euopFugP045@H#UPxHXvX)`J(K{zw7<)fnHAfM`hEYV|DZh&2pAz@cYd9QH-GjQQ-}W|vUw0rWo w;6;6W!WzR9|G-ep9?Ah2F8Wi@TbF9%2VD0<*=ha9OaK4?07*qoM6N<$f)1ab-T(jq From 14bd79e6d903d1a58f6d5de88ca7393c9f058012 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 14 Oct 2024 21:21:35 -0400 Subject: [PATCH 082/159] Add config option to disable tesla animations --- .../extended_industrialization/EIClient.java | 8 ++++- .../EIClientConfig.java | 30 +++++++++++++++++++ .../client/tesla/TeslaPartRenderer.java | 8 +++-- .../TeslaCoilMachineBlockEntity.java | 6 +++- .../teslatower/TeslaTowerBlockEntity.java | 6 +++- 5 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/EIClientConfig.java diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 41ea5848..74466f9f 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -19,9 +19,12 @@ import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.client.event.InputEvent; import net.neoforged.neoforge.client.event.RegisterClientTooltipComponentFactoriesEvent; @@ -48,8 +51,11 @@ @EventBusSubscriber(value = Dist.CLIENT, modid = EI.ID, bus = EventBusSubscriber.Bus.MOD) public final class EIClient { - public EIClient(IEventBus bus) + public EIClient(IEventBus bus, ModContainer container) { + container.registerConfig(ModConfig.Type.CLIENT, EIClientConfig.SPEC); + bus.addListener(FMLCommonSetupEvent.class, (event) -> EIClientConfig.loadConfig()); + EIKeybinds.init(bus); NeoForge.EVENT_BUS.addListener(ClientTickEvent.Post.class, (event) -> diff --git a/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java b/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java new file mode 100644 index 00000000..30a85a89 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java @@ -0,0 +1,30 @@ +package net.swedz.extended_industrialization; + +import net.neoforged.neoforge.common.ModConfigSpec; + +public final class EIClientConfig +{ + private static final ModConfigSpec.Builder BUILDER; + + private static final ModConfigSpec.BooleanValue RENDER_TESLA_ANIMATIONS; + + public static final ModConfigSpec SPEC; + + static + { + BUILDER = new ModConfigSpec.Builder(); + + RENDER_TESLA_ANIMATIONS = BUILDER + .comment("Whether tesla animations should be rendered or not") + .define("render_tesla_animations", true); + + SPEC = BUILDER.build(); + } + + public static boolean renderTeslaAnimations; + + public static void loadConfig() + { + renderTeslaAnimations = RENDER_TESLA_ANIMATIONS.get(); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 84b44d17..edadcae2 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -19,6 +19,7 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; @@ -279,7 +280,10 @@ private static void renderPlasmaAddVertex(PoseStack matrices, int light, int ove static void render(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { renderHighlight(machine, partialTick, matrices, buffer, light, overlay); - renderArcs(machine, partialTick, matrices, buffer, light, overlay); - renderPlasma(machine, partialTick, matrices, buffer, light, overlay); + if(EIClientConfig.renderTeslaAnimations) + { + renderArcs(machine, partialTick, matrices, buffer, light, overlay); + renderPlasma(machine, partialTick, matrices, buffer, light, overlay); + } } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java index 7663f5ac..d511bc5b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -25,6 +25,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; @@ -183,7 +184,10 @@ public void tick() { if(level.isClientSide()) { - arcs.tick(); + if(EIClientConfig.renderTeslaAnimations) + { + arcs.tick(); + } return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 0fbbc345..605e60fc 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -20,6 +20,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; @@ -261,7 +262,10 @@ public void tick() if(level.isClientSide()) { - arcs.tick(); + if(EIClientConfig.renderTeslaAnimations) + { + arcs.tick(); + } return; } From 4754d4a0ad3095958a2608013fbd3c7c4e829b06 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 14 Oct 2024 23:23:07 -0400 Subject: [PATCH 083/159] Make tesla plasma shape able to be different for each plasma generator --- .../client/tesla/TeslaPartRenderer.java | 45 ++++--------------- .../tesla/generator/TeslaPlasmaGenerator.java | 4 +- .../generator/TeslaPlasmaShapeAdder.java | 11 +++++ .../teslatower/TeslaTowerBlockEntity.java | 21 +++++++-- 4 files changed, 41 insertions(+), 40 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaShapeAdder.java diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index edadcae2..f20252e1 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -2,7 +2,6 @@ import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.util.RenderHelper; -import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -14,10 +13,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIComponents; @@ -34,7 +30,6 @@ import team.lodestar.lodestone.systems.rendering.trail.TrailPoint; import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -103,25 +98,6 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po } } - private record IgnoreSideShape(Direction ignoreSide, VoxelShape shape) - { - } - - private static final List TESLA_TOP_LOAD_SHAPES; - - static - { - List shapes = Lists.newArrayList(); - double inflate = 0.1; - shapes.add(new IgnoreSideShape(Direction.UP, Shapes.create(new AABB(-1, -2 - inflate, -1, 1 + 1, -2 + 1 - inflate, 1 + 1).inflate(inflate, 0, inflate)))); - shapes.add(new IgnoreSideShape(Direction.DOWN, Shapes.create(new AABB(-1, 2 + inflate, -1, 1 + 1, 2 + 1 + inflate, 1 + 1).inflate(inflate, 0, inflate)))); - shapes.add(new IgnoreSideShape(Direction.WEST, Shapes.create(new AABB(2 + inflate, -1, -1, 2 + 1 + inflate, 1 + 1, 1 + 1).inflate(0, inflate, inflate)))); - shapes.add(new IgnoreSideShape(Direction.EAST, Shapes.create(new AABB(-2 - inflate, -1, -1, -2 + 1 - inflate, 1 + 1, 1 + 1).inflate(0, inflate, inflate)))); - shapes.add(new IgnoreSideShape(Direction.NORTH, Shapes.create(new AABB(-1, -1, 2 + inflate, 1 + 1, 1 + 1, 2 + 1 + inflate).inflate(inflate, inflate, 0)))); - shapes.add(new IgnoreSideShape(Direction.SOUTH, Shapes.create(new AABB(-1, -1, -2 - inflate, 1 + 1, 1 + 1, -2 + 1 - inflate).inflate(inflate, inflate, 0)))); - TESLA_TOP_LOAD_SHAPES = Collections.unmodifiableList(shapes); - } - private static RenderType getPlasmaRenderType(float u, float v) { return RenderType.create( @@ -155,23 +131,20 @@ private static void renderPlasma(MachineBlockEntity machine, float partialTick, float v = (tick * speed) % 1f; VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); - for(IgnoreSideShape shape : TESLA_TOP_LOAD_SHAPES) + generator.getTeslaPlasmaShape((box, ignoreFaces) -> { - for(AABB box : shape.shape().toAabbs()) + for(Direction direction : Direction.values()) { - for(Direction direction : Direction.values()) + if(!ignoreFaces.contains(direction)) { - if(direction != shape.ignoreSide()) - { - renderPlasmaAddVertexesFace( - matrices, light, overlay, vc, direction, - (float) box.minX, (float) box.minY, (float) box.minZ, - (float) box.maxX, (float) box.maxY, (float) box.maxZ - ); - } + renderPlasmaAddVertexesFace( + matrices, light, overlay, vc, direction, + (float) box.minX, (float) box.minY, (float) box.minZ, + (float) box.maxX, (float) box.maxY, (float) box.maxZ + ); } } - } + }); matrices.popPose(); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java index 2f84edde..6df0eea1 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java @@ -4,7 +4,9 @@ public interface TeslaPlasmaGenerator { + boolean shouldRenderTeslaPlasma(); + Vec3 getTeslaPlasmaOffset(); - boolean shouldRenderTeslaPlasma(); + void getTeslaPlasmaShape(TeslaPlasmaShapeAdder shapes); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaShapeAdder.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaShapeAdder.java new file mode 100644 index 00000000..1474cc98 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaShapeAdder.java @@ -0,0 +1,11 @@ +package net.swedz.extended_industrialization.client.tesla.generator; + +import net.minecraft.core.Direction; +import net.minecraft.world.phys.AABB; + +import java.util.Set; + +public interface TeslaPlasmaShapeAdder +{ + void add(AABB box, Set ignoreFaces); +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 605e60fc..44b68a06 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -18,6 +18,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; @@ -26,6 +27,7 @@ import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; @@ -38,6 +40,7 @@ import java.util.List; import java.util.Map; +import java.util.Set; import static aztech.modern_industrialization.MITooltips.*; import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; @@ -55,7 +58,7 @@ public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEnti private final TeslaArcs arcs; private CableTier cableTier; - private long lastEnergyTransmitted; + private long lastEnergyTransmitted; public TeslaTowerBlockEntity(BEP bep) { @@ -166,6 +169,12 @@ public boolean shouldRenderTeslaArcs() return isActive.isActive; } + @Override + public boolean shouldRenderTeslaPlasma() + { + return this.shouldRenderTeslaArcs(); + } + @Override public Vec3 getTeslaPlasmaOffset() { @@ -173,9 +182,15 @@ public Vec3 getTeslaPlasmaOffset() } @Override - public boolean shouldRenderTeslaPlasma() + public void getTeslaPlasmaShape(TeslaPlasmaShapeAdder shapes) { - return this.shouldRenderTeslaArcs(); + double inflate = 0.1; + shapes.add(new AABB(-1, -2 - inflate, -1, 2, -1 - inflate, 2).inflate(inflate, 0, inflate), Set.of(Direction.UP)); + shapes.add(new AABB(-1, 2 + inflate, -1, 2, 3 + inflate, 2).inflate(inflate, 0, inflate), Set.of(Direction.DOWN)); + shapes.add(new AABB(2 + inflate, -1, -1, 3 + inflate, 2, 2).inflate(0, inflate, inflate), Set.of(Direction.WEST)); + shapes.add(new AABB(-2 - inflate, -1, -1, -1 - inflate, 2, 2).inflate(0, inflate, inflate), Set.of(Direction.EAST)); + shapes.add(new AABB(-1, -1, 2 + inflate, 2, 2, 3 + inflate).inflate(inflate, inflate, 0), Set.of(Direction.NORTH)); + shapes.add(new AABB(-1, -1, -2 - inflate, 2, 2, -1 - inflate).inflate(inflate, inflate, 0), Set.of(Direction.SOUTH)); } @Override From 8ddb578bb5cfaf86f9e372729c2564a8f44f1c1d Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 14 Oct 2024 23:51:43 -0400 Subject: [PATCH 084/159] Clean up internal tesla arc and plasma behavior handling --- .../client/tesla/TeslaPartRenderer.java | 118 ++++++++++-------- .../tesla/generator/TeslaArcBehavior.java | 8 ++ .../generator/TeslaArcBehaviorHolder.java | 6 + .../tesla/generator/TeslaArcGenerator.java | 8 -- .../tesla/generator/TeslaPlasmaBehavior.java | 16 +++ .../generator/TeslaPlasmaBehaviorHolder.java | 6 + .../tesla/generator/TeslaPlasmaGenerator.java | 12 -- .../TeslaCoilMachineBlockEntity.java | 28 +++-- .../teslatower/TeslaTowerBlockEntity.java | 90 ++++++++----- 9 files changed, 177 insertions(+), 115 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehavior.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehaviorHolder.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehaviorHolder.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index f20252e1..4b28190f 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -18,9 +18,11 @@ import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.api.WorldPos; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import team.lodestar.lodestone.handlers.RenderHandler; import team.lodestar.lodestone.registry.client.LodestoneRenderTypes; @@ -66,34 +68,38 @@ private static Optional getHeldNetworkKey() private static void renderArcs(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { - if(machine instanceof TeslaArcGenerator generator && generator.shouldRenderTeslaArcs()) + if(machine instanceof TeslaArcBehaviorHolder holder) { - VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld(); - builder.replaceBufferSource(RenderHandler.LATE_DELAYED_RENDER.getTarget()) - .setRenderType(TESLA_ARC) - .setColorRaw(1f, 1f, 1f); - - TeslaArcs arcs = generator.getTeslaArcs(); - for(TrailPointBuilder trail : arcs.getTrails()) + TeslaArcBehavior behavior = holder.getTeslaArcBehavior(); + if(behavior.shouldRender()) { - List points = trail.getTrailPoints(); - if(points.size() < 2) - { - continue; - } - int ticks = points.getFirst().getTimeActive(); - builder.setAlpha(0.9f * (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1)); - int halfPoints = points.size() / 2; - if(ticks == 0 || ticks == 1) + VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld(); + builder.replaceBufferSource(RenderHandler.LATE_DELAYED_RENDER.getTarget()) + .setRenderType(TESLA_ARC) + .setColorRaw(1f, 1f, 1f); + + TeslaArcs arcs = behavior.getArcs(); + for(TrailPointBuilder trail : arcs.getTrails()) { - points = points.subList(0, (int) (halfPoints * partialTick) + (ticks == 1 ? halfPoints : 0)); + List points = trail.getTrailPoints(); + if(points.size() < 2) + { + continue; + } + int ticks = points.getFirst().getTimeActive(); + builder.setAlpha(0.9f * (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1)); + int halfPoints = points.size() / 2; + if(ticks == 0 || ticks == 1) + { + points = points.subList(0, (int) (halfPoints * partialTick) + (ticks == 1 ? halfPoints : 0)); + } + + matrices.pushPose(); + + builder.renderTrail(matrices, points, (i) -> (1 - i) * arcs.widthScale()); + + matrices.popPose(); } - - matrices.pushPose(); - - builder.renderTrail(matrices, points, (i) -> (1 - i) * arcs.widthScale()); - - matrices.popPose(); } } } @@ -118,41 +124,46 @@ private static RenderType getPlasmaRenderType(float u, float v) private static void renderPlasma(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { - if(machine instanceof TeslaPlasmaGenerator generator && generator.shouldRenderTeslaPlasma()) + if(machine instanceof TeslaPlasmaBehaviorHolder holder) { - matrices.pushPose(); - - Vec3 offset = generator.getTeslaPlasmaOffset(); - matrices.translate(offset.x(), offset.y(), offset.z()); - - float tick = Minecraft.getInstance().levelRenderer.getTicks() + partialTick; - float speed = 0.0075f; - float u = (tick * speed) % 1f; - float v = (tick * speed) % 1f; - VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); - - generator.getTeslaPlasmaShape((box, ignoreFaces) -> + TeslaPlasmaBehavior behavior = holder.getTeslaPlasmaBehavior(); + if(behavior.shouldRender()) { - for(Direction direction : Direction.values()) + matrices.pushPose(); + + Vec3 offset = behavior.getOffset(); + matrices.translate(offset.x(), offset.y(), offset.z()); + + float tick = Minecraft.getInstance().levelRenderer.getTicks() + partialTick; + float speed = behavior.getSpeed(); + float u = (tick * speed) % 1f; + float v = (tick * speed) % 1f; + VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); + + behavior.getShape((box, ignoreFaces) -> { - if(!ignoreFaces.contains(direction)) + for(Direction direction : Direction.values()) { - renderPlasmaAddVertexesFace( - matrices, light, overlay, vc, direction, - (float) box.minX, (float) box.minY, (float) box.minZ, - (float) box.maxX, (float) box.maxY, (float) box.maxZ - ); + if(!ignoreFaces.contains(direction)) + { + renderPlasmaAddVertexesFace( + matrices, light, overlay, vc, + behavior.getTextureScale(), direction, + (float) box.minX, (float) box.minY, (float) box.minZ, + (float) box.maxX, (float) box.maxY, (float) box.maxZ + ); + } } - } - }); - - matrices.popPose(); + }); + + matrices.popPose(); + } } } private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, - Direction direction, + float textureScale, Direction direction, float x1, float y1, float z1, float x2, float y2, float z2) { @@ -185,9 +196,8 @@ private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, i default -> throw new IllegalStateException("Unexpected value: " + direction); } - float scale = 32f / 64f; - float offsetU = width / 64f / scale; - float offsetV = height / 32f / scale; + float offsetU = width / 64f / textureScale; + float offsetV = height / 32f / textureScale; switch (direction) { diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehavior.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehavior.java new file mode 100644 index 00000000..9e092fc5 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehavior.java @@ -0,0 +1,8 @@ +package net.swedz.extended_industrialization.client.tesla.generator; + +public interface TeslaArcBehavior +{ + boolean shouldRender(); + + TeslaArcs getArcs(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehaviorHolder.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehaviorHolder.java new file mode 100644 index 00000000..5f31c320 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehaviorHolder.java @@ -0,0 +1,6 @@ +package net.swedz.extended_industrialization.client.tesla.generator; + +public interface TeslaArcBehaviorHolder +{ + TeslaArcBehavior getTeslaArcBehavior(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java deleted file mode 100644 index e6d4f801..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcGenerator.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.swedz.extended_industrialization.client.tesla.generator; - -public interface TeslaArcGenerator -{ - TeslaArcs getTeslaArcs(); - - boolean shouldRenderTeslaArcs(); -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java new file mode 100644 index 00000000..00da1e6f --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java @@ -0,0 +1,16 @@ +package net.swedz.extended_industrialization.client.tesla.generator; + +import net.minecraft.world.phys.Vec3; + +public interface TeslaPlasmaBehavior +{ + boolean shouldRender(); + + Vec3 getOffset(); + + void getShape(TeslaPlasmaShapeAdder shapes); + + float getSpeed(); + + float getTextureScale(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehaviorHolder.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehaviorHolder.java new file mode 100644 index 00000000..2613b75b --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehaviorHolder.java @@ -0,0 +1,6 @@ +package net.swedz.extended_industrialization.client.tesla.generator; + +public interface TeslaPlasmaBehaviorHolder +{ + TeslaPlasmaBehavior getTeslaPlasmaBehavior(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java deleted file mode 100644 index 6df0eea1..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaGenerator.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.swedz.extended_industrialization.client.tesla.generator; - -import net.minecraft.world.phys.Vec3; - -public interface TeslaPlasmaGenerator -{ - boolean shouldRenderTeslaPlasma(); - - Vec3 getTeslaPlasmaOffset(); - - void getTeslaPlasmaShape(TeslaPlasmaShapeAdder shapes); -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java index d511bc5b..05bd4680 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -26,7 +26,8 @@ import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; @@ -36,7 +37,7 @@ import java.util.List; import java.util.Set; -public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaArcGenerator +public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder { private final IsActiveComponent isActive; @@ -112,15 +113,22 @@ protected void setCasingStack(ItemStack stack) } @Override - public TeslaArcs getTeslaArcs() + public TeslaArcBehavior getTeslaArcBehavior() { - return arcs; - } - - @Override - public boolean shouldRenderTeslaArcs() - { - return isActive.isActive; + return new TeslaArcBehavior() + { + @Override + public boolean shouldRender() + { + return isActive.isActive; + } + + @Override + public TeslaArcs getArcs() + { + return arcs; + } + }; } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 44b68a06..6a992513 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -24,9 +24,11 @@ import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.api.WorldPos; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaGenerator; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; @@ -46,7 +48,7 @@ import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; -public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaArcGenerator, TeslaPlasmaGenerator +public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder { private final RedstoneControlComponent redstoneControl; private final TeslaTowerUpgradeComponent upgrade; @@ -158,39 +160,65 @@ public BlockPos getTopLoadPosition() } @Override - public TeslaArcs getTeslaArcs() + public TeslaArcBehavior getTeslaArcBehavior() { - return arcs; - } - - @Override - public boolean shouldRenderTeslaArcs() - { - return isActive.isActive; - } - - @Override - public boolean shouldRenderTeslaPlasma() - { - return this.shouldRenderTeslaArcs(); - } - - @Override - public Vec3 getTeslaPlasmaOffset() - { - return Vec3.atLowerCornerOf(this.getTopLoadPosition()); + return new TeslaArcBehavior() + { + @Override + public boolean shouldRender() + { + return isActive.isActive; + } + + @Override + public TeslaArcs getArcs() + { + return arcs; + } + }; } @Override - public void getTeslaPlasmaShape(TeslaPlasmaShapeAdder shapes) + public TeslaPlasmaBehavior getTeslaPlasmaBehavior() { - double inflate = 0.1; - shapes.add(new AABB(-1, -2 - inflate, -1, 2, -1 - inflate, 2).inflate(inflate, 0, inflate), Set.of(Direction.UP)); - shapes.add(new AABB(-1, 2 + inflate, -1, 2, 3 + inflate, 2).inflate(inflate, 0, inflate), Set.of(Direction.DOWN)); - shapes.add(new AABB(2 + inflate, -1, -1, 3 + inflate, 2, 2).inflate(0, inflate, inflate), Set.of(Direction.WEST)); - shapes.add(new AABB(-2 - inflate, -1, -1, -1 - inflate, 2, 2).inflate(0, inflate, inflate), Set.of(Direction.EAST)); - shapes.add(new AABB(-1, -1, 2 + inflate, 2, 2, 3 + inflate).inflate(inflate, inflate, 0), Set.of(Direction.NORTH)); - shapes.add(new AABB(-1, -1, -2 - inflate, 2, 2, -1 - inflate).inflate(inflate, inflate, 0), Set.of(Direction.SOUTH)); + return new TeslaPlasmaBehavior() + { + @Override + public boolean shouldRender() + { + return isActive.isActive; + } + + @Override + public Vec3 getOffset() + { + return Vec3.atLowerCornerOf(TeslaTowerBlockEntity.this.getTopLoadPosition()); + } + + @Override + public void getShape(TeslaPlasmaShapeAdder shapes) + { + double inflate = 0.1; + shapes.add(new AABB(-1, -2 - inflate, -1, 2, -1 - inflate, 2).inflate(inflate, 0, inflate), Set.of(Direction.UP)); + shapes.add(new AABB(-1, 2 + inflate, -1, 2, 3 + inflate, 2).inflate(inflate, 0, inflate), Set.of(Direction.DOWN)); + shapes.add(new AABB(2 + inflate, -1, -1, 3 + inflate, 2, 2).inflate(0, inflate, inflate), Set.of(Direction.WEST)); + shapes.add(new AABB(-2 - inflate, -1, -1, -1 - inflate, 2, 2).inflate(0, inflate, inflate), Set.of(Direction.EAST)); + shapes.add(new AABB(-1, -1, 2 + inflate, 2, 2, 3 + inflate).inflate(inflate, inflate, 0), Set.of(Direction.NORTH)); + shapes.add(new AABB(-1, -1, -2 - inflate, 2, 2, -1 - inflate).inflate(inflate, inflate, 0), Set.of(Direction.SOUTH)); + } + + @Override + public float getSpeed() + { + return 0.0075f; + } + + @Override + public float getTextureScale() + { + return 32f / 64f; + } + }; } @Override From 6ba6dc34030748bae89ed6e54c24f4396f1e0dc3 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 15 Oct 2024 00:44:14 -0400 Subject: [PATCH 085/159] Make texture scrolling for plasma consistent based on world position --- .../client/tesla/TeslaPartRenderer.java | 82 +++++++++---------- 1 file changed, 38 insertions(+), 44 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 4b28190f..376a8e97 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -167,81 +167,75 @@ private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, i float x1, float y1, float z1, float x2, float y2, float z2) { - float dx = Math.abs(x2 - x1); - float dy = Math.abs(y2 - y1); - float dz = Math.abs(z2 - z1); - float width, height; + float u1, v1, u2, v2; switch (direction) { - case DOWN -> - { - width = dx; - height = dz; - } - case UP -> + case DOWN, UP -> { - width = dz; - height = dx; + u1 = (x1 / 64f) / textureScale; + v1 = (z1 / 32f) / textureScale; + u2 = (x2 / 64f) / textureScale; + v2 = (z2 / 32f) / textureScale; } case NORTH, SOUTH -> { - width = dx; - height = dy; + u1 = (x1 / 64f) / textureScale; + v1 = (y1 / 32f) / textureScale; + u2 = (x2 / 64f) / textureScale; + v2 = (y2 / 32f) / textureScale; } case WEST, EAST -> { - width = dz; - height = dy; + u1 = (z1 / 64f) / textureScale; + v1 = (y1 / 32f) / textureScale; + u2 = (z2 / 64f) / textureScale; + v2 = (y2 / 32f) / textureScale; } default -> throw new IllegalStateException("Unexpected value: " + direction); } - - float offsetU = width / 64f / textureScale; - float offsetV = height / 32f / textureScale; - switch (direction) { case DOWN -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, 0, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, offsetU, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, offsetU, offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, 0, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u1, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u2, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u2, v2); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u1, v2); } case UP -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, 0, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, offsetU, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, offsetU, offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, 0, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u1, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u2, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u2, v2); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u1, v2); } case NORTH -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, 0, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, offsetU, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, offsetU, offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, 0, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u1, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u2, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u2, v2); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u1, v2); } case SOUTH -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, 0, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, offsetU, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, offsetU, offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, 0, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u1, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u2, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u2, v2); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u1, v2); } case WEST -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, 0, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, offsetU, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, offsetU, offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, 0, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u1, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u2, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u2, v2); + renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u1, v2); } case EAST -> { - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, 0, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, offsetU, 0); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, offsetU, offsetV); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, 0, offsetV); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u1, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u2, v1); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u2, v2); + renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u1, v2); } } } From 4ec23799aca327b3f700759d07396c20140cd5fb Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 15 Oct 2024 00:48:29 -0400 Subject: [PATCH 086/159] Add plasma on the head of the tesla coil --- .../TeslaCoilMachineBlockEntity.java | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java index 05bd4680..e7a95b68 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -23,12 +23,16 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; @@ -37,7 +41,7 @@ import java.util.List; import java.util.Set; -public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder +public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder { private final IsActiveComponent isActive; @@ -131,6 +135,47 @@ public TeslaArcs getArcs() }; } + @Override + public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + { + return new TeslaPlasmaBehavior() + { + @Override + public boolean shouldRender() + { + return isActive.isActive; + } + + @Override + public Vec3 getOffset() + { + return Vec3.ZERO; + } + + @Override + public void getShape(TeslaPlasmaShapeAdder shapes) + { + double inflate = 0.02; + shapes.add(new AABB(0, 11f / 16f - inflate, 0, 1, 1 + inflate, 5f / 16f).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.SOUTH)); + shapes.add(new AABB(0, 11f / 16f - inflate, 11f / 16f, 1, 1 + inflate, 1).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.NORTH)); + shapes.add(new AABB(0, 11f / 16f - inflate, 5f / 16f + inflate + inflate, 5f / 16f, 1 + inflate, 11f / 16f - inflate - inflate).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.EAST, Direction.SOUTH, Direction.NORTH)); + shapes.add(new AABB(11f / 16f, 11f / 16f - inflate, 5f / 16f + inflate + inflate, 1, 1 + inflate, 11f / 16f - inflate - inflate).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.WEST, Direction.SOUTH, Direction.NORTH)); + } + + @Override + public float getSpeed() + { + return 0.0075f; + } + + @Override + public float getTextureScale() + { + return 8f / 64f; + } + }; + } + @Override public MIInventory getInventory() { From 21eb396f4c35a0b2ebdb233e6a5c1b62d72425b2 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 15 Oct 2024 04:42:22 -0400 Subject: [PATCH 087/159] Simplify box rendering code --- .../api/BoxRenderHelper.java | 394 ++++++++++++++++++ .../client/tesla/TeslaPartRenderer.java | 124 +----- 2 files changed, 407 insertions(+), 111 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/api/BoxRenderHelper.java diff --git a/src/main/java/net/swedz/extended_industrialization/api/BoxRenderHelper.java b/src/main/java/net/swedz/extended_industrialization/api/BoxRenderHelper.java new file mode 100644 index 00000000..bd41d002 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/api/BoxRenderHelper.java @@ -0,0 +1,394 @@ +package net.swedz.extended_industrialization.api; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.AABB; + +import java.util.function.Predicate; + +public final class BoxRenderHelper +{ + public static void renderFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x1, float y1, float z1, + float x2, float y2, float z2, + Direction direction, + float textureWidth, float textureHeight, float textureScale, + float red, float green, float blue, float alpha) + { + float u1, v1, u2, v2; + switch (direction) + { + case DOWN, UP -> + { + u1 = (x1 / textureWidth) / textureScale; + v1 = (z1 / textureHeight) / textureScale; + u2 = (x2 / textureWidth) / textureScale; + v2 = (z2 / textureHeight) / textureScale; + } + case NORTH, SOUTH -> + { + u1 = (x1 / textureWidth) / textureScale; + v1 = (y1 / textureHeight) / textureScale; + u2 = (x2 / textureWidth) / textureScale; + v2 = (y2 / textureHeight) / textureScale; + } + case WEST, EAST -> + { + u1 = (z1 / textureWidth) / textureScale; + v1 = (y1 / textureHeight) / textureScale; + u2 = (z2 / textureWidth) / textureScale; + v2 = (y2 / textureHeight) / textureScale; + } + default -> throw new IllegalStateException("Unexpected value: " + direction); + } + switch (direction) + { + case DOWN -> + { + addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha, u1, v1); + addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha, u2, v1); + addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha, u2, v2); + addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha, u1, v2); + } + case UP -> + { + addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha, u1, v1); + addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha, u2, v1); + addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha, u2, v2); + addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha, u1, v2); + } + case NORTH -> + { + addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha, u1, v1); + addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha, u2, v1); + addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha, u2, v2); + addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha, u1, v2); + } + case SOUTH -> + { + addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha, u1, v1); + addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha, u2, v1); + addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha, u2, v2); + addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha, u1, v2); + } + case WEST -> + { + addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha, u1, v1); + addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha, u2, v1); + addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha, u2, v2); + addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha, u1, v2); + } + case EAST -> + { + addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha, u1, v1); + addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha, u2, v1); + addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha, u2, v2); + addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha, u1, v2); + } + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x1, float y1, float z1, + float x2, float y2, float z2, + Iterable directions, + float textureWidth, float textureHeight, float textureScale, + float red, float green, float blue, float alpha) + { + for(Direction direction : directions) + { + renderFace( + matrices, light, overlay, vc, + x1, y1, z1, x2, y2, z2, + direction, + textureWidth, textureHeight, textureScale, + red, green, blue, alpha + ); + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x1, float y1, float z1, + float x2, float y2, float z2, + Predicate directionFilter, + float textureWidth, float textureHeight, float textureScale, + float red, float green, float blue, float alpha) + { + for(Direction direction : Direction.values()) + { + if(directionFilter.test(direction)) + { + renderFace( + matrices, light, overlay, vc, + x1, y1, z1, x2, y2, z2, + direction, + textureWidth, textureHeight, textureScale, + red, green, blue, alpha + ); + } + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x1, float y1, float z1, + float x2, float y2, float z2, + float textureWidth, float textureHeight, float textureScale, + float red, float green, float blue, float alpha) + { + renderBox( + matrices, light, overlay, vc, + x1, y1, z1, x2, y2, z2, + (__) -> true, + textureWidth, textureHeight, textureScale, + red, green, blue, alpha + ); + } + + public static void renderFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, + AABB box, Direction direction, + float textureWidth, float textureHeight, float textureScale, + float red, float green, float blue, float alpha) + { + renderFace( + matrices, light, overlay, vc, + (float) box.minX, (float) box.minY, (float) box.minZ, + (float) box.maxX, (float) box.maxY, (float) box.maxZ, + direction, + textureWidth, textureHeight, textureScale, + red, green, blue, alpha + ); + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + AABB box, Iterable directions, + float textureWidth, float textureHeight, float textureScale, + float red, float green, float blue, float alpha) + { + for(Direction direction : directions) + { + renderFace( + matrices, light, overlay, vc, + box, direction, + textureWidth, textureHeight, textureScale, + red, green, blue, alpha + ); + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + AABB box, Predicate directionFilter, + float textureWidth, float textureHeight, float textureScale, + float red, float green, float blue, float alpha) + { + for(Direction direction : Direction.values()) + { + if(directionFilter.test(direction)) + { + renderFace( + matrices, light, overlay, vc, + box, direction, + textureWidth, textureHeight, textureScale, + red, green, blue, alpha + ); + } + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + AABB box, + float textureWidth, float textureHeight, float textureScale, + float red, float green, float blue, float alpha) + { + renderBox( + matrices, light, overlay, vc, + box, (__) -> true, + textureWidth, textureHeight, textureScale, + red, green, blue, alpha + ); + } + + private static void addVertex(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x, float y, float z, + float red, float green, float blue, float alpha, + float u, float v) + { + PoseStack.Pose pose = matrices.last(); + vc.addVertex(pose, x, y, z) + .setColor(red, green, blue, alpha) + .setLight(light) + .setNormal(pose, 0, 0, 0) + .setOverlay(overlay) + .setUv(u, v); + } + + public static void renderFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x1, float y1, float z1, + float x2, float y2, float z2, + Direction direction, + float red, float green, float blue, float alpha) + { + switch (direction) + { + case DOWN -> + { + addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha); + } + case UP -> + { + addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha); + } + case NORTH -> + { + addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha); + } + case SOUTH -> + { + addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha); + } + case WEST -> + { + addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha); + } + case EAST -> + { + addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha); + addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha); + } + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x1, float y1, float z1, + float x2, float y2, float z2, + Iterable directions, + float red, float green, float blue, float alpha) + { + for(Direction direction : directions) + { + renderFace( + matrices, light, overlay, vc, + x1, y1, z1, x2, y2, z2, + direction, + red, green, blue, alpha + ); + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x1, float y1, float z1, + float x2, float y2, float z2, + Predicate directionFilter, + float red, float green, float blue, float alpha) + { + for(Direction direction : Direction.values()) + { + if(directionFilter.test(direction)) + { + renderFace( + matrices, light, overlay, vc, + x1, y1, z1, x2, y2, z2, + direction, + red, green, blue, alpha + ); + } + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x1, float y1, float z1, + float x2, float y2, float z2, + float red, float green, float blue, float alpha) + { + renderBox( + matrices, light, overlay, vc, + x1, y1, z1, x2, y2, z2, + (__) -> true, + red, green, blue, alpha + ); + } + + public static void renderFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, + AABB box, Direction direction, + float red, float green, float blue, float alpha) + { + renderFace( + matrices, light, overlay, vc, + (float) box.minX, (float) box.minY, (float) box.minZ, + (float) box.maxX, (float) box.maxY, (float) box.maxZ, + direction, + red, green, blue, alpha + ); + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + AABB box, Iterable directions, + float red, float green, float blue, float alpha) + { + for(Direction direction : directions) + { + renderFace( + matrices, light, overlay, vc, + box, direction, + red, green, blue, alpha + ); + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + AABB box, Predicate directionFilter, + float red, float green, float blue, float alpha) + { + for(Direction direction : Direction.values()) + { + if(directionFilter.test(direction)) + { + renderFace( + matrices, light, overlay, vc, + box, direction, + red, green, blue, alpha + ); + } + } + } + + public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, + AABB box, + float red, float green, float blue, float alpha) + { + renderBox( + matrices, light, overlay, vc, + box, (__) -> true, + red, green, blue, alpha + ); + } + + private static void addVertex(PoseStack matrices, int light, int overlay, VertexConsumer vc, + float x, float y, float z, + float red, float green, float blue, float alpha) + { + PoseStack.Pose pose = matrices.last(); + vc.addVertex(pose, x, y, z) + .setColor(red, green, blue, alpha) + .setLight(light) + .setNormal(pose, 0, 0, 0) + .setOverlay(overlay); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 376a8e97..e8655eb7 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -11,12 +11,12 @@ import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderType; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIComponents; +import net.swedz.extended_industrialization.api.BoxRenderHelper; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; @@ -107,9 +107,12 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po private static RenderType getPlasmaRenderType(float u, float v) { return RenderType.create( - "plasma", DefaultVertexFormat.NEW_ENTITY, - VertexFormat.Mode.QUADS, 1536, - false, true, + "plasma", + DefaultVertexFormat.NEW_ENTITY, + VertexFormat.Mode.QUADS, + 1536, + false, + true, RenderType.CompositeState.builder() .setShaderState(RENDERTYPE_ENERGY_SWIRL_SHADER) .setTextureState(new RenderStateShard.TextureStateShard(EI.id("textures/vfx/plasma_overlay.png"), false, false)) @@ -141,119 +144,18 @@ private static void renderPlasma(MachineBlockEntity machine, float partialTick, VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); behavior.getShape((box, ignoreFaces) -> - { - for(Direction direction : Direction.values()) - { - if(!ignoreFaces.contains(direction)) - { - renderPlasmaAddVertexesFace( - matrices, light, overlay, vc, - behavior.getTextureScale(), direction, - (float) box.minX, (float) box.minY, (float) box.minZ, - (float) box.maxX, (float) box.maxY, (float) box.maxZ - ); - } - } - }); + BoxRenderHelper.renderBox( + matrices, light, overlay, vc, + box, (d) -> !ignoreFaces.contains(d), + 64f, 32f, behavior.getTextureScale(), + 1f, 1f, 1f, 0.8f + )); matrices.popPose(); } } } - private static void renderPlasmaAddVertexesFace(PoseStack matrices, int light, int overlay, - VertexConsumer vc, - float textureScale, Direction direction, - float x1, float y1, float z1, - float x2, float y2, float z2) - { - float u1, v1, u2, v2; - switch (direction) - { - case DOWN, UP -> - { - u1 = (x1 / 64f) / textureScale; - v1 = (z1 / 32f) / textureScale; - u2 = (x2 / 64f) / textureScale; - v2 = (z2 / 32f) / textureScale; - } - case NORTH, SOUTH -> - { - u1 = (x1 / 64f) / textureScale; - v1 = (y1 / 32f) / textureScale; - u2 = (x2 / 64f) / textureScale; - v2 = (y2 / 32f) / textureScale; - } - case WEST, EAST -> - { - u1 = (z1 / 64f) / textureScale; - v1 = (y1 / 32f) / textureScale; - u2 = (z2 / 64f) / textureScale; - v2 = (y2 / 32f) / textureScale; - } - default -> throw new IllegalStateException("Unexpected value: " + direction); - } - switch (direction) - { - case DOWN -> - { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u1, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u2, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u2, v2); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u1, v2); - } - case UP -> - { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u1, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u2, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u2, v2); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u1, v2); - } - case NORTH -> - { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u1, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u2, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u2, v2); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u1, v2); - } - case SOUTH -> - { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u1, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u2, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u2, v2); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u1, v2); - } - case WEST -> - { - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z1, u1, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y1, z2, u2, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z2, u2, v2); - renderPlasmaAddVertex(matrices, light, overlay, vc, x1, y2, z1, u1, v2); - } - case EAST -> - { - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z1, u1, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y1, z2, u2, v1); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z2, u2, v2); - renderPlasmaAddVertex(matrices, light, overlay, vc, x2, y2, z1, u1, v2); - } - } - } - - private static void renderPlasmaAddVertex(PoseStack matrices, int light, int overlay, - VertexConsumer vc, - float x, float y, float z, - float u, float v) - { - PoseStack.Pose pose = matrices.last(); - vc.addVertex(pose, x, y, z) - .setColor(1f, 1f, 1f, 0.8f) - .setLight(light) - .setNormal(pose, 0, 0, 0) - .setOverlay(overlay) - .setUv(u, v); - } - static void render(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { renderHighlight(machine, partialTick, matrices, buffer, light, overlay); From 9943d19d0312f6db3b2564c47b2d382a6fbeb696 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 15 Oct 2024 16:48:54 -0400 Subject: [PATCH 088/159] Add texture for the tesla interdimensional upgrade --- .../item/tesla_interdimensional_upgrade.png | Bin 2805 -> 891 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/extended_industrialization/textures/item/tesla_interdimensional_upgrade.png b/src/main/resources/assets/extended_industrialization/textures/item/tesla_interdimensional_upgrade.png index 4b9cc17cae7d1fd537cd38e55aebe9823885ec1b..81e7bd23b1a5527cb2ee1e4af2534ec3072e037a 100644 GIT binary patch delta 869 zcmV-r1DgEx75fH|BYy#cX+uL$Nkc;*P;zf(X>4Tx04UFukvT{MK^TQU6E8%uFoj5p zE!0XuRK!xE7z6_nBX||=ZVrX)8g?T#mV#}-!lUsjY^=4luoVQs1H{tGO3_AS{bv(M z5F$7*%*UH~kC`_RILw-sTiXYgop<8Vh&DSnuQj|-Pc1D334iORn~P14C#X6;@2FAh zZLiAWf1@Rta!shwgh$MrlNVkR9$L@m6z>X$%w;_(d?wuE$OVNTlx`IHRdL4WfXWOx ziTJ2+NLb5Muu;M0vSSGk3U?+gTk-?5MNTT-P;6z_%+fv83!78+%(T*FhKVvkj43n> z)>t7+o?cmPQGZzMR z*oN!6V@`K;Ukb_$q|@+r zD&I5*Z8y-gQ0%R=&&fR`q^rqm*xQHhjASoXd3R%FZ-0ND@%tn40~Q`~g4T)^&;S4c z32;bRa{vGf6951U69E94oEQKA0iQ`kK~y+TW1ti;LTRiZCN%3ml*zDU^)$HJN$dEfPA?&Te=fJdx=|2YZ3KK9J1XRR1!E{!9A;bV9Q+tN1XSEoj ziuu42$cDfGOcMxf*m(v_?^?DL5{)oJwk~!=aS1YjX?k<}377`O$lJGX5a|HjB~PD1 z6kdV=OcMwkJ-8iAgTesC01!ZSNqp07xJH;J5cu}}8aB^>EX>4U6ba`-PAZ2)IW&i+q+ND=plH@21 z{O1&V1P}tjad<}T4fgn(fb4p7&2&#pIm%$bl2A%1Y{q~8PV*0b&s9t zTmP--{n=bg2{zI2&f9(GW2Ikz@&#?&cc{T^+I_*DeA@oC29Uu7NY3ipVQ+7~_~u6C z^UwTbTN(~8aDU%D4FmIK;w=o~&~g8UUcB2qZr&$c_zd^P^vNROTQR*@)avro(=R># zbM`dnIJ+wxvE`_nx_08s>S1ABL9kzoxCH-zzU(XGN=TOmsJm^p;%Y8C0>sm?>#n$I z+}NGw8f;`5Bxs2m`8}3^MW*H#=)5jBNqqJlAwa$%RDV21X-=cIxUDyDea$6k?hZ@I zL73aI^vz{{vgmi$oGX`{GnzB*08A_FVa7sk-LVXaxT#JJ+riiM8juRC2ZUj}Ibnmv z)+3?@_lPaOf%aGz(4HJ~($D)#5JPu>G0p=58=Vg>Ix9rt92}VdP;oX960HIO7Xoz{ zN$h<++It8&Nx^SNCc#*0GsR!z+w)FAK`=;D!~U1A;cgdg&a!skqt5| zMv04Vi-3D2NEDGISxWMWQ%EsMN-3w3DSNPS$VkVWa?YhdXMyArO~LwtkxJE9uA#;% zHPu{8L-;gqp~WUGwcJXl?mP0h$1Xkf+{ASIYo^𝔔us9{v(v}VT(ge=T}7_kH5vJgN()56Rq$4m>kg_+HStOx`n z!@{OJTU;bIo`<6_-HqJ?xj(|qME)&q^i$-_g6=Po+qjt#o^bnsT3=`jNQF{aRkWC^^U}`R$J@|7mFVMY^X;-9w&s%+)6?o8MJe&_C6vwXI5=(=DDQO> zSdN}r-75?nIx3j+2$?zi33he*y1UhII<>E^w^})%d*>nUWhDX*dt8XT~PqT{9&gsW|m=xVDqKZhxWp z5iY}x4-d$J+ZBhCPbihf(%d|Lc-RQrqS}U&9N)P%ahB5v07*PAKf^eTc<|TR3A^Ee z@HniOV1GF7yj!lO#QrcGM7cd@!CY<_jfT#*W8l5*@{!x@ z>-nU2ZQ_S-GpU;gvT!2(k9pNh)P#g#nlb5^(C5vRc65v@ZktP&c@ay z&sO!(xSQ_ z3!yfi*TO`R7;~K=MQx~v51W3G{$J=|#&!gag-nrV_(ZL&ec;p+l~($YVkIedqr(K2 zRMZMW&PsW>D0DVE+HA-@oJDX>yM%Lo;)|#o9o+B$cNX1Bfrn_AaG0aw`1O@EH?9pg0hiw9jx6*Z|#Z(PeS=!+@rt=umFC zA1=tQA=s&Eob=oxJzTE5JBGn#ABqvYXMKX};}b23G7yV9D^R#6sT5l2d}Tjhxs~>j zLNki9QYTJI!)mIOmOoT4b7o7zSwqWfZKyuT8K;iLS)=i08XR~L z?-Tvp!OtgQ@x_ATe1w8b7M5mZ-(u4vOG2hUC`BjU@HOSGk_|>Ux+>j;cNHakM}2b` z0XgqC4HA^vWPee;k5{1&XAB>G!(TPMztr@86#%%=L|YG2pv)@BE4{UDIEsp!#VN9N zElFg5ei|tX_WGFIdVf*b=3UvY>}3!RhzzEfh0r3Heoh-gO8j3^Xc6PVaX;SOd)&PPgl3JYW?&ppHOt5(6JoxwA_ia4ivYs#BPuad zPh}T!@El+F@bUF7&a=GF{W-!)(PV&6B%WouVG*wrPj6Z}=Y8S`t4Ip*Iq{f57bJe< zy6o~B=d!~B&wq>|AB1V+o0z2@=mzV6=sJ=5;* z2NoW3f*-$s)Bpeg24YJ`L;&{y_W<{h1vS`{uK^c-00(qQO+^Rh1_TfX97~N^FaQ7m z8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0vt(1K~y-)t&=-UR8bIy zzuCLGcjYcFj|4GBAw(ovSZPB;d?ffNNT}?zf%r%)C@iRqr9E`G8xxEoAs9r(Rf9Cf z(!_#)28FIscg>)P?K1;W{3V*W~{0t3&F=^K+A` zsw5Ig_TRNAeKJ@Xj}Qa_sxWZ2PpU!DYVq{+eLdelfJh$4DG>A?5PIRz;es|=4QxdX z9z9)9*L7XK$$Q{Z#%DYp$n%E4jQ*J$tF6qoZx%LHgdf+Sy;~)rnQd zw4kc>kk58b(~qAhKm?$v$pSVp%~kIn_`qUi8NS*fS9?5 zTyDLlT{Cuh+h*aI)OgKC)+Q0H%DwBH)wN6+px@8v5l}!86xmf?gC2cf?qV&o&WG-Q z*Oe>m?(wVMGQ)Cc0-(k4Xz;{NV Date: Tue, 15 Oct 2024 16:51:17 -0400 Subject: [PATCH 089/159] Add tooltips for tesla coil and interdimensional upgrade and refer to "transmitter" instead of "tower" in other tooltips --- .../extended_industrialization/lang/en_us.json | 15 +++++++++------ .../swedz/extended_industrialization/EIText.java | 15 +++++++++------ .../extended_industrialization/EITooltips.java | 13 +++++++++++++ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 1ac2a302..9a9d31ab 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -210,29 +210,32 @@ "text.extended_industrialization.steam_chainsaw_2": "- Place fuel inside the chainsaw using %s.", "text.extended_industrialization.steam_chainsaw_3": "- Toggle Silk Touch with %s + %s.", "text.extended_industrialization.tesla_calibrator_clear": "Cleared selection from tesla calibrator.", - "text.extended_industrialization.tesla_calibrator_help_1": "- Press %s + %s on a Tesla Tower to save its position in the calibrator.", - "text.extended_industrialization.tesla_calibrator_help_2": "- Use %s on a Tesla Receiver to link it to the selected tower.", + "text.extended_industrialization.tesla_calibrator_help_1": "- Press %s + %s on a transmitter to save its position in the calibrator.", + "text.extended_industrialization.tesla_calibrator_help_2": "- Use %s on a Tesla Receiver to link it to the selected transmitter.", "text.extended_industrialization.tesla_calibrator_help_3": "- (Optional) Hold in off-hand when placing receivers to automatically link.", "text.extended_industrialization.tesla_calibrator_help_4": "- Clear using %s + %s on air.", "text.extended_industrialization.tesla_calibrator_link_failed_no_selection": "Failed to link receiver because no transmitter is selected.", "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected transmitter.", "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", "text.extended_industrialization.tesla_calibrator_selected": "Selected transmitter for calibration.", + "text.extended_industrialization.tesla_coil_help_1": "Wirelessly transmits energy to linked receivers within range.", + "text.extended_industrialization.tesla_coil_help_2": "Voltage of energy transmitted is set by the hull provided.", "text.extended_industrialization.tesla_handheld_clear": "Cleared selected transmitter.", "text.extended_industrialization.tesla_handheld_help_1": "Receives energy from a linked transmitter within range and charges items while in your inventory.", "text.extended_industrialization.tesla_handheld_help_2": "Tesla Calibration:", - "text.extended_industrialization.tesla_handheld_help_3": "- Press %s on a Tesla Tower to link the receiver to it.", + "text.extended_industrialization.tesla_handheld_help_3": "- Press %s on a transmitter to link the receiver to it.", "text.extended_industrialization.tesla_handheld_help_4": "- Clear using %s + %s on air.", "text.extended_industrialization.tesla_handheld_linked": "Linked to %s", "text.extended_industrialization.tesla_handheld_selected": "Selected transmitter for receiving.", - "text.extended_industrialization.tesla_receiver_help_1": "Can receive energy from a linked Tesla Tower.", - "text.extended_industrialization.tesla_receiver_help_2": "Must accept energy of the same voltage as the linked tower.", + "text.extended_industrialization.tesla_interdimensional_upgrade_help": "Removes the range limitation on a Tesla Tower and allows it to transmit energy across dimensions.", + "text.extended_industrialization.tesla_receiver_help_1": "Can receive energy from a linked transmitter.", + "text.extended_industrialization.tesla_receiver_help_2": "Must accept energy of the same voltage as the linked transmitter.", "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Cannot receive %s power", "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_receiver_too_far": "Transmitter is too far", "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", - "text.extended_industrialization.tesla_tower_help_1": "Wirelessly transmits energy to receivers within range.", + "text.extended_industrialization.tesla_tower_help_1": "Wirelessly transmits energy to linked receivers within range.", "text.extended_industrialization.tesla_tower_help_2": "Energy transfer rate and range is determined by the windings used.", "text.extended_industrialization.tesla_tower_help_3": "Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier.", "text.extended_industrialization.tesla_tower_upgrade": "Add tesla upgrades to increase maximum range.", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index e20a6b74..167f0cbd 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -103,29 +103,32 @@ public enum EIText implements MICompatibleTranslatableTextEnum STEAM_CHAINSAW_2("- Place fuel inside the chainsaw using %s."), STEAM_CHAINSAW_3("- Toggle Silk Touch with %s + %s."), TESLA_CALIBRATOR_CLEAR("Cleared selection from tesla calibrator."), - TESLA_CALIBRATOR_HELP_1("- Press %s + %s on a Tesla Tower to save its position in the calibrator."), - TESLA_CALIBRATOR_HELP_2("- Use %s on a Tesla Receiver to link it to the selected tower."), + TESLA_CALIBRATOR_HELP_1("- Press %s + %s on a transmitter to save its position in the calibrator."), + TESLA_CALIBRATOR_HELP_2("- Use %s on a Tesla Receiver to link it to the selected transmitter."), TESLA_CALIBRATOR_HELP_3("- (Optional) Hold in off-hand when placing receivers to automatically link."), TESLA_CALIBRATOR_HELP_4("- Clear using %s + %s on air."), TESLA_CALIBRATOR_LINKED("Linked to %s"), TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION("Failed to link receiver because no transmitter is selected."), TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), TESLA_CALIBRATOR_SELECTED("Selected transmitter for calibration."), + TESLA_COIL_HELP_1("Wirelessly transmits energy to linked receivers within range."), + TESLA_COIL_HELP_2("Voltage of energy transmitted is set by the hull provided."), TESLA_HANDHELD_CLEAR("Cleared selected transmitter."), TESLA_HANDHELD_HELP_1("Receives energy from a linked transmitter within range and charges items while in your inventory."), TESLA_HANDHELD_HELP_2("Tesla Calibration:"), - TESLA_HANDHELD_HELP_3("- Press %s on a Tesla Tower to link the receiver to it."), + TESLA_HANDHELD_HELP_3("- Press %s on a transmitter to link the receiver to it."), TESLA_HANDHELD_HELP_4("- Clear using %s + %s on air."), TESLA_HANDHELD_LINKED("Linked to %s"), TESLA_HANDHELD_SELECTED("Selected transmitter for receiving."), - TESLA_RECEIVER_HELP_1("Can receive energy from a linked Tesla Tower."), - TESLA_RECEIVER_HELP_2("Must accept energy of the same voltage as the linked tower."), + TESLA_INTERDIMENSIONAL_UPGRADE_HELP("Removes the range limitation on a Tesla Tower and allows it to transmit energy across dimensions."), + TESLA_RECEIVER_HELP_1("Can receive energy from a linked transmitter."), + TESLA_RECEIVER_HELP_2("Must accept energy of the same voltage as the linked transmitter."), TESLA_RECEIVER_LINKED("Linked to %s"), TESLA_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), TESLA_RECEIVER_TOO_FAR("Transmitter is too far"), TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), - TESLA_TOWER_HELP_1("Wirelessly transmits energy to receivers within range."), + TESLA_TOWER_HELP_1("Wirelessly transmits energy to linked receivers within range."), TESLA_TOWER_HELP_2("Energy transfer rate and range is determined by the windings used."), TESLA_TOWER_HELP_3("Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier."), TESLA_TOWER_UPGRADE("Add tesla upgrades to increase maximum range."), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index a232fdf7..54478f70 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -228,6 +228,19 @@ public final class EITooltips ) ); + public static final TooltipAttachment TESLA_COIL = TooltipAttachment.multilines( + List.of(EI.id("tesla_coil")), + List.of( + line(EIText.TESLA_COIL_HELP_1), + line(EIText.TESLA_COIL_HELP_2) + ) + ); + + public static final TooltipAttachment TESLA_INTERDIMENSIONAL_UPGRADE = TooltipAttachment.singleLine( + List.of(EI.id("tesla_interdimensional_upgrade")), + line(EIText.TESLA_INTERDIMENSIONAL_UPGRADE_HELP) + ); + public static final TooltipAttachment TESLA_RECEIVER = TooltipAttachment.multilines( List.of(EI.id("tesla_receiver")), List.of( From 78bcd34bceffca28d25b0767b248b752e38f9927 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 15 Oct 2024 17:11:05 -0400 Subject: [PATCH 090/159] Remove mi namespace from machine model --- .../extended_industrialization/models/block/tesla_coil.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json b/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json index e249f026..cbae990d 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/tesla_coil.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/tesla_coil/overlay_front", From 6218aa5ec97d38cb7bd6a0ee3b6c264b3c9502f3 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 16 Oct 2024 01:02:34 -0400 Subject: [PATCH 091/159] Update textures for tesla receiver and coil --- .../models/block/tesla_receiver.json | 2 + .../EIMachines.java | 2 +- .../TeslaReceiverMachineBlockEntity.java | 51 +++++++++++++++++- .../machines/tesla_coil/overlay_side.png | Bin 226 -> 319 bytes .../tesla_coil/overlay_side_active.png | Bin 226 -> 486 bytes .../tesla_coil/overlay_side_active.png.mcmeta | 5 ++ .../machines/tesla_receiver/overlay_front.png | Bin 0 -> 395 bytes .../tesla_receiver/overlay_front_active.png | Bin 0 -> 393 bytes .../machines/tesla_receiver/overlay_side.png | Bin 380 -> 319 bytes .../tesla_receiver/overlay_side_active.png | Bin 380 -> 489 bytes .../overlay_side_active.png.mcmeta | 5 ++ .../machines/tesla_receiver/overlay_top.png | Bin 447 -> 312 bytes .../tesla_receiver/overlay_top_active.png | Bin 366 -> 312 bytes 13 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side_active.png.mcmeta create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_front.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_front_active.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side_active.png.mcmeta diff --git a/src/generated/resources/assets/extended_industrialization/models/block/tesla_receiver.json b/src/generated/resources/assets/extended_industrialization/models/block/tesla_receiver.json index eb485bd9..addd91ba 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/tesla_receiver.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/tesla_receiver.json @@ -2,6 +2,8 @@ "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/tesla_receiver/overlay_front", + "front_active": "extended_industrialization:block/machines/tesla_receiver/overlay_front_active", "item_auto": "modern_industrialization:block/overlays/item_auto", "output": "modern_industrialization:block/overlays/output", "side": "extended_industrialization:block/machines/tesla_receiver/overlay_side", diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index 38f5a76b..2c75ef8b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -418,7 +418,7 @@ public static void singleBlockSpecial(SingleBlockSpecialMachinesMIHookContext ho hook.register( "Tesla Receiver", "tesla_receiver", "tesla_receiver", - CableTier.LV.casing, false, true, true, true, + CableTier.LV.casing, true, true, true, true, TeslaReceiverMachineBlockEntity::new, TeslaReceiverMachineBlockEntity::registerEnergyApi ); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 10f9d100..77ee0b9a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -13,21 +13,29 @@ import aztech.modern_industrialization.machines.guicomponents.SlotPanel; import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.util.Tickable; +import net.minecraft.core.Direction; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; +import java.util.Set; + import static net.swedz.extended_industrialization.EITooltips.*; import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; -public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable +public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable, TeslaPlasmaBehaviorHolder { private final IsActiveComponent isActive; @@ -104,6 +112,47 @@ else if(result == ReceiveCheckResult.TOO_FAR) .withCasing(casing)); } + @Override + public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + { + return new TeslaPlasmaBehavior() + { + @Override + public boolean shouldRender() + { + return isActive.isActive; + } + + @Override + public Vec3 getOffset() + { + return Vec3.ZERO; + } + + @Override + public void getShape(TeslaPlasmaShapeAdder shapes) + { + double inflate = 0.02; + shapes.add(new AABB(0, 11f / 16f - inflate, 0, 1, 1 + inflate, 5f / 16f).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.SOUTH)); + shapes.add(new AABB(0, 11f / 16f - inflate, 11f / 16f, 1, 1 + inflate, 1).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.NORTH)); + shapes.add(new AABB(0, 11f / 16f - inflate, 5f / 16f + inflate + inflate, 5f / 16f, 1 + inflate, 11f / 16f - inflate - inflate).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.EAST, Direction.SOUTH, Direction.NORTH)); + shapes.add(new AABB(11f / 16f, 11f / 16f - inflate, 5f / 16f + inflate + inflate, 1, 1 + inflate, 11f / 16f - inflate - inflate).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.WEST, Direction.SOUTH, Direction.NORTH)); + } + + @Override + public float getSpeed() + { + return 0.0075f; + } + + @Override + public float getTextureScale() + { + return 8f / 64f; + } + }; + } + @Override public MIInventory getInventory() { diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side.png index 8028fb46f57a4a1e2a4c5452d16919614d84c867..241f6c837bb1a2c3cfdcd404c77551dfd7f19fbb 100644 GIT binary patch delta 156 zcmV;N0Av5+0lxx}Ne;gN01m$aI0aKA0002gkymDafE(c9;Q?m6dGm(h%$YNcU_ms1 zO$`%>fB{oWTPO=RKv#oez_X`Mpe)<~T@Bm-kh7$uWuQFl0Gk>N7d(6Q3d+L{(AA(A zK*$9kK+pw*0M0M~0diabPX|(Ra_|)O?9n5v=>VG=3R5Bj0{~oQX#;yN0nq>e002ov KPDHK)LSTYd={act delta 62 zcmdnb^oVhSC*J`E2EGG~S=Tx_85kJKCx)k~CNy12X%1v|<7Hsv;!Q|kVAzzzOa44$rjF6*2UngDF|6T<)i diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_coil/overlay_side_active.png index 8028fb46f57a4a1e2a4c5452d16919614d84c867..27db94e11426726acc75c159f93f080647c4124a 100644 GIT binary patch delta 437 zcmV;m0ZRVj0p^BK57_j@Ab{aGA|EvjC`yX?wbl=uxb@%4KS`yUK=`pi_$vy`$o6~X_}g#D2gP@ zGG#6jIL!upSoROb7=@u4FG2qNgi#o(aS5QT;m$6OctCS~d4Z!Pl?w9N3`ac2C#Rmq zOCVJMP)&Dh0MPky&7>-76N9EIhDZ39iP5Ye~{or5v!Q^g&(ULFs0(4^;m!PR1 zh}|gp0oAnbMlS)KA4jbpNNWH@KZt(7@$-K0z0U_yH;R5h&wh?tKUk$3yITVw`azZG z2hHf#59ry?QR@e-&PJ}+DWV_HUg!7&en5RQ`a$#qpj$s!|MS7`@B{H542j?%I}^~P f0;*ZJA0){KPEHUfMRPHP00000NkvXXu0mjfRW!tF delta 175 zcmV;g08szt1L6UY7YYyv1^@s6AM^iVks&C5zyJUazyWI3i3tDz0C!15K~y+TV+@Y0 z|NrCrcLosP;N%3;xByHY41m-#PF#NBKM%hER0tJ(`S=0KLI7m7AbG~Q+aCM}aU_*_ zz=Fu&`Q0y27Ak$v~`002ovPDHLkV1l5kMVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0U$|4K~y+Tosqwa z!axwlcdQfyErOt+&Amb%ATN;0%G$!m@Cj1f16+M?aHI@eVPOKkfFKA8l0reyZZ9+J zw{HHy;Sa*h?9O~MJE8evt)GvFV!FMa*fx*{IG;Yhce+0qnxiuJ+tqk4++4n=ub+eF zVEoaSLznaZZoD$c<$IZcgLkKp9T>lcyPN9!0cqV@|1Ye7@B8AUX-aZXFqzHtWHb`r z^E|O2j$_HQ0!ThxE)s*~a%H?1+s$vg045+JHJ(o85>vR?ytWC>$D@5p6R4{RWLZYs znFZKZyJHu4LPw$oFn$<@DvBa&i$b{vjRM>qPY8lQB}rm!u^h<(H39C7k7Ku(EtBWD pSf;cCw(jyEQl<2_An+ba{Q)TAnNQkUp~CPx#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0Uk+2K~y+Tosm0= z0znXlyNnbB4F*9$lfA+mU@kC`k+Fft@B|a=0XE(nEE5iFVBidR0YMNHWC8_2v)-wq z|F-7^i=RkUbyxrO7@9BE`uTV$rrYa@Z3B6L^Xc<@r~8AUIVy9%U5)p`&EvsfaKHVA~9GlSH^p>-Tbx-paUXOsxHA46yN}s2d7g`9 nN;_cdE)ODAN?!{C@1fKmDC3z=Wht3^00000NkvXXu0mjf0ui2| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side.png index 98f101765a8dc0f2d9a1c0da418f3cd2bba60575..241f6c837bb1a2c3cfdcd404c77551dfd7f19fbb 100644 GIT binary patch delta 254 zcmV1)~Nq@fp01m$aI0aKA0002gNkl)H6<8e&Ih4zW`JS6@2;l0m?!EWVIl9#<|-b{0DI)m3hE|$l&?iFHjaLfT;z^ zgIxgPkn0L?7(m$=06A>X{SO0-|NrCEPZWR~;Njr`X1saxhIir2nKO)FK{S9(4HJlf z0aHs`C<`}0SA$}}v!_p>EZhKH4cq{bv!tYDpgimVn;HxkJbU#D%EJ!O)u0$a$ORxk z&;^75&M*K0a$EpU2U2o!@D%mz(Ic$s0Gk>LQz8Qc09<8h1A8w4(EtDd07*qoM6N<$ Eg1x|J^#A|> delta 316 zcmV-C0mJ^k0{jAyNq@rt01m?e$8V@)0003INkl0~Nsza2mkD$jtET z|38M$fB!HT@bf`MF#%QsK+fl3VP^R7`!9nG7bgQdD+^Qx6MtYg0O^@c$mnl*@C{Q3o^u>rh+xc|i~hTTtJFr0Y)1}cIH20Aw~FaQ9feMRDdB19(u O0000HxsB}KJo&#G>`;!=auy;P7vu?xdgF3U| z^#PqU3hM)yv_JQOw}V!D0MzM#?o;qV@By%IKHz47^#PrA8#Ko#z!?efcF^h>38>=( zniG5wd;sj;2lSnyGL0P0XXXFlgC^6s^&WVA(8Nf=2f+ux?tRex^8x$z&iQ~NzEcD0TD?=K~y+TWBmXB zKLaIz2}+X@!47a5z`@AO@az9ShR=WhFc|RjK}9hERs%rJ=V4)H`0)ELgA5lZ13N1VR0b1& zU^f8h_dDOdF&K&oGYA5`aQf|gs0=2+=>Kn748Q*TVR-QM8&nh%U^PGj828p9!eGsJzJ6yAWMO4^_8Ge&I9&h=`3oOE zGe~oAFt7t-1sA|-01GhH9ewqNK^>Ykh+h2q1*Wk9yn(p?#Vdy0PhT*cc>V?|f(ZsX cH!?5)0Hb|H;(;PWCjbBd07*qoM6N<$f&_4VkpKVy diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side_active.png.mcmeta b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side_active.png.mcmeta new file mode 100644 index 00000000..99db9b1b --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_side_active.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 5 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_top.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_top.png index 779e376a591c7650ed30efaeb5bb2f5b20d1d88c..193607ddd349cd01b70d38fdf93009cd9620f369 100644 GIT binary patch delta 247 zcmV~VE{?|!~(DZumB?m zptyh>Fz^PzV*wPuu=o#&YQUPjk)sqA;9vtl8esyUct!{4u>%TlSb}0gHx(NO0h~!0 xN~0uWY#2Ey!)ylutl1e`GDZe4c?Jds1^~(EcKH6+kM95g002ovPDHLkV1hy@Unl?o delta 383 zcmV-_0f7Fv0>1;0Nq@rt01m?e$8V@)00040Nkl_?(Mv5A+U#cCZ<{k`o% zs#d~Ey-w|RYk1zoate}NNdwk9m`$hi67YKhDVwB$&&h=Q@b59A2RsFAa$9|jC>s~3 z+oz$sAH47e(?CgBAEOZ;Tm*Gzvy9K-d~<7^)brcB!%u;Fu*&h6%+TrCC12L*w7y-I di4d(Z^ac4z^N?9=_s#$S002ovPDHLkV1fbsy5;}? diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_top_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver/overlay_top_active.png index aad06a210a6ab4d77bdc6f2ab73784328346d4c9..273dfed34fe441efe33c297cfc4417c91d62589d 100644 GIT binary patch delta 296 zcmaFIw1a7aWIY=L1B3kM|A|0~u{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstUx|zfk$L9 z0|Vbd5N6ylG5al0@T{kcV~B-+GEd){|K}YT8Ke`Qi*r0(#3Wb8sKG5<^YcgJ!wbv4 z^7sVUMHpI53wd_1Ya-+2{`dD6`gE)`;9)xdzOMdYS0clb>8z*Pm?vy@U`R7yS683G z#yDX{bcM)`QiFy>29Jx=zRv9l(Bt~RsdJp8phBX7VbjSYOdA+CFetMx*wG+k@PX|> zGNZ`;4L|rhvkuJKGjXwq*n8Ihl(}voX%`l=NDxlAI%9 ssd+euopFugP045@H#UPxHXvX)`J(K{zw7<)fnHAfM`hEYV|DZh&2pAz@cYd9QH-GjQQ-}W|vUw0rWo w;6;6W!WzR9|G-ep9?Ah2F8Wi@TbF9%2VD0<*=ha9OaK4?07*qoM6N<$f)1ab-T(jq From 09f23218bfc47754bce3280c177df1a932fb95f0 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 16 Oct 2024 02:40:30 -0400 Subject: [PATCH 092/159] Add display of block linked to on tooltip for calibrator and handheld receiver --- .../extended_industrialization/EIClient.java | 3 ++ .../EIComponents.java | 6 ++-- .../api/ItemStackTooltipComponent.java | 8 ++++++ .../client/tesla/TeslaPartRenderer.java | 4 +-- .../ItemStackClientTooltipComponent.java | 28 +++++++++++++++++++ .../teslalinkable/SelectedTeslaNetwork.java | 22 +++++++++++++++ .../teslalinkable/TeslaCalibratorItem.java | 24 +++++++++++++--- .../TeslaHandheldReceiverItem.java | 20 +++++++++++-- .../TeslaNetworkReceiversPlayerMixin.java | 2 +- 9 files changed, 105 insertions(+), 12 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/api/ItemStackTooltipComponent.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/tooltip/ItemStackClientTooltipComponent.java create mode 100644 src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 74466f9f..351fd840 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -33,6 +33,8 @@ import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.registries.DeferredHolder; +import net.swedz.extended_industrialization.client.tooltip.ItemStackClientTooltipComponent; +import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; import net.swedz.extended_industrialization.client.tesla.TeslaPartMultiblockRenderer; @@ -152,6 +154,7 @@ private static void registerClientTooltipComponents(RegisterClientTooltipCompone { event.register(SteamChainsawItem.SteamChainsawTooltipData.class, SteamChainsawTooltipComponent::new); event.register(MachineConfigCardItem.TooltipData.class, MachineConfigCardTooltipComponent::new); + event.register(ItemStackTooltipComponent.class, ItemStackClientTooltipComponent::new); } @SubscribeEvent diff --git a/src/main/java/net/swedz/extended_industrialization/EIComponents.java b/src/main/java/net/swedz/extended_industrialization/EIComponents.java index d7f26ee6..a4c8ee6d 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIComponents.java +++ b/src/main/java/net/swedz/extended_industrialization/EIComponents.java @@ -10,7 +10,7 @@ import net.swedz.extended_industrialization.component.RainbowDataComponent; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfig; -import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.item.teslalinkable.SelectedTeslaNetwork; import java.util.function.Supplier; import java.util.function.UnaryOperator; @@ -43,9 +43,9 @@ public final class EIComponents "rainbow", (b) -> b.persistent(RainbowDataComponent.CODEC).networkSynchronized(RainbowDataComponent.STREAM_CODEC) ); - public static final Supplier> SELECTED_TESLA_NETWORK = create( + public static final Supplier> SELECTED_TESLA_NETWORK = create( "selected_tesla_network", - (b) -> b.persistent(WorldPos.CODEC).networkSynchronized(WorldPos.STREAM_CODEC) + (b) -> b.persistent(SelectedTeslaNetwork.CODEC).networkSynchronized(SelectedTeslaNetwork.STREAM_CODEC) ); public static void init(IEventBus bus) diff --git a/src/main/java/net/swedz/extended_industrialization/api/ItemStackTooltipComponent.java b/src/main/java/net/swedz/extended_industrialization/api/ItemStackTooltipComponent.java new file mode 100644 index 00000000..dbbcc276 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/api/ItemStackTooltipComponent.java @@ -0,0 +1,8 @@ +package net.swedz.extended_industrialization.api; + +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import net.minecraft.world.item.ItemStack; + +public record ItemStackTooltipComponent(ItemStack stack) implements TooltipComponent +{ +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index e8655eb7..387cb317 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -60,8 +60,8 @@ private static void renderHighlight(MachineBlockEntity machine, float partialTic private static Optional getHeldNetworkKey() { Player player = Minecraft.getInstance().player; - return player.getMainHandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getMainHandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : - player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK)) : Optional.empty(); + return player.getMainHandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getMainHandItem().get(EIComponents.SELECTED_TESLA_NETWORK).key()) : + player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK).key()) : Optional.empty(); } private static final LodestoneRenderType TESLA_ARC = LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyAndCache(RenderTypeToken.createToken(EI.id("textures/vfx/tesla_arc.png"))); diff --git a/src/main/java/net/swedz/extended_industrialization/client/tooltip/ItemStackClientTooltipComponent.java b/src/main/java/net/swedz/extended_industrialization/client/tooltip/ItemStackClientTooltipComponent.java new file mode 100644 index 00000000..206b3782 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/tooltip/ItemStackClientTooltipComponent.java @@ -0,0 +1,28 @@ +package net.swedz.extended_industrialization.client.tooltip; + +import aztech.modern_industrialization.util.RenderHelper; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; + +public record ItemStackClientTooltipComponent(ItemStackTooltipComponent component) implements ClientTooltipComponent +{ + @Override + public int getHeight() + { + return 20; + } + + @Override + public int getWidth(Font font) + { + return 18; + } + + @Override + public void renderImage(Font font, int mouseX, int mouseY, GuiGraphics graphics) + { + RenderHelper.renderAndDecorateItem(graphics, font, component.stack(), mouseX, mouseY); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java new file mode 100644 index 00000000..d6a6493c --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java @@ -0,0 +1,22 @@ +package net.swedz.extended_industrialization.item.teslalinkable; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.level.block.Block; +import net.swedz.extended_industrialization.api.WorldPos; + +public record SelectedTeslaNetwork(WorldPos key, Block block) +{ + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance + .group( + WorldPos.CODEC.fieldOf("key").forGetter(SelectedTeslaNetwork::key), + BuiltInRegistries.BLOCK.byNameCodec().fieldOf("block").forGetter(SelectedTeslaNetwork::block) + ) + .apply(instance, SelectedTeslaNetwork::new)); + + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); +} diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java index 6f7e0179..3ace7920 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java @@ -6,11 +6,13 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.neoforged.bus.api.EventPriority; import net.neoforged.bus.api.SubscribeEvent; @@ -19,11 +21,13 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import java.util.List; +import java.util.Optional; import static aztech.modern_industrialization.MITooltips.*; import static net.swedz.extended_industrialization.EITooltips.*; @@ -44,7 +48,7 @@ private static void onPlaceReceiverWithCalibrator(BlockEvent.EntityPlaceEvent ev ItemStack offhand = player.getItemInHand(InteractionHand.OFF_HAND); if(offhand.has(EIComponents.SELECTED_TESLA_NETWORK)) { - WorldPos key = offhand.get(EIComponents.SELECTED_TESLA_NETWORK); + WorldPos key = offhand.get(EIComponents.SELECTED_TESLA_NETWORK).key(); BlockEntity blockEntity = event.getLevel().getBlockEntity(event.getPos()); if(blockEntity instanceof MachineBlockEntity machine && @@ -74,7 +78,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { if(!client) { - itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, transmitter.getPosition()); + itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new SelectedTeslaNetwork(transmitter.getPosition(), context.getLevel().getBlockState(context.getClickedPos()).getBlock())); player.displayClientMessage(EIText.TESLA_CALIBRATOR_SELECTED.text(), true); } return InteractionResult.sidedSuccess(client); @@ -87,7 +91,7 @@ else if(!player.isShiftKeyDown() && { if(itemStack.has(EIComponents.SELECTED_TESLA_NETWORK)) { - WorldPos key = itemStack.get(EIComponents.SELECTED_TESLA_NETWORK); + WorldPos key = itemStack.get(EIComponents.SELECTED_TESLA_NETWORK).key(); receiver.setNetwork(key); machine.setChanged(); machine.sync(); @@ -121,11 +125,23 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List getTooltipImage(ItemStack stack) + { + if(stack.has(EIComponents.SELECTED_TESLA_NETWORK)) + { + Block machineBlock = stack.get(EIComponents.SELECTED_TESLA_NETWORK).block(); + Item item = machineBlock.asItem(); + return Optional.of(new ItemStackTooltipComponent(item.getDefaultInstance())); + } + return Optional.empty(); + } + @Override public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java index a9249103..81cad1ed 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java @@ -5,18 +5,22 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import java.util.List; +import java.util.Optional; import static aztech.modern_industrialization.MITooltips.*; import static net.swedz.extended_industrialization.EITooltips.*; @@ -42,7 +46,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { if(!client) { - itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, transmitter.getPosition()); + itemStack.set(EIComponents.SELECTED_TESLA_NETWORK, new SelectedTeslaNetwork(transmitter.getPosition(), context.getLevel().getBlockState(context.getClickedPos()).getBlock())); player.displayClientMessage(EIText.TESLA_HANDHELD_SELECTED.text(), true); } return InteractionResult.sidedSuccess(client); @@ -68,11 +72,23 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List getTooltipImage(ItemStack stack) + { + if(stack.has(EIComponents.SELECTED_TESLA_NETWORK)) + { + Block machineBlock = stack.get(EIComponents.SELECTED_TESLA_NETWORK).block(); + Item item = machineBlock.asItem(); + return Optional.of(new ItemStackTooltipComponent(item.getDefaultInstance())); + } + return Optional.empty(); + } + @Override public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java index 06f09e95..ce619de8 100644 --- a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java @@ -84,7 +84,7 @@ private void tick(CallbackInfo callback) { if(stack.getItem() instanceof TeslaHandheldReceiverItem && stack.has(EIComponents.SELECTED_TESLA_NETWORK)) { - WorldPos key = stack.get(EIComponents.SELECTED_TESLA_NETWORK); + WorldPos key = stack.get(EIComponents.SELECTED_TESLA_NETWORK).key(); found.computeIfAbsent(key, (k) -> new PlayerTeslaReceiver(player, k)); } } From 5baf7a1c790889d56b0f7830fc934dde6c46ead1 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 16 Oct 2024 03:23:09 -0400 Subject: [PATCH 093/159] Optimize imports --- .../java/net/swedz/extended_industrialization/EIClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 351fd840..d755a43b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -33,12 +33,12 @@ import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.registries.DeferredHolder; -import net.swedz.extended_industrialization.client.tooltip.ItemStackClientTooltipComponent; import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; import net.swedz.extended_industrialization.client.tesla.TeslaPartMultiblockRenderer; import net.swedz.extended_industrialization.client.tesla.TeslaPartSingleBlockRenderer; +import net.swedz.extended_industrialization.client.tooltip.ItemStackClientTooltipComponent; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; From 890e2f95a19a2d1cc80b475266d2300b81d440a1 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 16 Oct 2024 03:24:24 -0400 Subject: [PATCH 094/159] Different texture depending on if a network is selected or not for a handheld receiver --- .../models/item/tesla_handheld_receiver.json | 6 ------ .../extended_industrialization/EIItems.java | 10 ++++++++-- .../models/item/tesla_handheld_receiver.json | 14 ++++++++++++++ .../item/tesla_handheld_receiver_active.json | 6 ++++++ .../textures/item/tesla_handheld_receiver.png | Bin 839 -> 804 bytes .../item/tesla_handheld_receiver_active.png | Bin 0 -> 845 bytes 6 files changed, 28 insertions(+), 8 deletions(-) delete mode 100644 src/generated/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json create mode 100644 src/main/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json create mode 100644 src/main/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver_active.json create mode 100644 src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver_active.png diff --git a/src/generated/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json b/src/generated/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json deleted file mode 100644 index 51e907e2..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "extended_industrialization:item/tesla_handheld_receiver" - } -} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIItems.java b/src/main/java/net/swedz/extended_industrialization/EIItems.java index b0cc1256..b544d59c 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIItems.java +++ b/src/main/java/net/swedz/extended_industrialization/EIItems.java @@ -2,6 +2,7 @@ import aztech.modern_industrialization.api.energy.CableTier; import com.google.common.collect.Sets; +import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.core.Holder; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; @@ -69,8 +70,8 @@ public static void init(IEventBus bus) public static final ItemHolder CANNED_FOOD = create("canned_food", "Canned Food", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().usingConvertsTo(TIN_CAN).build())).tag(ItemTags.WOLF_FOOD, ItemTags.CAT_FOOD).withModel(CommonModelBuilders::generated).register(); public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder TESLA_HANDHELD_RECEIVER = create("tesla_handheld_receiver", "Tesla Handheld Receiver", TeslaHandheldReceiverItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).withRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); + public static final ItemHolder TESLA_HANDHELD_RECEIVER = create("tesla_handheld_receiver", "Tesla Handheld Receiver", TeslaHandheldReceiverItem::new, EISortOrder.OTHER_GEAR).withRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); public static final ItemHolder TESLA_INTERDIMENSIONAL_UPGRADE = create("tesla_interdimensional_upgrade", "Tesla Interdimensional Upgrade", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.stacksTo(1).rarity(Rarity.EPIC)).withModel(CommonModelBuilders::generated).register(); @@ -153,4 +154,9 @@ public static ItemHolder createPhotovoltaicCell(String id, .withModel(CommonModelBuilders::generated) .register(); } + + public static void itemPropertyTeslaNetworkSelected(Item item) + { + ItemProperties.register(item, EI.id("selected_tesla_network"), (stack, __, ___, ____) -> stack.has(EIComponents.SELECTED_TESLA_NETWORK) ? 1 : 0); + } } diff --git a/src/main/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json b/src/main/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json new file mode 100644 index 00000000..f46fc5fe --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver.json @@ -0,0 +1,14 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "extended_industrialization:item/tesla_handheld_receiver" + }, + "overrides": [ + { + "predicate": { + "extended_industrialization:selected_tesla_network": 1 + }, + "model": "extended_industrialization:item/tesla_handheld_receiver_active" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver_active.json b/src/main/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver_active.json new file mode 100644 index 00000000..08a18273 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/item/tesla_handheld_receiver_active.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "extended_industrialization:item/tesla_handheld_receiver_active" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver.png b/src/main/resources/assets/extended_industrialization/textures/item/tesla_handheld_receiver.png index 91ce338c6b46ef3b046a5f19399015dae098ecd8..796efa3a0643447c31aa882d6a0c10bb27bdc77e 100644 GIT binary patch delta 372 zcmV-)0gL{}2BZeCx&eO}001r+0V=8|AOHXXNJ&INR5(v#{Qv(y10{e7N|O!XF7OE~ z2QxT0Il+7oShK8w5z52~zy^dwHT<{p3uNHo7hsT7<^fAQzx#z@-K=R0Th@2tH3aSg zkRf0O5d8T59ZVC_3~94*$xC4(KvrK(e;1!{M{&;ot>Rg z6z$!+7a@=AoW#V$|64PC{)1?kn3IzeoQ+Kk?t-MGr2iK#TmZ8{z`(!&%0dNSzkUVN zD_5=ry8>(gNVAKJ3s?djym;{f%0dMvPo4xD!UE-k!PL!{86KY5!XR(r!;tN(3)eht z+7vL&$0q=$eSB$JV3R4AKbG{OQvNhR>frgV`W}VgO9DvQ;2d zgn{A1hYw&)APfR9gJ1w220A)AP$38aX+#IeHeb4Q2^^j9SU`_!LI9E$7#INGr0NO{ SxuW*~000063!~g&RYe_^wR5(wCl08VnKorMcigR%;LI>9f z8JrARlDb8)BG`_}CdI|URa{-Q9qTBWDt=6oRS7thb{6cGp+jiMeD=NGU2`EdKe)Vi z@9zKZ-Mau|3`XpCX&Cus^Z$m1n@^yrJ;RJafqWc&3Kq~X3vPdU@o#x(&GGPNqfk&2 zV$(FC(b$1@`xGq8f=;&s_l{4=absD9h^*l0{F;XV=JPq(%Wzm(foul$0>{_Y8ClUt zVK)tGA|}F4Whd^w)yvG)s?p%pRP zwxwSdlNDh3~_~+hkqWl}}xxFGq-fK1a&QC=}wwB7rnb$w!m~LcDv><`IA-Nl1hP z5s3t{2fD8F&4Tx04UFukxM8n4#ug)4d}b zOJ%DpJT_hn8*8=}wn{0FlC6yuv5~I-xua%MqntXOU*9?3*E!#T;6cu`+^TM{?1Gbw z$F!;G8Lj4-Fts$(NI*B;{P@I3ii+domVjDsx>Oeb8};c0*Mxv3JZR>fg7Ca>|7szx zct<#5F6wFFQ{hfWE+~Ajbfd^GinBfkRc6FVC5MC~!dkYBjWRYD9ZR@RIGVO>$q!By zIjwk2v6Wjff9|PX7+$a^CzLL;jX0x>lR(2@g(Y$n=#teI#U&~Gu?qfH-=7edA+9A% zaSXGJh3@-NfAG6oH`CiwObW-K`pNU&+M#9(zBWDY^U(9Yjv(|17k0_Nd;kOQqHmV8 z=sq;8!`Wp?Gq&M;16m&Px}*D2NMc8oPqsJ?O|v z_FRQ`*OvG8=NZ30V&5nka*3Qc>Tm!6010qNS#tmYE*Jm+E*JqSswW@-00D7HL_t(I zPnD7}OT$1E$6v(3LaAMyI&`hj!O6iPsaq5aor+6}i+1x9_#tct5xR(w#R%#oU6q1E ziF2Wy?9d@JhPs`7|K`plq>4XydGFrc|J}R0kPw1gFb*1*M4R zIYu&t##MOHb=^i{BbS3`j&H4%LJ2y!X?AJvuul2SB5jrPnD`ie(%qF!C+?Z*B&(R} zfQv}J=5u%{#$XllGPo1A*YgHEo6O5KS%xEUA>OIcyb%A|eF2UTr(^AlcK10UGz=rL zsMqWL%*WfYEK59{nu5K|>AJ4steong)oO{sV1SsZR;y8zBn(4%$8pdF3b43Vt6?I| zWHO1OB>jFLMb@J+=sdjB`0bHOJ0`Ucww2hnFX0P?BD`suG@VWnui+aZ#lsgju`>&$ zcsBDX2m-`RqJR{ack5Ax$oGAS*ce$zqVAwlsYIzIEKC#M+4DR+r+S6-TmQxKUm*Gh Xj07y#YeI2u00000NkvXXu0mjfCL@u@ literal 0 HcmV?d00001 From 090bac834a611b5b342876e63b65e9cf342a5cf9 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 17 Oct 2024 01:53:50 -0400 Subject: [PATCH 095/159] Add gui component to display tesla network information instead of using a text screen like for multiblocks --- .../lang/en_us.json | 23 ++- .../extended_industrialization/EIText.java | 23 ++- .../compat/mi/EIMIHookListener.java | 3 + .../TeslaCoilMachineBlockEntity.java | 29 +++- .../TeslaReceiverMachineBlockEntity.java | 51 +++---- .../teslatower/TeslaTowerBlockEntity.java | 26 +--- .../component/tesla/TeslaNetwork.java | 2 +- .../tesla/receiver/TeslaReceiver.java | 30 +--- .../receiver/TeslaReceiverComponent.java | 6 +- .../tesla/receiver/TeslaReceiverState.java | 21 +++ .../teslanetwork/TeslaNetworkBar.java | 135 ++++++++++++++++++ .../teslanetwork/TeslaNetworkBarClient.java | 133 +++++++++++++++++ .../gui/container/tesla_network_bar.png | Bin 0 -> 805 bytes 13 files changed, 378 insertions(+), 104 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverState.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java create mode 100644 src/main/resources/assets/extended_industrialization/textures/gui/container/tesla_network_bar.png diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 9a9d31ab..d26651b6 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -228,24 +228,23 @@ "text.extended_industrialization.tesla_handheld_linked": "Linked to %s", "text.extended_industrialization.tesla_handheld_selected": "Selected transmitter for receiving.", "text.extended_industrialization.tesla_interdimensional_upgrade_help": "Removes the range limitation on a Tesla Tower and allows it to transmit energy across dimensions.", + "text.extended_industrialization.tesla_network_receiver_linked": "Linked to %s", + "text.extended_industrialization.tesla_network_receiver_mismatching_voltage": "Cannot receive %s power", + "text.extended_industrialization.tesla_network_receiver_no_link": "Not linked to any transmitter", + "text.extended_industrialization.tesla_network_receiver_too_far": "Transmitter is too far", + "text.extended_industrialization.tesla_network_receiver_unloaded": "Transmitter is not loaded", + "text.extended_industrialization.tesla_network_transmitter_consuming": "Consuming: %s", + "text.extended_industrialization.tesla_network_transmitter_drain": "Drain: %s", + "text.extended_industrialization.tesla_network_transmitter_receivers": "Receivers: %d", + "text.extended_industrialization.tesla_network_transmitter_transmitting": "Transmitting: %s (%s)", "text.extended_industrialization.tesla_receiver_help_1": "Can receive energy from a linked transmitter.", "text.extended_industrialization.tesla_receiver_help_2": "Must accept energy of the same voltage as the linked transmitter.", - "text.extended_industrialization.tesla_receiver_linked": "Linked to %s", - "text.extended_industrialization.tesla_receiver_mismatching_voltage": "Cannot receive %s power", - "text.extended_industrialization.tesla_receiver_no_link": "Not linked to any transmitter", - "text.extended_industrialization.tesla_receiver_too_far": "Transmitter is too far", - "text.extended_industrialization.tesla_receiver_unloaded_transmitter": "Transmitter is not loaded", "text.extended_industrialization.tesla_tower_help_1": "Wirelessly transmits energy to linked receivers within range.", "text.extended_industrialization.tesla_tower_help_2": "Energy transfer rate and range is determined by the windings used.", "text.extended_industrialization.tesla_tower_help_3": "Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier.", + "text.extended_industrialization.tesla_tower_mismatching_hatches": "All energy hatches must be of the same voltage.", + "text.extended_industrialization.tesla_tower_no_energy_hatches": "No energy hatches provided", "text.extended_industrialization.tesla_tower_upgrade": "Add tesla upgrades to increase maximum range.", - "text.extended_industrialization.tesla_transmitter_consuming": "Consuming: %s", - "text.extended_industrialization.tesla_transmitter_drain": "Drain: %s", - "text.extended_industrialization.tesla_transmitter_mismatching_hatches": "All energy hatches must be of the same voltage.", - "text.extended_industrialization.tesla_transmitter_no_energy_hatches": "No energy hatches provided", - "text.extended_industrialization.tesla_transmitter_no_network": "No network found", - "text.extended_industrialization.tesla_transmitter_receivers": "Receivers: %d", - "text.extended_industrialization.tesla_transmitter_transmitting": "Transmitting: %s (%s)", "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", "text.extended_industrialization.universal_transformer_to_tier_input": "Casing for cable tier to convert to (LV by default).", "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected.", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 167f0cbd..5df4ca63 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -121,24 +121,23 @@ public enum EIText implements MICompatibleTranslatableTextEnum TESLA_HANDHELD_LINKED("Linked to %s"), TESLA_HANDHELD_SELECTED("Selected transmitter for receiving."), TESLA_INTERDIMENSIONAL_UPGRADE_HELP("Removes the range limitation on a Tesla Tower and allows it to transmit energy across dimensions."), + TESLA_NETWORK_RECEIVER_LINKED("Linked to %s"), + TESLA_NETWORK_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), + TESLA_NETWORK_RECEIVER_NO_LINK("Not linked to any transmitter"), + TESLA_NETWORK_RECEIVER_TOO_FAR("Transmitter is too far"), + TESLA_NETWORK_RECEIVER_UNLOADED("Transmitter is not loaded"), + TESLA_NETWORK_TRANSMITTER_CONSUMING("Consuming: %s"), + TESLA_NETWORK_TRANSMITTER_DRAIN("Drain: %s"), + TESLA_NETWORK_TRANSMITTER_RECEIVERS("Receivers: %d"), + TESLA_NETWORK_TRANSMITTER_TRANSMITTING("Transmitting: %s (%s)"), TESLA_RECEIVER_HELP_1("Can receive energy from a linked transmitter."), TESLA_RECEIVER_HELP_2("Must accept energy of the same voltage as the linked transmitter."), - TESLA_RECEIVER_LINKED("Linked to %s"), - TESLA_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), - TESLA_RECEIVER_NO_LINK("Not linked to any transmitter"), - TESLA_RECEIVER_TOO_FAR("Transmitter is too far"), - TESLA_RECEIVER_UNLOADED_TRANSMITTER("Transmitter is not loaded"), TESLA_TOWER_HELP_1("Wirelessly transmits energy to linked receivers within range."), TESLA_TOWER_HELP_2("Energy transfer rate and range is determined by the windings used."), TESLA_TOWER_HELP_3("Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier."), + TESLA_TOWER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), + TESLA_TOWER_NO_ENERGY_HATCHES("No energy hatches provided"), TESLA_TOWER_UPGRADE("Add tesla upgrades to increase maximum range."), - TESLA_TRANSMITTER_CONSUMING("Consuming: %s"), - TESLA_TRANSMITTER_DRAIN("Drain: %s"), - TESLA_TRANSMITTER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), - TESLA_TRANSMITTER_NO_ENERGY_HATCHES("No energy hatches provided"), - TESLA_TRANSMITTER_NO_NETWORK("No network found"), - TESLA_TRANSMITTER_RECEIVERS("Receivers: %d"), - TESLA_TRANSMITTER_TRANSMITTING("Transmitting: %s (%s)"), UNIVERSAL_TRANSFORMER_FROM_TIER_INPUT("Casing for cable tier to convert from (LV by default)."), UNIVERSAL_TRANSFORMER_TO_TIER_INPUT("Casing for cable tier to convert to (LV by default)."), WASTE_COLLECTOR_HELP("When placed underneath animals, manure will be collected."), diff --git a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java index 99343394..d1255afd 100644 --- a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java +++ b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java @@ -9,6 +9,8 @@ import net.swedz.extended_industrialization.machines.guicomponent.processingarraymachineslot.ProcessingArrayMachineSlotClient; import net.swedz.extended_industrialization.machines.guicomponent.solarefficiency.SolarEfficiencyBar; import net.swedz.extended_industrialization.machines.guicomponent.solarefficiency.SolarEfficiencyBarClient; +import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; +import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBarClient; import net.swedz.extended_industrialization.machines.guicomponent.universaltransformer.UniversalTransformerSlots; import net.swedz.extended_industrialization.machines.guicomponent.universaltransformer.UniversalTransformerSlotsClient; import net.swedz.tesseract.neoforge.compat.mi.hook.MIHookEntrypoint; @@ -37,6 +39,7 @@ public void clientGuiComponents(ClientGuiComponentsMIHookContext hook) hook.register(SolarEfficiencyBar.ID, SolarEfficiencyBarClient::new); hook.register(ProcessingArrayMachineSlot.ID, ProcessingArrayMachineSlotClient::new); hook.register(UniversalTransformerSlots.ID, UniversalTransformerSlotsClient::new); + hook.register(TeslaNetworkBar.ID, TeslaNetworkBarClient::new); // TODO move to tesseract hook.register(ModularSlotPanel.ID, ModularSlotPanelClient::new); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java index e7a95b68..62ad21bb 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -33,12 +33,15 @@ import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; +import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; import java.util.List; +import java.util.Optional; import java.util.Set; public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder @@ -110,7 +113,31 @@ protected void setCasingStack(ItemStack stack) this.registerComponents(isActive, redstoneControl, casing, energy, transmitter); - this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(81, 34), energy::getEu, energy::getCapacity)); + this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); + + this.registerGuiComponent(new TeslaNetworkBar.Server( + new TeslaNetworkBar.Parameters(101, 34), + () -> + { + if(this.hasNetwork()) + { + TeslaNetwork network = this.getNetwork(); + if(network.isTransmitterLoaded()) + { + long drain = this.getPassiveDrain(); + return Optional.of(new TeslaNetworkBar.TransmitterData( + network.receiverCount(), + lastEnergyTransmitted, + network.getCableTier(), + drain, + lastEnergyTransmitted + drain + )); + } + } + return Optional.empty(); + } + )); + this.registerGuiComponent(new ModularSlotPanel.Server(this, 0) .withRedstoneModule(redstoneControl) .withCasings(casing)); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 77ee0b9a..42665d22 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -20,21 +20,18 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; -import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; +import java.util.Optional; import java.util.Set; -import static net.swedz.extended_industrialization.EITooltips.*; -import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; -import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; - public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable, TeslaPlasmaBehaviorHolder { private final IsActiveComponent isActive; @@ -48,7 +45,7 @@ public TeslaReceiverMachineBlockEntity(BEP bep) { super( bep, - new MachineGuiParameters.Builder(EI.id("tesla_receiver"), false).backgroundHeight(175).build(), + new MachineGuiParameters.Builder(EI.id("tesla_receiver"), false).build(), new OrientationComponent.Params(true, false, false) ); @@ -73,39 +70,29 @@ protected void setCasingStack(ItemStack stack) this.registerComponents(isActive, redstoneControl, casing, receiver); - this.registerGuiComponent(new ModularMultiblockGui.Server(0, 60, (content) -> - { - if(this.hasNetwork()) - { - TeslaNetwork network = this.getNetwork(); - - content.add(EIText.TESLA_RECEIVER_LINKED.arg(this.getNetworkKey(), TESLA_NETWORK_KEY_PARSER), WHITE, true); - - if(network.isTransmitterLoaded()) + this.registerGuiComponent(new TeslaNetworkBar.Server( + new TeslaNetworkBar.Parameters(101, 34), + () -> { - ReceiveCheckResult result = this.checkReceiveFrom(network); - if(result.isFailure()) + if(this.hasNetwork()) { - if(result == ReceiveCheckResult.MISMATCHING_VOLTAGE) + TeslaNetwork network = this.getNetwork(); + if(network.isTransmitterLoaded()) { - content.add(EIText.TESLA_RECEIVER_MISMATCHING_VOLTAGE.arg(network.getCableTier(), CABLE_TIER_SHORT), RED); + TeslaReceiverState state = this.checkReceiveFrom(network); + return Optional.of(new TeslaNetworkBar.ReceiverData(state, Optional.of(this.getNetworkKey()), Optional.of(network.getCableTier()))); } - else if(result == ReceiveCheckResult.TOO_FAR) + else { - content.add(EIText.TESLA_RECEIVER_TOO_FAR, RED); + return Optional.of(new TeslaNetworkBar.ReceiverData(TeslaReceiverState.UNLOADED_TRANSMITTER, Optional.of(this.getNetworkKey()), Optional.empty())); } } + else + { + return Optional.of(new TeslaNetworkBar.ReceiverData(TeslaReceiverState.NO_LINK, Optional.empty(), Optional.empty())); + } } - else - { - content.add(EIText.TESLA_RECEIVER_UNLOADED_TRANSMITTER, RED); - } - } - else - { - content.add(EIText.TESLA_RECEIVER_NO_LINK, RED); - } - })); + )); this.registerGuiComponent(new SlotPanel.Server(this) .withRedstoneControl(redstoneControl) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 6a992513..c25edb5b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -107,38 +107,26 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) if(this.hasNetwork()) { TeslaNetwork network = this.getNetwork(); - if(network.isTransmitterLoaded()) { - content.add(EIText.TESLA_TRANSMITTER_RECEIVERS.arg(network.receiverCount())); + content.add(EIText.TESLA_NETWORK_TRANSMITTER_RECEIVERS.arg(network.receiverCount())); - content.add(EIText.TESLA_TRANSMITTER_TRANSMITTING.arg(lastEnergyTransmitted, EU_PER_TICK_PARSER).arg(network.getCableTier(), CABLE_TIER_SHORT)); + content.add(EIText.TESLA_NETWORK_TRANSMITTER_TRANSMITTING.arg(lastEnergyTransmitted, EU_PER_TICK_PARSER).arg(network.getCableTier(), CABLE_TIER_SHORT)); long drain = this.getPassiveDrain(); - content.add(EIText.TESLA_TRANSMITTER_DRAIN.arg(drain, EU_PER_TICK_PARSER)); - content.add(EIText.TESLA_TRANSMITTER_CONSUMING.arg(lastEnergyTransmitted + drain, EU_PER_TICK_PARSER)); + content.add(EIText.TESLA_NETWORK_TRANSMITTER_DRAIN.arg(drain, EU_PER_TICK_PARSER)); + content.add(EIText.TESLA_NETWORK_TRANSMITTER_CONSUMING.arg(lastEnergyTransmitted + drain, EU_PER_TICK_PARSER)); } - else + else if(this.getCableTier() == null) { - if(this.getCableTier() == null) - { - content.add(EIText.TESLA_TRANSMITTER_NO_ENERGY_HATCHES, RED); - } - else - { - content.add(EIText.TESLA_TRANSMITTER_NO_NETWORK, RED); - } + content.add(EIText.TESLA_TOWER_NO_ENERGY_HATCHES, RED); } } - else - { - content.add(EIText.TESLA_TRANSMITTER_NO_NETWORK, RED); - } } else { if(this.getShapeMatcher() != null && this.getShapeMatcher().hasMismatchingHatches()) { - content.add(EIText.TESLA_TRANSMITTER_MISMATCHING_HATCHES, RED, true); + content.add(EIText.TESLA_TOWER_MISMATCHING_HATCHES, RED, true); } } })); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index 3fc1c8fd..5acc749f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -71,7 +71,7 @@ public TeslaTransferLimits getDelegateTransferLimits() { if(!this.isTransmitterLoaded()) { - throw new IllegalStateException("Cannot get cable tier from network without a loaded transmitter"); + throw new IllegalStateException("Cannot get transfer limits from network without a loaded transmitter"); } return this.getTransmitter(); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index a0596b9d..0f20af24 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -8,13 +8,13 @@ public interface TeslaReceiver extends TeslaNetworkPart { - default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) + default TeslaReceiverState checkReceiveFrom(TeslaNetwork network) { TeslaTransmitter transmitter = network.getTransmitter(); if(transmitter.isInterdimensional()) { - return ReceiveCheckResult.SUCCESS; + return TeslaReceiverState.SUCCESS; } WorldPos transmitterPos = transmitter.getSourcePosition(); @@ -22,7 +22,7 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) if(!transmitterPos.isSameDimension(receiverPos)) { - return ReceiveCheckResult.TOO_FAR; + return TeslaReceiverState.TOO_FAR; } int maxDistance = network.getMaxDistance(); @@ -31,10 +31,10 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) int distZ = Math.abs(transmitterPos.getZ() - receiverPos.getZ()); if(distX > maxDistance || distY > maxDistance || distZ > maxDistance) { - return ReceiveCheckResult.TOO_FAR; + return TeslaReceiverState.TOO_FAR; } - return ReceiveCheckResult.SUCCESS; + return TeslaReceiverState.SUCCESS; } long receiveEnergy(long maxReceive, boolean simulate); @@ -43,30 +43,12 @@ default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) long getEnergyCapacity(); - enum ReceiveCheckResult - { - SUCCESS, - MISMATCHING_VOLTAGE, - TOO_FAR, - UNDEFINED; - - public boolean isSuccess() - { - return this == ReceiveCheckResult.SUCCESS; - } - - public boolean isFailure() - { - return !this.isSuccess(); - } - } - interface Delegate extends TeslaReceiver { TeslaReceiver getDelegateReceiver(); @Override - default ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) + default TeslaReceiverState checkReceiveFrom(TeslaNetwork network) { return this.getDelegateReceiver().checkReceiveFrom(network); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 8e482d53..4a1288bd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -81,11 +81,11 @@ public MIEnergyStorage insertable() } @Override - public ReceiveCheckResult checkReceiveFrom(TeslaNetwork network) + public TeslaReceiverState checkReceiveFrom(TeslaNetwork network) { if(this.getCableTier() != network.getCableTier()) { - return ReceiveCheckResult.MISMATCHING_VOLTAGE; + return TeslaReceiverState.MISMATCHING_VOLTAGE; } else if(machine.hasLevel()) { @@ -93,7 +93,7 @@ else if(machine.hasLevel()) } else { - return ReceiveCheckResult.UNDEFINED; + return TeslaReceiverState.UNDEFINED; } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverState.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverState.java new file mode 100644 index 00000000..60d5ae0e --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverState.java @@ -0,0 +1,21 @@ +package net.swedz.extended_industrialization.machines.component.tesla.receiver; + +public enum TeslaReceiverState +{ + SUCCESS, + NO_LINK, + UNLOADED_TRANSMITTER, + MISMATCHING_VOLTAGE, + TOO_FAR, + UNDEFINED; + + public boolean isSuccess() + { + return this == SUCCESS; + } + + public boolean isFailure() + { + return !this.isSuccess(); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java new file mode 100644 index 00000000..f65b7386 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java @@ -0,0 +1,135 @@ +package net.swedz.extended_industrialization.machines.guicomponent.teslanetwork; + +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.machines.gui.GuiComponent; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; + +import java.util.Optional; +import java.util.function.Supplier; + +public final class TeslaNetworkBar +{ + public static final ResourceLocation ID = EI.id("tesla_network_bar"); + + public static final class Server implements GuiComponent.Server> + { + private final Parameters params; + + private final Supplier> data; + + public Server(Parameters params, Supplier> data) + { + this.params = params; + this.data = data; + } + + @Override + public Optional copyData() + { + return data.get(); + } + + @Override + public boolean needsSync(Optional cachedData) + { + return !cachedData.equals(this.copyData()); + } + + @Override + public void writeInitialData(RegistryFriendlyByteBuf buf) + { + buf.writeVarInt(params.renderX); + buf.writeVarInt(params.renderY); + this.writeCurrentData(buf); + } + + @Override + public void writeCurrentData(RegistryFriendlyByteBuf buf) + { + Optional data = this.data.get(); + buf.writeBoolean(data.isPresent()); + data.ifPresent((d) -> d.write(buf)); + } + + @Override + public ResourceLocation getId() + { + return ID; + } + } + + public record Parameters(int renderX, int renderY) + { + } + + public interface Data + { + void write(RegistryFriendlyByteBuf buf); + + int iconIndex(); + } + + public record TransmitterData( + int receivers, long energyTransmitting, CableTier cableTier, long energyDrain, long energyConsuming + ) implements Data + { + @Override + public void write(RegistryFriendlyByteBuf buf) + { + buf.writeBoolean(true); + + buf.writeVarInt(receivers); + buf.writeVarLong(energyTransmitting); + buf.writeUtf(cableTier.name); + buf.writeVarLong(energyDrain); + buf.writeVarLong(energyConsuming); + } + + @Override + public int iconIndex() + { + return 1; + } + } + + public record ReceiverData( + TeslaReceiverState state, Optional linked, Optional networkCableTier + ) implements Data + { + @Override + public void write(RegistryFriendlyByteBuf buf) + { + buf.writeBoolean(false); + + buf.writeEnum(state); + buf.writeOptional(linked, WorldPos.STREAM_CODEC); + if(linked.isPresent()) + { + buf.writeBoolean(networkCableTier.isPresent()); + networkCableTier.ifPresent((cableTier) -> buf.writeUtf(cableTier.name)); + } + } + + @Override + public int iconIndex() + { + if(state.isFailure()) + { + return switch (state) + { + case NO_LINK -> 0; + case UNLOADED_TRANSMITTER -> 3; + case MISMATCHING_VOLTAGE -> 4; + case TOO_FAR -> 5; + case UNDEFINED -> 2; + default -> throw new IllegalStateException("Unexpected value: " + state); + }; + } + return 1; + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java new file mode 100644 index 00000000..e13ee5f4 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java @@ -0,0 +1,133 @@ +package net.swedz.extended_industrialization.machines.guicomponent.teslanetwork; + +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.machines.gui.ClientComponentRenderer; +import aztech.modern_industrialization.machines.gui.GuiComponentClient; +import aztech.modern_industrialization.machines.gui.MachineScreen; +import aztech.modern_industrialization.util.RenderHelper; +import com.google.common.collect.Lists; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.tesseract.neoforge.helper.ComponentHelper; + +import java.util.List; +import java.util.Optional; + +import static aztech.modern_industrialization.MITooltips.*; +import static net.swedz.extended_industrialization.EITooltips.*; +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; + +public final class TeslaNetworkBarClient implements GuiComponentClient +{ + private final TeslaNetworkBar.Parameters params; + + private Optional data = Optional.empty(); + + public TeslaNetworkBarClient(RegistryFriendlyByteBuf buf) + { + this.params = new TeslaNetworkBar.Parameters(buf.readVarInt(), buf.readVarInt()); + this.readCurrentData(buf); + } + + @Override + public void readCurrentData(RegistryFriendlyByteBuf buf) + { + if(buf.readBoolean()) + { + boolean transmitter = buf.readBoolean(); + if(transmitter) + { + int receivers = buf.readVarInt(); + long energyTransmitting = buf.readVarLong(); + CableTier cableTier = CableTier.getTier(buf.readUtf()); + long energyDrain = buf.readVarLong(); + long energyConsuming = buf.readVarLong(); + data = Optional.of(new TeslaNetworkBar.TransmitterData(receivers, energyTransmitting, cableTier, energyDrain, energyConsuming)); + } + else + { + TeslaReceiverState state = buf.readEnum(TeslaReceiverState.class); + Optional linked = buf.readOptional(WorldPos.STREAM_CODEC); + Optional networkCableTier = Optional.empty(); + if(linked.isPresent() && buf.readBoolean()) + { + networkCableTier = Optional.of(CableTier.getTier(buf.readUtf())); + } + data = Optional.of(new TeslaNetworkBar.ReceiverData(state, linked, networkCableTier)); + } + } + else + { + data = Optional.empty(); + } + } + + @Override + public ClientComponentRenderer createRenderer(MachineScreen machineScreen) + { + return new ClientComponentRenderer() + { + private static final ResourceLocation TESLA_NETWORK_BAR = EI.id("textures/gui/container/tesla_network_bar.png"); + + private final int WIDTH = 18, HEIGHT = 18; + + @Override + public void renderBackground(GuiGraphics guiGraphics, int x, int y) + { + int iconIndex = data.map(TeslaNetworkBar.Data::iconIndex).orElse(0); + guiGraphics.blit( + TESLA_NETWORK_BAR, + x + params.renderX(), y + params.renderY(), + iconIndex * 18, 0, WIDTH, HEIGHT, 18 * 6, 18 + ); + } + + @Override + public void renderTooltip(MachineScreen screen, Font font, GuiGraphics guiGraphics, int x, int y, int mouseX, int mouseY) + { + if(RenderHelper.isPointWithinRectangle(params.renderX(), params.renderY(), WIDTH, HEIGHT, mouseX - x, mouseY - y)) + { + List lines = Lists.newArrayList(); + if(data.isPresent()) + { + if(data.get() instanceof TeslaNetworkBar.TransmitterData transmitter) + { + lines.add(EIText.TESLA_NETWORK_TRANSMITTER_RECEIVERS.arg(transmitter.receivers())); + lines.add(EIText.TESLA_NETWORK_TRANSMITTER_TRANSMITTING.arg(transmitter.energyTransmitting(), EU_PER_TICK_PARSER).arg(transmitter.cableTier(), CABLE_TIER_SHORT)); + lines.add(EIText.TESLA_NETWORK_TRANSMITTER_DRAIN.arg(transmitter.energyDrain(), EU_PER_TICK_PARSER)); + lines.add(EIText.TESLA_NETWORK_TRANSMITTER_CONSUMING.arg(transmitter.energyConsuming(), EU_PER_TICK_PARSER)); + } + else if(data.get() instanceof TeslaNetworkBar.ReceiverData receiver) + { + if(receiver.linked().isPresent()) + { + lines.add(EIText.TESLA_NETWORK_RECEIVER_LINKED.arg(receiver.linked().get(), TESLA_NETWORK_KEY_PARSER)); + } + if(receiver.state().isFailure()) + { + switch (receiver.state()) + { + case NO_LINK -> lines.add(EIText.TESLA_NETWORK_RECEIVER_NO_LINK.text()); + case UNLOADED_TRANSMITTER -> lines.add(EIText.TESLA_NETWORK_RECEIVER_UNLOADED.text()); + case MISMATCHING_VOLTAGE -> lines.add(EIText.TESLA_NETWORK_RECEIVER_MISMATCHING_VOLTAGE.arg(receiver.networkCableTier().orElseThrow(), CABLE_TIER_SHORT)); + case TOO_FAR -> lines.add(EIText.TESLA_NETWORK_RECEIVER_TOO_FAR.text()); + } + } + } + } + if(!lines.isEmpty()) + { + guiGraphics.renderTooltip(font, lines.stream().map((c) -> ComponentHelper.stripStyle(c.getVisualOrderText())).toList(), mouseX, mouseY); + } + } + } + }; + } +} diff --git a/src/main/resources/assets/extended_industrialization/textures/gui/container/tesla_network_bar.png b/src/main/resources/assets/extended_industrialization/textures/gui/container/tesla_network_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d7703f35b09c6fac5afcd8d1cad183ea68a7 GIT binary patch literal 805 zcmV+=1KRwFP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf3;+NN3;{ntBFF#$0=h{=K~z{r?Uv1I z6Hye$Cq9B$#B@_!3c3+VmO6D&$R-5x0xgJ0HYE_UNtPj-D3a()Bo9!ee(kc+g@{Y( zCPF{xPIu1e|Ms5d&Y5#(?xgKT?+*_5-bv<{Gjno3N^u+qM73I74jh=z=Ox`u@cPA% zLY`;4W$($r^qdzA#cDR2s_)8lI!zS~$sBw?(IYoDZr?~focAm-J*r@<6pLuL+h~-G zk~uxThM_ap*P`I_$6LYvmo@JZFg=Na>6h=!XfzTF26+)S?i>aO-)^QJ%zMsAcu=rP zrSi8?sBwWH)cDo&MZ9_U=zQ!NxW~NDdy-*#5{C{V@9<$eY;f?8(p?e0zT5DgC8>hZ z@~Em=I-7xL35;j6S#Hsg45oh;(x%Muo}?#HFchoNXy{QkolXahm=qTY7!v`UK=DfL@o2eAullF**4q!WY zxE?qN{F`()LEakA;hv{od%^p?y9M)4} ztyWVN1$5}ZxZm%qOX@-nNCs110?UDI$>7*L!(T7eLp|Esa(dZ$`Mi11y|9OJaxE73 z;C^6pWbS$>4x-oVsW4BAMZn82BX6^{!97oY?m8FCgnN*WYq3nYhh8>v!Yq5czAnx} zj_Cl%0}kqUb+{9#;Q5(Uqv==~H|<)Pp{>!AZ+FAKv^^#_9inw8c>bFId-cip=< z-jlP3fhdYpTn4M|U7Y{fQyP!Qs?%z_*zyba}PZ<0Gl8w+Q9mwfi00000NkvXXu0mjf9=v*k literal 0 HcmV?d00001 From b5ecf10dca49d93c3c242413b88ca6fd5fa424fb Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 17 Oct 2024 03:09:02 -0400 Subject: [PATCH 096/159] Give tesla receivers an internal energy buffer --- .../TeslaCoilMachineBlockEntity.java | 7 ++- .../TeslaReceiverMachineBlockEntity.java | 29 ++++++++-- .../receiver/TeslaReceiverComponent.java | 55 +------------------ 3 files changed, 32 insertions(+), 59 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java index 62ad21bb..2d4f4d5d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -1,6 +1,5 @@ package net.swedz.extended_industrialization.machines.blockentity; -import aztech.modern_industrialization.MICapabilities; import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.EnergyApi; import aztech.modern_industrialization.api.energy.MIEnergyStorage; @@ -39,6 +38,7 @@ import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; +import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; import java.util.List; import java.util.Optional; @@ -89,7 +89,8 @@ protected void setCasingStack(ItemStack stack) insertable = energy.buildInsertable(casing::canInsertEu); transmitter = new TeslaTransmitterComponent( - this, List.of(energy), + this, + List.of(energy), () -> { CableTier tier = casing.getCableTier(); @@ -290,7 +291,7 @@ public void tick() public static void registerEnergyApi(BlockEntityType bet) { - MICapabilities.onEvent((event) -> + CapabilitiesListeners.register(EI.ID, (event) -> event.registerBlockEntity(EnergyApi.SIDED, bet, (be, direction) -> ((TeslaCoilMachineBlockEntity) be).insertable)); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 42665d22..0b29822b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -1,16 +1,19 @@ package net.swedz.extended_industrialization.machines.blockentity; -import aztech.modern_industrialization.MICapabilities; import aztech.modern_industrialization.api.energy.EnergyApi; +import aztech.modern_industrialization.api.energy.MIEnergyStorage; import aztech.modern_industrialization.inventory.MIInventory; import aztech.modern_industrialization.machines.BEP; import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.components.CasingComponent; +import aztech.modern_industrialization.machines.components.EnergyComponent; import aztech.modern_industrialization.machines.components.IsActiveComponent; import aztech.modern_industrialization.machines.components.OrientationComponent; import aztech.modern_industrialization.machines.components.RedstoneControlComponent; import aztech.modern_industrialization.machines.gui.MachineGuiParameters; +import aztech.modern_industrialization.machines.guicomponents.EnergyBar; import aztech.modern_industrialization.machines.guicomponents.SlotPanel; +import aztech.modern_industrialization.machines.helper.EnergyHelper; import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.util.Tickable; import net.minecraft.core.Direction; @@ -28,6 +31,7 @@ import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; +import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; import java.util.Optional; import java.util.Set; @@ -39,6 +43,10 @@ public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity im private final RedstoneControlComponent redstoneControl; private final CasingComponent casing; + private final EnergyComponent energy; + private final MIEnergyStorage insertable; + private final MIEnergyStorage extractable; + private final TeslaReceiverComponent receiver; public TeslaReceiverMachineBlockEntity(BEP bep) @@ -66,10 +74,21 @@ protected void setCasingStack(ItemStack stack) } }; - receiver = new TeslaReceiverComponent(this, () -> redstoneControl.doAllowNormalOperation(this), casing::getCableTier); + energy = new EnergyComponent(this, casing::getEuCapacity); + insertable = energy.buildInsertable(casing::canInsertEu); + extractable = energy.buildExtractable(casing::canInsertEu); + + receiver = new TeslaReceiverComponent( + this, + insertable, + () -> redstoneControl.doAllowNormalOperation(this), + casing::getCableTier + ); this.registerComponents(isActive, redstoneControl, casing, receiver); + this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); + this.registerGuiComponent(new TeslaNetworkBar.Server( new TeslaNetworkBar.Parameters(101, 34), () -> @@ -204,15 +223,17 @@ public void tick() { isActive.updateActive(false, this); } + + EnergyHelper.autoOutput(this, orientation, casing.getCableTier(), extractable); } public static void registerEnergyApi(BlockEntityType bet) { - MICapabilities.onEvent((event) -> + CapabilitiesListeners.register(EI.ID, (event) -> event.registerBlockEntity(EnergyApi.SIDED, bet, (be, direction) -> { TeslaReceiverMachineBlockEntity machine = (TeslaReceiverMachineBlockEntity) be; - return machine.orientation.outputDirection == direction ? null : machine.receiver.insertable(); + return machine.orientation.outputDirection == direction ? machine.extractable : null; })); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 4a1288bd..99532b95 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -1,7 +1,6 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; import aztech.modern_industrialization.api.energy.CableTier; -import aztech.modern_industrialization.api.energy.EnergyApi; import aztech.modern_industrialization.api.energy.MIEnergyStorage; import aztech.modern_industrialization.machines.IComponent; import aztech.modern_industrialization.machines.MachineBlockEntity; @@ -11,7 +10,6 @@ import net.minecraft.nbt.Tag; import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.tesseract.neoforge.helper.transfer.InputOutputDirectionalBlockCapabilityCache; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; @@ -21,63 +19,16 @@ public class TeslaReceiverComponent implements IComponent, TeslaReceiver { private final MachineBlockEntity machine; + private final MIEnergyStorage insertable; private final Supplier cableTier; - private final InputOutputDirectionalBlockCapabilityCache energyOutputCache; - private final MIEnergyStorage insertable; - private Optional networkKey = Optional.empty(); - public TeslaReceiverComponent(MachineBlockEntity machine, Supplier canOperate, Supplier cableTier) + public TeslaReceiverComponent(MachineBlockEntity machine, MIEnergyStorage energyInsertable, Supplier canOperate, Supplier cableTier) { this.machine = machine; + this.insertable = energyInsertable; this.cableTier = cableTier; - - energyOutputCache = new InputOutputDirectionalBlockCapabilityCache<>(EnergyApi.SIDED); - insertable = new MIEnergyStorage.NoExtract() - { - @Override - public boolean canConnect(CableTier cableTier) - { - return false; - } - - @Override - public long receive(long maxReceive, boolean simulate) - { - if(!canOperate.get()) - { - return 0; - } - MIEnergyStorage target = energyOutputCache.output(machine.getLevel(), machine.getBlockPos(), machine.orientation.outputDirection); - return target != null && target.canConnect(TeslaReceiverComponent.this.getCableTier()) ? target.receive(maxReceive, simulate) : 0; - } - - @Override - public long getAmount() - { - MIEnergyStorage target = energyOutputCache.output(machine.getLevel(), machine.getBlockPos(), machine.orientation.outputDirection); - return target != null ? target.getAmount() : 0; - } - - @Override - public long getCapacity() - { - MIEnergyStorage target = energyOutputCache.output(machine.getLevel(), machine.getBlockPos(), machine.orientation.outputDirection); - return target != null ? target.getCapacity() : 0; - } - - @Override - public boolean canReceive() - { - return canOperate.get(); - } - }; - } - - public MIEnergyStorage insertable() - { - return insertable; } @Override From b46c2fa3e66fb0143cb6565e62650f9ea785c53c Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 17 Oct 2024 03:30:50 -0400 Subject: [PATCH 097/159] Formatting --- .../multiblock/teslatower/TeslaTowerBlockEntity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index c25edb5b..a91a0dcd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -86,7 +86,8 @@ public void setStackServer(MachineBlockEntity machine, ItemStack stack) }; transmitter = new TeslaTransmitterComponent( - this, energyInputs, + this, + energyInputs, () -> TeslaTransferLimits.of(cableTier, SHAPES.tiers().get(activeShape.getActiveShapeIndex())), () -> new WorldPos(level, this.getTopLoadPosition()) ); From 0b5a5722a5460e5be6860696b97442ceba50889f Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 17 Oct 2024 03:31:00 -0400 Subject: [PATCH 098/159] Register energy component --- .../machines/blockentity/TeslaReceiverMachineBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 0b29822b..364b6e21 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -85,7 +85,7 @@ protected void setCasingStack(ItemStack stack) casing::getCableTier ); - this.registerComponents(isActive, redstoneControl, casing, receiver); + this.registerComponents(isActive, redstoneControl, casing, energy, receiver); this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); From 6b730612783d5d0dd8376044dc9bd1e88056bd16 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 17 Oct 2024 03:31:16 -0400 Subject: [PATCH 099/159] Only output energy from receiver when redstone allows it --- .../blockentity/TeslaReceiverMachineBlockEntity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index 364b6e21..bd173692 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -224,7 +224,10 @@ public void tick() isActive.updateActive(false, this); } - EnergyHelper.autoOutput(this, orientation, casing.getCableTier(), extractable); + if(redstoneControl.doAllowNormalOperation(this)) + { + EnergyHelper.autoOutput(this, orientation, casing.getCableTier(), extractable); + } } public static void registerEnergyApi(BlockEntityType bet) From e11f905ba50e2b8bf83191b60c9ba7f8f7e138d8 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 9 Dec 2024 07:28:42 -0500 Subject: [PATCH 100/159] Fix issue with telsa coils loading at weird times --- .../machines/blockentity/TeslaCoilMachineBlockEntity.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java index 2d4f4d5d..dce4a879 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -237,7 +237,6 @@ public void setLevel(Level level) super.setLevel(level); this.setNetwork(this.getPosition()); - this.getNetwork().loadTransmitter(transmitter); } @Override @@ -272,6 +271,12 @@ public void tick() return; } + TeslaNetwork network = this.getNetwork(); + if(!network.hasTransmitter()) + { + network.loadTransmitter(transmitter); + } + lastEnergyTransmitted = 0; boolean active = false; From 11d9f142a5e5d62d0cb67dca351d4ec8fd03b253 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 9 Dec 2024 07:30:42 -0500 Subject: [PATCH 101/159] Touch up recipes, use silver for top load of tower, and use the new tesseract materials system --- .../polished_silver_machine_casing.json | 7 ++ .../polished_stainless_steel_casing.json | 7 -- .../lang/en_us.json | 4 +- .../block/polished_silver_machine_casing.json | 6 ++ .../polished_stainless_steel_casing.json | 6 -- .../item/polished_silver_machine_casing.json | 3 + .../item/polished_stainless_steel_casing.json | 3 - .../models/item/silver_curved_plate.json | 6 ++ .../models/item/silver_tesla_top_load.json | 6 ++ ...on => polished_silver_machine_casing.json} | 4 +- .../polished_stainless_steel_casing.json | 21 ---- .../recipe/craft/polished_machine_casing.json | 21 ++++ .../recipe/machines/tesla_coil/assembler.json | 33 ++++++ .../recipe/machines/tesla_coil/craft.json | 30 ++++++ .../tesla_coil/craft/from_tesla_receiver.json | 13 +++ .../machines/tesla_receiver/assembler.json | 33 ++++++ .../recipe/machines/tesla_receiver/craft.json | 30 ++++++ .../tesla_receiver/craft/from_tesla_coil.json | 13 +++ .../machines/tesla_tower/assembler.json | 29 ++++++ .../recipe/machines/tesla_tower/craft.json | 27 +++++ .../aluminum/assembler/tesla_winding.json} | 0 .../assembler/tesla_winding.json} | 0 .../copper/assembler/tesla_winding.json} | 0 .../electrum/assembler/tesla_winding.json} | 0 .../assembler/polished_machine_casing.json} | 6 +- .../silver/bending_machine/curved_plate.json | 17 ++++ .../silver/compressor/curved_plate.json | 17 ++++ .../silver/macerator/curved_plate.json | 17 ++++ .../silver/packer/tesla_top_load.json | 17 ++++ .../assembler/tesla_winding.json} | 0 .../tool/assembler/tesla_calibrator.json | 33 ++++++ .../assembler/tesla_handheld_receiver.json | 33 ++++++ .../recipe/tool/craft/tesla_calibrator.json | 30 ++++++ .../tool/craft/tesla_handheld_receiver.json | 30 ++++++ .../tesla_interdimensional_upgrade.json | 31 ++++++ .../tags/block/mineable/pickaxe.json | 2 +- .../tags/block/needs_stone_tool.json | 2 +- .../swedz/extended_industrialization/EI.java | 2 + .../extended_industrialization/EIBlocks.java | 9 +- .../extended_industrialization/EIItems.java | 34 +++---- .../server/DatagenDelegatorServer.java | 2 + .../datamaps/DataMapDatagenProvider.java | 17 ++-- .../CommonRecipesServerDatagenProvider.java | 68 +++++++------ ...chineItemRecipesServerDatagenProvider.java | 82 +++++++++++++-- .../MaterialRecipesServerDatagenProvider.java | 24 +++++ .../teslatower/TeslaTowerShapes.java | 3 +- .../material/EIMaterialRegistry.java | 70 +++++++++++++ .../material/EIMaterials.java | 95 ++++++++++++++++++ .../block/polished_silver_machine_casing.png | Bin 0 -> 562 bytes .../block/polished_stainless_steel_casing.png | Bin 995 -> 0 bytes .../textures/item/silver_curved_plate.png | Bin 0 -> 563 bytes .../textures/item/silver_tesla_top_load.png | Bin 0 -> 562 bytes .../materialsets/common/tesla_top_load.png | Bin 0 -> 968 bytes 53 files changed, 825 insertions(+), 118 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/polished_silver_machine_casing.json delete mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/polished_silver_machine_casing.json delete mode 100644 src/generated/resources/assets/extended_industrialization/models/block/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/polished_silver_machine_casing.json delete mode 100644 src/generated/resources/assets/extended_industrialization/models/item/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/silver_curved_plate.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/silver_tesla_top_load.json rename src/generated/resources/data/extended_industrialization/loot_table/blocks/{polished_stainless_steel_casing.json => polished_silver_machine_casing.json} (77%) delete mode 100644 src/generated/resources/data/extended_industrialization/recipe/casing/craft/polished_stainless_steel_casing.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/craft/polished_machine_casing.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/craft.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/craft/from_tesla_receiver.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/craft.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/craft/from_tesla_coil.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/tesla_tower/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/tesla_tower/craft.json rename src/generated/resources/data/extended_industrialization/recipe/{tesla_winding/aluminum.json => materials/aluminum/assembler/tesla_winding.json} (100%) rename src/generated/resources/data/extended_industrialization/recipe/{tesla_winding/annealed_copper.json => materials/annealed_copper/assembler/tesla_winding.json} (100%) rename src/generated/resources/data/extended_industrialization/recipe/{tesla_winding/copper.json => materials/copper/assembler/tesla_winding.json} (100%) rename src/generated/resources/data/extended_industrialization/recipe/{tesla_winding/electrum.json => materials/electrum/assembler/tesla_winding.json} (100%) rename src/generated/resources/data/extended_industrialization/recipe/{casing/assembler/polished_stainless_steel_casing.json => materials/silver/assembler/polished_machine_casing.json} (54%) create mode 100644 src/generated/resources/data/extended_industrialization/recipe/materials/silver/bending_machine/curved_plate.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/materials/silver/compressor/curved_plate.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/materials/silver/macerator/curved_plate.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/materials/silver/packer/tesla_top_load.json rename src/generated/resources/data/extended_industrialization/recipe/{tesla_winding/superconductor.json => materials/superconductor/assembler/tesla_winding.json} (100%) create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_calibrator.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_handheld_receiver.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_calibrator.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_handheld_receiver.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/upgrade/tesla_interdimensional_upgrade.json create mode 100644 src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MaterialRecipesServerDatagenProvider.java create mode 100644 src/main/java/net/swedz/extended_industrialization/material/EIMaterialRegistry.java create mode 100644 src/main/java/net/swedz/extended_industrialization/material/EIMaterials.java create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/polished_silver_machine_casing.png delete mode 100644 src/main/resources/assets/extended_industrialization/textures/block/polished_stainless_steel_casing.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/item/silver_curved_plate.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/item/silver_tesla_top_load.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/materialsets/common/tesla_top_load.png diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/polished_silver_machine_casing.json b/src/generated/resources/assets/extended_industrialization/blockstates/polished_silver_machine_casing.json new file mode 100644 index 00000000..39650849 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/polished_silver_machine_casing.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/polished_silver_machine_casing" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/polished_stainless_steel_casing.json b/src/generated/resources/assets/extended_industrialization/blockstates/polished_stainless_steel_casing.json deleted file mode 100644 index a423bcc8..00000000 --- a/src/generated/resources/assets/extended_industrialization/blockstates/polished_stainless_steel_casing.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "extended_industrialization:block/polished_stainless_steel_casing" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index d26651b6..fd9e89ee 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -32,7 +32,7 @@ "block.extended_industrialization.mv_solar_panel": "MV Solar Panel", "block.extended_industrialization.npk_fertilizer": "NPK Fertilizer", "block.extended_industrialization.phosphoric_acid": "Phosphoric Acid", - "block.extended_industrialization.polished_stainless_steel_casing": "Polished Stainless Steel Casing", + "block.extended_industrialization.polished_silver_machine_casing": "Polished Silver Machine Casing", "block.extended_industrialization.potassium_chloride": "Potassium Chloride", "block.extended_industrialization.potassium_hydroxide": "Potassium Hydroxide", "block.extended_industrialization.processing_array": "Processing Array", @@ -77,6 +77,8 @@ "item.extended_industrialization.phosphoric_acid_bucket": "Phosphoric Acid Bucket", "item.extended_industrialization.potassium_chloride_bucket": "Potassium Chloride Bucket", "item.extended_industrialization.potassium_hydroxide_bucket": "Potassium Hydroxide Bucket", + "item.extended_industrialization.silver_curved_plate": "Silver Curved Plate", + "item.extended_industrialization.silver_tesla_top_load": "Silver Tesla Top Load", "item.extended_industrialization.steam_chainsaw": "Steam Chainsaw", "item.extended_industrialization.steel_combine": "Steel Combine", "item.extended_industrialization.tesla_calibrator": "Tesla Calibrator", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/polished_silver_machine_casing.json b/src/generated/resources/assets/extended_industrialization/models/block/polished_silver_machine_casing.json new file mode 100644 index 00000000..7bbdcedd --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/polished_silver_machine_casing.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "extended_industrialization:block/polished_silver_machine_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/polished_stainless_steel_casing.json b/src/generated/resources/assets/extended_industrialization/models/block/polished_stainless_steel_casing.json deleted file mode 100644 index e6ec98a8..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/block/polished_stainless_steel_casing.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "extended_industrialization:block/polished_stainless_steel_casing" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/polished_silver_machine_casing.json b/src/generated/resources/assets/extended_industrialization/models/item/polished_silver_machine_casing.json new file mode 100644 index 00000000..3d1114df --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/polished_silver_machine_casing.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/polished_silver_machine_casing" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/polished_stainless_steel_casing.json b/src/generated/resources/assets/extended_industrialization/models/item/polished_stainless_steel_casing.json deleted file mode 100644 index de4b1f4a..00000000 --- a/src/generated/resources/assets/extended_industrialization/models/item/polished_stainless_steel_casing.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "extended_industrialization:block/polished_stainless_steel_casing" -} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/silver_curved_plate.json b/src/generated/resources/assets/extended_industrialization/models/item/silver_curved_plate.json new file mode 100644 index 00000000..819112a6 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/silver_curved_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "extended_industrialization:item/silver_curved_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/silver_tesla_top_load.json b/src/generated/resources/assets/extended_industrialization/models/item/silver_tesla_top_load.json new file mode 100644 index 00000000..c803ee24 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/silver_tesla_top_load.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "extended_industrialization:item/silver_tesla_top_load" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_stainless_steel_casing.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_silver_machine_casing.json similarity index 77% rename from src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_stainless_steel_casing.json rename to src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_silver_machine_casing.json index bcf717ac..2257d804 100644 --- a/src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_stainless_steel_casing.json +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/polished_silver_machine_casing.json @@ -11,11 +11,11 @@ "entries": [ { "type": "minecraft:item", - "name": "extended_industrialization:polished_stainless_steel_casing" + "name": "extended_industrialization:polished_silver_machine_casing" } ], "rolls": 1.0 } ], - "random_sequence": "extended_industrialization:blocks/polished_stainless_steel_casing" + "random_sequence": "extended_industrialization:blocks/polished_silver_machine_casing" } \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/casing/craft/polished_stainless_steel_casing.json b/src/generated/resources/data/extended_industrialization/recipe/casing/craft/polished_stainless_steel_casing.json deleted file mode 100644 index 135d3026..00000000 --- a/src/generated/resources/data/extended_industrialization/recipe/casing/craft/polished_stainless_steel_casing.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "modern_industrialization:stainless_steel_curved_plate" - }, - "P": { - "tag": "c:plates/stainless_steel" - } - }, - "pattern": [ - "CPC", - "CPC", - "CPC" - ], - "result": { - "count": 1, - "id": "extended_industrialization:polished_stainless_steel_casing" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/craft/polished_machine_casing.json b/src/generated/resources/data/extended_industrialization/recipe/craft/polished_machine_casing.json new file mode 100644 index 00000000..74454c70 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/craft/polished_machine_casing.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "c": { + "item": "extended_industrialization:silver_curved_plate" + }, + "p": { + "tag": "c:plates/silver" + } + }, + "pattern": [ + "cpc", + "cpc", + "cpc" + ], + "result": { + "count": 1, + "id": "extended_industrialization:polished_silver_machine_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/assembler.json new file mode 100644 index 00000000..31e4b144 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/assembler.json @@ -0,0 +1,33 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 2, + "item": "modern_industrialization:silicon_battery" + }, + { + "amount": 1, + "item": "modern_industrialization:electrum_cable" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + }, + { + "amount": 1, + "item": "modern_industrialization:advanced_machine_hull" + }, + { + "amount": 1, + "item": "extended_industrialization:silver_tesla_top_load" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:tesla_coil" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/craft.json new file mode 100644 index 00000000..c0da1569 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/craft.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "modern_industrialization:silicon_battery" + }, + "C": { + "item": "modern_industrialization:electrum_cable" + }, + "E": { + "item": "modern_industrialization:electronic_circuit" + }, + "H": { + "item": "modern_industrialization:advanced_machine_hull" + }, + "L": { + "item": "extended_industrialization:silver_tesla_top_load" + } + }, + "pattern": [ + " L ", + "EHE", + "BCB" + ], + "result": { + "count": 1, + "id": "extended_industrialization:tesla_coil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/craft/from_tesla_receiver.json b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/craft/from_tesla_receiver.json new file mode 100644 index 00000000..ebbc2cc1 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_coil/craft/from_tesla_receiver.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "extended_industrialization:tesla_receiver" + } + ], + "result": { + "count": 1, + "id": "extended_industrialization:tesla_coil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/assembler.json new file mode 100644 index 00000000..63b69a2f --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/assembler.json @@ -0,0 +1,33 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 2, + "item": "modern_industrialization:silicon_battery" + }, + { + "amount": 1, + "item": "modern_industrialization:electrum_cable" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + }, + { + "amount": 1, + "item": "modern_industrialization:advanced_machine_hull" + }, + { + "amount": 1, + "item": "extended_industrialization:silver_tesla_top_load" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:tesla_receiver" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/craft.json new file mode 100644 index 00000000..17a922b6 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/craft.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "modern_industrialization:silicon_battery" + }, + "C": { + "item": "modern_industrialization:electrum_cable" + }, + "E": { + "item": "modern_industrialization:electronic_circuit" + }, + "H": { + "item": "modern_industrialization:advanced_machine_hull" + }, + "L": { + "item": "extended_industrialization:silver_tesla_top_load" + } + }, + "pattern": [ + " L ", + "BHB", + "ECE" + ], + "result": { + "count": 1, + "id": "extended_industrialization:tesla_receiver" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/craft/from_tesla_coil.json b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/craft/from_tesla_coil.json new file mode 100644 index 00000000..3c0afd78 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_receiver/craft/from_tesla_coil.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "extended_industrialization:tesla_coil" + } + ], + "result": { + "count": 1, + "id": "extended_industrialization:tesla_receiver" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_tower/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_tower/assembler.json new file mode 100644 index 00000000..d4b0b60d --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_tower/assembler.json @@ -0,0 +1,29 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 4, + "item": "modern_industrialization:aluminum_cable" + }, + { + "amount": 2, + "item": "modern_industrialization:clean_stainless_steel_machine_casing" + }, + { + "amount": 2, + "item": "modern_industrialization:digital_circuit" + }, + { + "amount": 1, + "item": "modern_industrialization:turbo_machine_hull" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:tesla_tower" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_tower/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_tower/craft.json new file mode 100644 index 00000000..c0e4170c --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/tesla_tower/craft.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "modern_industrialization:aluminum_cable" + }, + "C": { + "item": "modern_industrialization:clean_stainless_steel_machine_casing" + }, + "D": { + "item": "modern_industrialization:digital_circuit" + }, + "H": { + "item": "modern_industrialization:turbo_machine_hull" + } + }, + "pattern": [ + "ACA", + "DHD", + "ACA" + ], + "result": { + "count": 1, + "id": "extended_industrialization:tesla_tower" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/aluminum.json b/src/generated/resources/data/extended_industrialization/recipe/materials/aluminum/assembler/tesla_winding.json similarity index 100% rename from src/generated/resources/data/extended_industrialization/recipe/tesla_winding/aluminum.json rename to src/generated/resources/data/extended_industrialization/recipe/materials/aluminum/assembler/tesla_winding.json diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/annealed_copper.json b/src/generated/resources/data/extended_industrialization/recipe/materials/annealed_copper/assembler/tesla_winding.json similarity index 100% rename from src/generated/resources/data/extended_industrialization/recipe/tesla_winding/annealed_copper.json rename to src/generated/resources/data/extended_industrialization/recipe/materials/annealed_copper/assembler/tesla_winding.json diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/copper.json b/src/generated/resources/data/extended_industrialization/recipe/materials/copper/assembler/tesla_winding.json similarity index 100% rename from src/generated/resources/data/extended_industrialization/recipe/tesla_winding/copper.json rename to src/generated/resources/data/extended_industrialization/recipe/materials/copper/assembler/tesla_winding.json diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/electrum.json b/src/generated/resources/data/extended_industrialization/recipe/materials/electrum/assembler/tesla_winding.json similarity index 100% rename from src/generated/resources/data/extended_industrialization/recipe/tesla_winding/electrum.json rename to src/generated/resources/data/extended_industrialization/recipe/materials/electrum/assembler/tesla_winding.json diff --git a/src/generated/resources/data/extended_industrialization/recipe/casing/assembler/polished_stainless_steel_casing.json b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/assembler/polished_machine_casing.json similarity index 54% rename from src/generated/resources/data/extended_industrialization/recipe/casing/assembler/polished_stainless_steel_casing.json rename to src/generated/resources/data/extended_industrialization/recipe/materials/silver/assembler/polished_machine_casing.json index bc2bca9b..b2c61e07 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/casing/assembler/polished_stainless_steel_casing.json +++ b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/assembler/polished_machine_casing.json @@ -5,17 +5,17 @@ "item_inputs": [ { "amount": 3, - "tag": "c:plates/stainless_steel" + "tag": "c:plates/silver" }, { "amount": 6, - "item": "modern_industrialization:stainless_steel_curved_plate" + "item": "extended_industrialization:silver_curved_plate" } ], "item_outputs": [ { "amount": 1, - "item": "extended_industrialization:polished_stainless_steel_casing" + "item": "extended_industrialization:polished_silver_machine_casing" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/materials/silver/bending_machine/curved_plate.json b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/bending_machine/curved_plate.json new file mode 100644 index 00000000..4ccb8225 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/bending_machine/curved_plate.json @@ -0,0 +1,17 @@ +{ + "type": "extended_industrialization:bending_machine", + "duration": 50, + "eu": 2, + "item_inputs": [ + { + "amount": 1, + "tag": "c:plates/silver" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:silver_curved_plate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/materials/silver/compressor/curved_plate.json b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/compressor/curved_plate.json new file mode 100644 index 00000000..1249154e --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/compressor/curved_plate.json @@ -0,0 +1,17 @@ +{ + "type": "modern_industrialization:compressor", + "duration": 100, + "eu": 2, + "item_inputs": [ + { + "amount": 1, + "tag": "c:plates/silver" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:silver_curved_plate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/materials/silver/macerator/curved_plate.json b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/macerator/curved_plate.json new file mode 100644 index 00000000..dc08fe09 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/macerator/curved_plate.json @@ -0,0 +1,17 @@ +{ + "type": "modern_industrialization:macerator", + "duration": 100, + "eu": 2, + "item_inputs": [ + { + "amount": 1, + "item": "extended_industrialization:silver_curved_plate" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "modern_industrialization:silver_dust" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/materials/silver/packer/tesla_top_load.json b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/packer/tesla_top_load.json new file mode 100644 index 00000000..3e5ac5d3 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/materials/silver/packer/tesla_top_load.json @@ -0,0 +1,17 @@ +{ + "type": "modern_industrialization:packer", + "duration": 100, + "eu": 8, + "item_inputs": [ + { + "amount": 8, + "item": "extended_industrialization:silver_curved_plate" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:silver_tesla_top_load" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tesla_winding/superconductor.json b/src/generated/resources/data/extended_industrialization/recipe/materials/superconductor/assembler/tesla_winding.json similarity index 100% rename from src/generated/resources/data/extended_industrialization/recipe/tesla_winding/superconductor.json rename to src/generated/resources/data/extended_industrialization/recipe/materials/superconductor/assembler/tesla_winding.json diff --git a/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_calibrator.json b/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_calibrator.json new file mode 100644 index 00000000..9204c9fc --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_calibrator.json @@ -0,0 +1,33 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 1, + "item": "extended_industrialization:silver_tesla_top_load" + }, + { + "amount": 1, + "item": "modern_industrialization:electronic_circuit" + }, + { + "amount": 2, + "item": "modern_industrialization:transistor" + }, + { + "amount": 2, + "item": "modern_industrialization:diode" + }, + { + "amount": 1, + "tag": "c:glass_panes" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:tesla_calibrator" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_handheld_receiver.json b/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_handheld_receiver.json new file mode 100644 index 00000000..5355565b --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_handheld_receiver.json @@ -0,0 +1,33 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 1, + "item": "extended_industrialization:silver_tesla_top_load" + }, + { + "amount": 1, + "item": "modern_industrialization:electronic_circuit" + }, + { + "amount": 2, + "item": "modern_industrialization:transistor" + }, + { + "amount": 2, + "item": "modern_industrialization:diode" + }, + { + "amount": 1, + "item": "extended_industrialization:annealed_copper_tesla_winding" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:tesla_handheld_receiver" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_calibrator.json b/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_calibrator.json new file mode 100644 index 00000000..4a2dd4ff --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_calibrator.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "modern_industrialization:electronic_circuit" + }, + "D": { + "item": "modern_industrialization:diode" + }, + "G": { + "tag": "c:glass_panes" + }, + "S": { + "item": "extended_industrialization:silver_tesla_top_load" + }, + "T": { + "item": "modern_industrialization:transistor" + } + }, + "pattern": [ + " S ", + "TGT", + "DCD" + ], + "result": { + "count": 1, + "id": "extended_industrialization:tesla_calibrator" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_handheld_receiver.json b/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_handheld_receiver.json new file mode 100644 index 00000000..f79a2013 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_handheld_receiver.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "modern_industrialization:electronic_circuit" + }, + "D": { + "item": "modern_industrialization:diode" + }, + "S": { + "item": "extended_industrialization:silver_tesla_top_load" + }, + "T": { + "item": "modern_industrialization:transistor" + }, + "W": { + "item": "extended_industrialization:annealed_copper_tesla_winding" + } + }, + "pattern": [ + "S ", + "WTT", + "CDD" + ], + "result": { + "count": 1, + "id": "extended_industrialization:tesla_handheld_receiver" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/upgrade/tesla_interdimensional_upgrade.json b/src/generated/resources/data/extended_industrialization/recipe/upgrade/tesla_interdimensional_upgrade.json new file mode 100644 index 00000000..4300f4d3 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/upgrade/tesla_interdimensional_upgrade.json @@ -0,0 +1,31 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 1200, + "eu": 32, + "fluid_inputs": [ + { + "amount": 1000, + "fluid": "modern_industrialization:polyvinyl_chloride" + } + ], + "item_inputs": [ + { + "amount": 8, + "item": "extended_industrialization:superconductor_tesla_winding" + }, + { + "amount": 4, + "item": "modern_industrialization:highly_advanced_upgrade" + }, + { + "amount": 1, + "item": "modern_industrialization:processing_unit" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:tesla_interdimensional_upgrade" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 926f1cc4..e84769a5 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -26,7 +26,7 @@ "extended_industrialization:machine_chainer", "extended_industrialization:machine_chainer_relay", "extended_industrialization:mv_solar_panel", - "extended_industrialization:polished_stainless_steel_casing", + "extended_industrialization:polished_silver_machine_casing", "extended_industrialization:processing_array", "extended_industrialization:steam_farmer", "extended_industrialization:steel_alloy_smelter", diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index 926f1cc4..e84769a5 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -26,7 +26,7 @@ "extended_industrialization:machine_chainer", "extended_industrialization:machine_chainer_relay", "extended_industrialization:mv_solar_panel", - "extended_industrialization:polished_stainless_steel_casing", + "extended_industrialization:polished_silver_machine_casing", "extended_industrialization:processing_array", "extended_industrialization:steam_farmer", "extended_industrialization:steel_alloy_smelter", diff --git a/src/main/java/net/swedz/extended_industrialization/EI.java b/src/main/java/net/swedz/extended_industrialization/EI.java index 4e4d414b..6e90b659 100644 --- a/src/main/java/net/swedz/extended_industrialization/EI.java +++ b/src/main/java/net/swedz/extended_industrialization/EI.java @@ -18,6 +18,7 @@ import net.swedz.extended_industrialization.machines.blockentity.multiblock.LargeElectricFurnaceBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; import net.swedz.extended_industrialization.machines.guicomponent.EIModularSlotPanelSlots; +import net.swedz.extended_industrialization.material.EIMaterialRegistry; import net.swedz.extended_industrialization.network.EIPackets; import net.swedz.tesseract.neoforge.api.MCIdentifiable; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; @@ -65,6 +66,7 @@ public EI(IEventBus bus, ModContainer container) EIItems.init(bus); EIBlocks.init(bus); EIFluids.init(bus); + EIMaterialRegistry.init(); EIOtherRegistries.init(bus); EIModularSlotPanelSlots.init(); diff --git a/src/main/java/net/swedz/extended_industrialization/EIBlocks.java b/src/main/java/net/swedz/extended_industrialization/EIBlocks.java index 0e4b7e14..6b29cad9 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIBlocks.java +++ b/src/main/java/net/swedz/extended_industrialization/EIBlocks.java @@ -48,14 +48,7 @@ public static void init(IEventBus bus) public static final BlockHolder MACHINE_CHAINER_RELAY = create("machine_chainer_relay", "Machine Chainer Relay", Block::new, BlockItem::new, EISortOrder.MACHINES).withProperties((p) -> p.mapColor(MapColor.METAL).destroyTime(4f).requiresCorrectToolForDrops()).tag(TagHelper.getMiningLevelTag(1)).tag(EITags.Blocks.MACHINE_CHAINER_RELAY).withLootTable(CommonLootTableBuilders::self).withModel(CommonModelBuilders::blockstateOnly).register(); - public static final BlockHolder STEEL_PLATED_BRICKS = createSimple("steel_plated_bricks", "Steel Plated Bricks", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockCubeAll).register(); - public static final BlockHolder POLISHED_STAINLESS_STEEL_CASING = createSimple("polished_stainless_steel_casing", "Polished Stainless Steel Casing", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockCubeAll).register(); - - public static final BlockHolder COPPER_TESLA_WINDING = createSimple("copper_tesla_winding", "Copper Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); - public static final BlockHolder ELECTRUM_TESLA_WINDING = createSimple("electrum_tesla_winding", "Electrum Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); - public static final BlockHolder ALUMINUM_TESLA_WINDING = createSimple("aluminum_tesla_winding", "Aluminum Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); - public static final BlockHolder ANNEALED_COPPER_TESLA_WINDING = createSimple("annealed_copper_tesla_winding", "Annealed Copper Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); - public static final BlockHolder SUPERCONDUCTOR_TESLA_WINDING = createSimple("superconductor_tesla_winding", "Superconductor Tesla Winding", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockTopEnd).register(); + public static final BlockHolder STEEL_PLATED_BRICKS = createSimple("steel_plated_bricks", "Steel Plated Bricks", EISortOrder.CASINGS, MapColor.METAL, 5f, 6f).withModel(CommonModelBuilders::blockCubeAll).register(); public static Set values() { diff --git a/src/main/java/net/swedz/extended_industrialization/EIItems.java b/src/main/java/net/swedz/extended_industrialization/EIItems.java index b544d59c..7eefd9ab 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIItems.java +++ b/src/main/java/net/swedz/extended_industrialization/EIItems.java @@ -56,32 +56,32 @@ public static void init(IEventBus bus) Registry.init(bus); } - public static final ItemHolder STEAM_CHAINSAW = create("steam_chainsaw", "Steam Chainsaw", SteamChainsawItem::new, EISortOrder.GEAR).tag(ItemTags.AXES, ItemTags.HOES, ItemTags.SWORDS, Tags.Items.TOOLS_SHEAR).withModel(CommonModelBuilders::handheld).register(); - public static final ItemHolder ELECTRIC_CHAINSAW = create("electric_chainsaw", "Electric Chainsaw", (p) -> new ElectricToolItem(p, ElectricToolItem.Type.CHAINSAW), EISortOrder.GEAR).tag(ItemTags.AXES, ItemTags.HOES, ItemTags.SWORDS, Tags.Items.TOOLS_SHEAR).withCapabilities(MICommonCapabitilies::simpleEnergyItem).withModel(CommonModelBuilders::handheld).register(); - public static final ItemHolder ELECTRIC_MINING_DRILL = create("electric_mining_drill", "Electric Mining Drill", (p) -> new ElectricToolItem(p, ElectricToolItem.Type.DRILL), EISortOrder.GEAR).tag(ItemTags.PICKAXES, ItemTags.SHOVELS).withCapabilities(MICommonCapabitilies::simpleEnergyItem).withModel(CommonModelBuilders::handheld).register(); - public static final ItemHolder ULTIMATE_LASER_DRILL = create("ultimate_laser_drill", "Ultimate Laser Drill", (p) -> new ElectricToolItem(p, ElectricToolItem.Type.ULTIMATE), EISortOrder.GEAR).tag(ItemTags.DYEABLE, EITags.Items.RAINBOW_DYEABLE, ItemTags.PICKAXES, ItemTags.SHOVELS, ItemTags.AXES, ItemTags.HOES, ItemTags.SWORDS, Tags.Items.TOOLS_SHEAR).withRegistrationListener(CommonRegistrations::cauldronClearDye).withRegistrationListener(RainbowDataComponent::cauldronClearDyeAndRainbow).withCapabilities(MICommonCapabitilies::simpleEnergyItem).withModel(CommonModelBuilders::handheldOverlayed).register(); + public static final ItemHolder STEAM_CHAINSAW = create("steam_chainsaw", "Steam Chainsaw", SteamChainsawItem::new, EISortOrder.GEAR).tag(ItemTags.AXES, ItemTags.HOES, ItemTags.SWORDS, Tags.Items.TOOLS_SHEAR).withModelBuilder(CommonModelBuilders::handheld).register(); + public static final ItemHolder ELECTRIC_CHAINSAW = create("electric_chainsaw", "Electric Chainsaw", (p) -> new ElectricToolItem(p, ElectricToolItem.Type.CHAINSAW), EISortOrder.GEAR).tag(ItemTags.AXES, ItemTags.HOES, ItemTags.SWORDS, Tags.Items.TOOLS_SHEAR).withCapabilities(MICommonCapabitilies::simpleEnergyItem).withModelBuilder(CommonModelBuilders::handheld).register(); + public static final ItemHolder ELECTRIC_MINING_DRILL = create("electric_mining_drill", "Electric Mining Drill", (p) -> new ElectricToolItem(p, ElectricToolItem.Type.DRILL), EISortOrder.GEAR).tag(ItemTags.PICKAXES, ItemTags.SHOVELS).withCapabilities(MICommonCapabitilies::simpleEnergyItem).withModelBuilder(CommonModelBuilders::handheld).register(); + public static final ItemHolder ULTIMATE_LASER_DRILL = create("ultimate_laser_drill", "Ultimate Laser Drill", (p) -> new ElectricToolItem(p, ElectricToolItem.Type.ULTIMATE), EISortOrder.GEAR).tag(ItemTags.DYEABLE, EITags.Items.RAINBOW_DYEABLE, ItemTags.PICKAXES, ItemTags.SHOVELS, ItemTags.AXES, ItemTags.HOES, ItemTags.SWORDS, Tags.Items.TOOLS_SHEAR).withRegistrationListener(CommonRegistrations::cauldronClearDye).withRegistrationListener(RainbowDataComponent::cauldronClearDyeAndRainbow).withCapabilities(MICommonCapabitilies::simpleEnergyItem).withModelBuilder(CommonModelBuilders::handheldOverlayed).register(); public static final ItemHolder NANO_HELMET = createNanosuitArmor("nano_helmet", "Nano Helmet", ArmorItem.Type.HELMET, NanoSuitAbility.NIGHT_VISION); public static final ItemHolder NANO_CHESTPLATE = createNanosuitArmor("nano_chestplate", "Nano Chestplate", ArmorItem.Type.CHESTPLATE); public static final ItemHolder NANO_GRAVICHESTPLATE = createNanosuitArmor("nano_gravichestplate", "Nano Gravichestplate", ArmorItem.Type.CHESTPLATE, EIArmorMaterials.NANO_GRAVICHESTPLATE, NanoSuitAbility.GRAVICHESTPLATE); public static final ItemHolder NANO_LEGGINGS = createNanosuitArmor("nano_leggings", "Nano Leggings", ArmorItem.Type.LEGGINGS, NanoSuitAbility.SPEED); public static final ItemHolder NANO_BOOTS = createNanosuitArmor("nano_boots", "Nano Boots", ArmorItem.Type.BOOTS); - public static final ItemHolder TIN_CAN = create("tin_can", "Tin Can", Item::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder CANNED_FOOD = create("canned_food", "Canned Food", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().usingConvertsTo(TIN_CAN).build())).tag(ItemTags.WOLF_FOOD, ItemTags.CAT_FOOD).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TIN_CAN = create("tin_can", "Tin Can", Item::new, EISortOrder.OTHER_GEAR).withModelBuilder(CommonModelBuilders::generated).register(); + public static final ItemHolder CANNED_FOOD = create("canned_food", "Canned Food", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().usingConvertsTo(TIN_CAN).build())).tag(ItemTags.WOLF_FOOD, ItemTags.CAT_FOOD).withModelBuilder(CommonModelBuilders::generated).register(); - public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModel(CommonModelBuilders::generated).withRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); + public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModelBuilder(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModelBuilder(CommonModelBuilders::generated).withRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); public static final ItemHolder TESLA_HANDHELD_RECEIVER = create("tesla_handheld_receiver", "Tesla Handheld Receiver", TeslaHandheldReceiverItem::new, EISortOrder.OTHER_GEAR).withRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); - public static final ItemHolder TESLA_INTERDIMENSIONAL_UPGRADE = create("tesla_interdimensional_upgrade", "Tesla Interdimensional Upgrade", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.stacksTo(1).rarity(Rarity.EPIC)).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder TESLA_INTERDIMENSIONAL_UPGRADE = create("tesla_interdimensional_upgrade", "Tesla Interdimensional Upgrade", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.stacksTo(1).rarity(Rarity.EPIC)).withModelBuilder(CommonModelBuilders::generated).register(); - public static final ItemHolder NETHERITE_ROTARY_BLADE = create("netherite_rotary_blade", "Netherite Rotary Blade", Item::new, EISortOrder.PARTS).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder STEEL_COMBINE = create("steel_combine", "Steel Combine", Item::new, EISortOrder.PARTS).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder NETHERITE_ROTARY_BLADE = create("netherite_rotary_blade", "Netherite Rotary Blade", Item::new, EISortOrder.PARTS).withModelBuilder(CommonModelBuilders::generated).register(); + public static final ItemHolder STEEL_COMBINE = create("steel_combine", "Steel Combine", Item::new, EISortOrder.PARTS).withModelBuilder(CommonModelBuilders::generated).register(); - public static final ItemHolder MULCH = create("mulch", "Mulch", Item::new, EISortOrder.RESOURCES).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().build())).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder NETHERITE_DUST = create("netherite_dust", "Netherite Dust", Item::new, EISortOrder.RESOURCES).tag(EITags.itemCommon("dusts"), EITags.itemCommon("dusts/netherite")).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder CRYSTALLIZED_HONEY = create("crystallized_honey", "Crystallized Honey", Item::new, EISortOrder.RESOURCES).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(3).saturationModifier(0.3f).fast().build())).withModel(CommonModelBuilders::generated).register(); - public static final ItemHolder GRANITE_DUST = create("granite_dust", "Granite Dust", Item::new, EISortOrder.RESOURCES).tag(EITags.itemCommon("dusts"), EITags.itemCommon("dusts/granite")).withModel(CommonModelBuilders::generated).register(); + public static final ItemHolder MULCH = create("mulch", "Mulch", Item::new, EISortOrder.RESOURCES).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().build())).withModelBuilder(CommonModelBuilders::generated).register(); + public static final ItemHolder NETHERITE_DUST = create("netherite_dust", "Netherite Dust", Item::new, EISortOrder.RESOURCES).tag(EITags.itemCommon("dusts"), EITags.itemCommon("dusts/netherite")).withModelBuilder(CommonModelBuilders::generated).register(); + public static final ItemHolder CRYSTALLIZED_HONEY = create("crystallized_honey", "Crystallized Honey", Item::new, EISortOrder.RESOURCES).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(3).saturationModifier(0.3f).fast().build())).withModelBuilder(CommonModelBuilders::generated).register(); + public static final ItemHolder GRANITE_DUST = create("granite_dust", "Granite Dust", Item::new, EISortOrder.RESOURCES).tag(EITags.itemCommon("dusts"), EITags.itemCommon("dusts/granite")).withModelBuilder(CommonModelBuilders::generated).register(); public static final ItemHolder LV_PHOTOVOLTAIC_CELL = createPhotovoltaicCell("lv", "LV", CableTier.LV, 16, 10 * 60 * 20); public static final ItemHolder MV_PHOTOVOLTAIC_CELL = createPhotovoltaicCell("mv", "MV", CableTier.MV, 64, 10 * 60 * 20); @@ -123,7 +123,7 @@ public static ItemHolder createNanosuitArmor(String id, Strin .withRegistrationListener(CommonRegistrations::cauldronClearDye) .withRegistrationListener(RainbowDataComponent::cauldronClearDyeAndRainbow) .withCapabilities(MICommonCapabitilies::simpleEnergyItem) - .withModel(CommonModelBuilders::generatedOverlayed) + .withModelBuilder(CommonModelBuilders::generatedOverlayed) .register(); } @@ -151,7 +151,7 @@ public static ItemHolder createPhotovoltaicCell(String id, { return create("%s_photovoltaic_cell".formatted(id), "%s Photovoltaic Cell".formatted(name), (p) -> new PhotovoltaicCellItem(p, tier, euPerTick, durationTicks), EISortOrder.PARTS) .tag(EITags.Items.PHOTOVOLTAIC_CELL) - .withModel(CommonModelBuilders::generated) + .withModelBuilder(CommonModelBuilders::generated) .register(); } diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/DatagenDelegatorServer.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/DatagenDelegatorServer.java index 3424aa86..f2467309 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/DatagenDelegatorServer.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/DatagenDelegatorServer.java @@ -14,6 +14,7 @@ import net.swedz.extended_industrialization.datagen.server.provider.recipes.CommonRecipesServerDatagenProvider; import net.swedz.extended_industrialization.datagen.server.provider.recipes.ComposterRecipesServerDatagenProvider; import net.swedz.extended_industrialization.datagen.server.provider.recipes.MachineItemRecipesServerDatagenProvider; +import net.swedz.extended_industrialization.datagen.server.provider.recipes.MaterialRecipesServerDatagenProvider; import net.swedz.extended_industrialization.datagen.server.provider.recipes.NPKProcessingRecipesServerDatagenProvider; import net.swedz.extended_industrialization.datagen.server.provider.recipes.VanillaCompatRecipesServerDatagenProvider; import net.swedz.extended_industrialization.datagen.server.provider.tags.BlockTagDatagenProvider; @@ -37,6 +38,7 @@ public static void configure(GatherDataEvent event) add(event, CommonRecipesServerDatagenProvider::new); add(event, ComposterRecipesServerDatagenProvider::new); add(event, MachineItemRecipesServerDatagenProvider::new); + add(event, MaterialRecipesServerDatagenProvider::new); add(event, NPKProcessingRecipesServerDatagenProvider::new); add(event, VanillaCompatRecipesServerDatagenProvider::new); diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java index d56436b4..cd29b814 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/datamaps/DataMapDatagenProvider.java @@ -8,14 +8,13 @@ import net.minecraft.world.level.block.Blocks; import net.neoforged.neoforge.common.data.DataMapProvider; import net.neoforged.neoforge.data.event.GatherDataEvent; -import net.swedz.extended_industrialization.EIBlocks; +import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIDataMaps; import net.swedz.extended_industrialization.EIFluids; import net.swedz.extended_industrialization.datamap.FarmerSimpleTallCropSize; import net.swedz.extended_industrialization.datamap.FertilizerPotency; import net.swedz.extended_industrialization.datamap.LargeElectricFurnaceTier; import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; -import net.swedz.tesseract.neoforge.registry.holder.BlockHolder; import net.swedz.tesseract.neoforge.registry.holder.FluidHolder; public final class DataMapDatagenProvider extends DataMapProvider @@ -38,11 +37,11 @@ protected void gather() this.addLargeElectricFurnaceTier(MI.id("cupronickel_coil"), 8, 0.75f); this.addLargeElectricFurnaceTier(MI.id("kanthal_coil"), 32, 0.75f); - this.addTeslaTowerTier(EIBlocks.COPPER_TESLA_WINDING, CableTier.LV.getMaxTransfer() * 6, 32, 64); - this.addTeslaTowerTier(EIBlocks.ELECTRUM_TESLA_WINDING, CableTier.MV.getMaxTransfer() * 6, 32 * 2, 64 * 4); - this.addTeslaTowerTier(EIBlocks.ALUMINUM_TESLA_WINDING, CableTier.HV.getMaxTransfer() * 6, 32 * 2 * 2, 64 * 4 * 4); - this.addTeslaTowerTier(EIBlocks.ANNEALED_COPPER_TESLA_WINDING, CableTier.EV.getMaxTransfer() * 6, 32 * 2 * 2 * 2, 64 * 4 * 4 * 4); - this.addTeslaTowerTier(EIBlocks.SUPERCONDUCTOR_TESLA_WINDING, CableTier.SUPERCONDUCTOR.getMaxTransfer() * 6, 32 * 2 * 2 * 2 * 2, 64 * 4 * 4 * 4 * 4); + this.addTeslaTowerTier(EI.id("copper_tesla_winding"), CableTier.LV.getMaxTransfer() * 6, 32, 64); + this.addTeslaTowerTier(EI.id("electrum_tesla_winding"), CableTier.MV.getMaxTransfer() * 6, 32 * 2, 64 * 4); + this.addTeslaTowerTier(EI.id("aluminum_tesla_winding"), CableTier.HV.getMaxTransfer() * 6, 32 * 2 * 2, 64 * 4 * 4); + this.addTeslaTowerTier(EI.id("annealed_copper_tesla_winding"), CableTier.EV.getMaxTransfer() * 6, 32 * 2 * 2 * 2, 64 * 4 * 4 * 4); + this.addTeslaTowerTier(EI.id("superconductor_tesla_winding"), CableTier.SUPERCONDUCTOR.getMaxTransfer() * 6, 32 * 2 * 2 * 2 * 2, 64 * 4 * 4 * 4 * 4); } private void addFarmerSimpleTallCropSize(ResourceLocation block, int maxHeight) @@ -65,9 +64,9 @@ private void addLargeElectricFurnaceTier(ResourceLocation block, int batchSize, this.builder(EIDataMaps.LARGE_ELECTRIC_FURNACE_TIER).add(block, new LargeElectricFurnaceTier(batchSize, euCostMultiplier), false); } - private void addTeslaTowerTier(BlockHolder block, long maxTransfer, int maxDistance, long drain) + private void addTeslaTowerTier(ResourceLocation block, long maxTransfer, int maxDistance, long drain) { - this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block.identifier().location(), new TeslaTowerTierData(maxTransfer, maxDistance, drain), false); + this.builder(EIDataMaps.TESLA_TOWER_TIER).add(block, new TeslaTowerTierData(maxTransfer, maxDistance, drain), false); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java index bcefa766..9652828b 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java @@ -17,6 +17,7 @@ import net.swedz.extended_industrialization.EIItems; import net.swedz.extended_industrialization.EITags; import net.swedz.extended_industrialization.datagen.api.recipe.ShapedRecipeBuilder; +import net.swedz.extended_industrialization.material.EIMaterials; import java.util.function.Consumer; @@ -246,28 +247,51 @@ private static void nanoSuit(RecipeOutput output) ); } - private static void teslaWinding(String name, RecipeOutput output) + private static void tesla(RecipeOutput output) { + addBasicCraftingRecipes( + "tool", "tesla_calibrator", true, + EIItems.TESLA_CALIBRATOR, 1, + (r) -> r + .define('S', "%s:silver_tesla_top_load".formatted(EI.ID)) + .define('T', MIItem.TRANSISTOR) + .define('G', EITags.itemCommon("glass_panes")) + .define('D', MIItem.DIODE) + .define('C', MIItem.ELECTRONIC_CIRCUIT) + .pattern(" S ") + .pattern("TGT") + .pattern("DCD"), + output + ); + + addBasicCraftingRecipes( + "tool", "tesla_handheld_receiver", true, + EIItems.TESLA_HANDHELD_RECEIVER, 1, + (r) -> r + .define('S', "%s:silver_tesla_top_load".formatted(EI.ID)) + .define('W', EIMaterials.ANNEALED_COPPER.get(EIMaterials.Parts.TESLA_WINDING)) + .define('T', MIItem.TRANSISTOR) + .define('D', MIItem.DIODE) + .define('C', MIItem.ELECTRONIC_CIRCUIT) + .pattern("S ") + .pattern("WTT") + .pattern("CDD"), + output + ); + addMachineRecipe( - "tesla_winding", name, MIMachineRecipeTypes.ASSEMBLER, - 8, 5 * 20, - (b) -> b - .addItemInput("modern_industrialization:%s_cable".formatted(name), 8) - .addItemInput(EITags.itemCommon("plates/stainless_steel"), 4) - .addItemOutput("extended_industrialization:%s_tesla_winding".formatted(name), 1), + "upgrade", "tesla_interdimensional_upgrade", MIMachineRecipeTypes.ASSEMBLER, + 32, 60 * 20, + (r) -> r + .addItemInput("%s:superconductor_tesla_winding".formatted(EI.ID), 8) + .addItemInput(MIItem.HIGHLY_ADVANCED_UPGRADE, 4) + .addItemInput(MIItem.PROCESSING_UNIT, 1) + .addFluidInput(MIFluids.POLYVINYL_CHLORIDE, 1000) + .addItemOutput(EIItems.TESLA_INTERDIMENSIONAL_UPGRADE, 1), output ); } - private static void tesla(RecipeOutput output) - { - teslaWinding("copper", output); - teslaWinding("electrum", output); - teslaWinding("aluminum", output); - teslaWinding("annealed_copper", output); - teslaWinding("superconductor", output); - } - @Override protected void buildRecipes(RecipeOutput output) { @@ -319,18 +343,6 @@ protected void buildRecipes(RecipeOutput output) output ); - addBasicCraftingRecipes( - "casing", "polished_stainless_steel_casing", true, - EIBlocks.POLISHED_STAINLESS_STEEL_CASING.get().asItem(), 1, - (r) -> r - .define('C', "modern_industrialization:stainless_steel_curved_plate") - .define('P', EITags.itemCommon("plates/stainless_steel")) - .pattern("CPC") - .pattern("CPC") - .pattern("CPC"), - output - ); - components(output); addMachineRecipe( diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java index 157f0667..d14f9857 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java @@ -9,6 +9,7 @@ import net.swedz.extended_industrialization.EITags; import net.swedz.extended_industrialization.datagen.api.recipe.ShapedRecipeBuilder; import net.swedz.extended_industrialization.datagen.api.recipe.ShapelessRecipeBuilder; +import net.swedz.extended_industrialization.material.EIMaterials; import java.util.function.Consumer; @@ -38,14 +39,14 @@ private static void addBasicCraftingMachineRecipes(String machineName, String ma { String recipeId = machineTier == null ? "" : "/%s".formatted(machineTier); - ShapedRecipeBuilder shapedRecipeBuilder = new ShapedRecipeBuilder(); - crafting.accept(shapedRecipeBuilder); - shapedRecipeBuilder.setOutput(machine(machineName, machineTier), 1); - shapedRecipeBuilder.offerTo(output, EI.id("machines/%s/craft%s".formatted(machineName, recipeId))); + ShapedRecipeBuilder builder = new ShapedRecipeBuilder(); + crafting.accept(builder); + builder.setOutput(machine(machineName, machineTier), 1); + builder.offerTo(output, EI.id("machines/%s/craft%s".formatted(machineName, recipeId))); if(assembler) { - shapedRecipeBuilder.exportToAssembler().offerTo(output, EI.id("machines/%s/assembler%s".formatted(machineName, recipeId))); + builder.exportToAssembler().offerTo(output, EI.id("machines/%s/assembler%s".formatted(machineName, recipeId))); } } @@ -81,15 +82,15 @@ private static void addElectricMachineRecipes(String machine, Consumer crafting, RecipeOutput output) @@ -98,6 +99,21 @@ private static void addBronzeAndSteelMachineRecipes(String machine, Consumer builder + .define('L', EIMaterials.SILVER.get(EIMaterials.Parts.TESLA_TOP_LOAD)) + .define('E', MIItem.ELECTRONIC_CIRCUIT) + .define('H', "modern_industrialization:advanced_machine_hull") + .define('B', "modern_industrialization:silicon_battery") + .define('C', "modern_industrialization:electrum_cable") + .pattern(" L ") + .pattern("EHE") + .pattern("BCB"), + true, + output + ); + addBasicCraftingMachineRecipes( + "tesla_receiver", + (builder) -> builder + .define('L', EIMaterials.SILVER.get(EIMaterials.Parts.TESLA_TOP_LOAD)) + .define('E', MIItem.ELECTRONIC_CIRCUIT) + .define('H', "modern_industrialization:advanced_machine_hull") + .define('B', "modern_industrialization:silicon_battery") + .define('C', "modern_industrialization:electrum_cable") + .pattern(" L ") + .pattern("BHB") + .pattern("ECE"), + true, + output + ); + addInterchangeableMachinesRecipes("tesla_coil", "tesla_receiver", output); + + addBasicCraftingMachineRecipes( + "tesla_tower", + (builder) -> builder + .define('A', "modern_industrialization:aluminum_cable") + .define('C', "modern_industrialization:clean_stainless_steel_machine_casing") + .define('D', MIItem.DIGITAL_CIRCUIT) + .define('H', "modern_industrialization:turbo_machine_hull") + .pattern("ACA") + .pattern("DHD") + .pattern("ACA"), + true, + output + ); + } + @Override protected void buildRecipes(RecipeOutput output) { @@ -583,5 +646,6 @@ protected void buildRecipes(RecipeOutput output) machineChainer(output); solarPanel(output); largeConfigurableChest(output); + tesla(output); } } diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MaterialRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MaterialRecipesServerDatagenProvider.java new file mode 100644 index 00000000..3c9267dc --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MaterialRecipesServerDatagenProvider.java @@ -0,0 +1,24 @@ +package net.swedz.extended_industrialization.datagen.server.provider.recipes; + +import net.minecraft.data.recipes.RecipeOutput; +import net.neoforged.neoforge.data.event.GatherDataEvent; +import net.swedz.extended_industrialization.material.EIMaterialRegistry; +import net.swedz.extended_industrialization.material.EIMaterials; +import net.swedz.tesseract.neoforge.material.Material; + +public final class MaterialRecipesServerDatagenProvider extends RecipesServerDatagenProvider +{ + public MaterialRecipesServerDatagenProvider(GatherDataEvent event) + { + super(event); + } + + @Override + protected void buildRecipes(RecipeOutput output) + { + for(Material material : EIMaterials.values()) + { + EIMaterialRegistry.get().createRecipesFor(material, output); + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index 4221ccf0..6ebed03f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -7,7 +7,6 @@ import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; import aztech.modern_industrialization.machines.multiblocks.SimpleMember; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.EIBlocks; import net.swedz.extended_industrialization.EIDataMaps; import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; import net.swedz.extended_industrialization.machines.tieredshapes.DataMapMultiblockTieredShapes; @@ -113,7 +112,7 @@ protected void buildShapeTemplates(ShapeTemplate[] shapeTemplates) ); builder.key('S', SimpleMember.forBlockId(MI.id("clean_stainless_steel_machine_casing")), new HatchFlags.Builder().with(HatchType.ENERGY_INPUT).build()); builder.key('P', SimpleMember.forBlockId(MI.id("stainless_steel_machine_casing_pipe")), HatchFlags.NO_HATCH); - builder.key('T', SimpleMember.forBlock(EIBlocks.POLISHED_STAINLESS_STEEL_CASING), HatchFlags.NO_HATCH); + builder.key('T', SimpleMember.forBlockId(EI.id("polished_silver_machine_casing")), HatchFlags.NO_HATCH); builder.key('W', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); builder.key('w', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); // TODO secondary winding? shapeTemplates[i] = builder.build(); diff --git a/src/main/java/net/swedz/extended_industrialization/material/EIMaterialRegistry.java b/src/main/java/net/swedz/extended_industrialization/material/EIMaterialRegistry.java new file mode 100644 index 00000000..26c5738e --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/material/EIMaterialRegistry.java @@ -0,0 +1,70 @@ +package net.swedz.extended_industrialization.material; + +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIBlocks; +import net.swedz.extended_industrialization.EIItems; +import net.swedz.tesseract.neoforge.material.MaterialRegistry; +import net.swedz.tesseract.neoforge.registry.holder.BlockHolder; +import net.swedz.tesseract.neoforge.registry.holder.ItemHolder; + +public final class EIMaterialRegistry extends MaterialRegistry +{ + private static final EIMaterialRegistry INSTANCE = new EIMaterialRegistry(); + + public static EIMaterialRegistry get() + { + return INSTANCE; + } + + public static void init() + { + EIMaterials.init(); + } + + private EIMaterialRegistry() + { + } + + @Override + public String modId() + { + return EI.ID; + } + + @Override + public DeferredRegister.Blocks blockRegistry() + { + return EIBlocks.Registry.BLOCKS; + } + + @Override + public DeferredRegister> blockEntityRegistry() + { + return EIBlocks.Registry.BLOCK_ENTITIES; + } + + @Override + public DeferredRegister.Items itemRegistry() + { + return EIItems.Registry.ITEMS; + } + + @Override + public void onBlockRegister(BlockHolder holder) + { + EIBlocks.Registry.include(holder); + } + + @Override + public void onBlockEntityRegister(BlockEntityType type) + { + } + + @Override + public void onItemRegister(ItemHolder holder) + { + EIItems.Registry.include(holder); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/material/EIMaterials.java b/src/main/java/net/swedz/extended_industrialization/material/EIMaterials.java new file mode 100644 index 00000000..6f783464 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/material/EIMaterials.java @@ -0,0 +1,95 @@ +package net.swedz.extended_industrialization.material; + +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EISortOrder; +import net.swedz.extended_industrialization.EITags; +import net.swedz.tesseract.neoforge.compat.mi.material.MIMaterials; +import net.swedz.tesseract.neoforge.compat.mi.material.part.MIMaterialParts; +import net.swedz.tesseract.neoforge.compat.mi.material.recipe.MIMachineMaterialRecipeContext; +import net.swedz.tesseract.neoforge.material.Material; +import net.swedz.tesseract.neoforge.material.builtin.recipe.VanillaMaterialRecipeContext; +import net.swedz.tesseract.neoforge.material.part.MaterialPart; +import net.swedz.tesseract.neoforge.material.recipe.MaterialRecipeGroup; +import net.swedz.tesseract.neoforge.registry.common.CommonLootTableBuilders; +import net.swedz.tesseract.neoforge.registry.common.CommonModelBuilders; + +import static aztech.modern_industrialization.machines.init.MIMachineRecipeTypes.*; +import static net.swedz.extended_industrialization.EIMachines.RecipeTypes.*; +import static net.swedz.tesseract.neoforge.compat.mi.material.part.MIMaterialParts.*; +import static net.swedz.tesseract.neoforge.compat.mi.material.property.MIMaterialProperties.*; + +public interface EIMaterials +{ + interface Parts + { + MaterialPart POLISHED_MACHINE_CASING = create("polished_machine_casing", "Polished Machine Casing") + .formattingMaterialOnly("polished_%s_machine_casing"::formatted, "Polished %s Machine Casing"::formatted) + .blockModel(CommonModelBuilders::blockCubeAll) + .blockLoot(CommonLootTableBuilders::self) + .itemOn(EI.ID, (c, h) -> h.sorted(EISortOrder.CASINGS)); + + MaterialPart CURVED_PLATE = MIMaterialParts.CURVED_PLATE + .itemOn(EI.ID, (c, h) -> h.sorted(EISortOrder.PARTS)); + + MaterialPart TESLA_TOP_LOAD = create("tesla_top_load", "Tesla Top Load") + .itemModelBuilder(CommonModelBuilders::generated) + .itemOn(EI.ID, (c, h) -> h.sorted(EISortOrder.PARTS)); + + MaterialPart TESLA_WINDING = create("tesla_winding", "Tesla Winding") + .blockModel(CommonModelBuilders::blockTopEnd) + .blockLoot(CommonLootTableBuilders::self) + .itemOn(EI.ID, (c, h) -> h.sorted(EISortOrder.CASINGS)); + + static MaterialPart create(String id, String englishName) + { + return new MaterialPart(EI.id(id), englishName); + } + } + + interface Recipes + { + MaterialRecipeGroup STANDARD = MaterialRecipeGroup.create(VanillaMaterialRecipeContext::new) + .add("polished_machine_casing", (c) -> c.shaped(Parts.POLISHED_MACHINE_CASING, 1, (r) -> r.add('c', CURVED_PLATE).add('p', PLATE), "cpc", "cpc", "cpc")); + + MaterialRecipeGroup STANDARD_MACHINES = MaterialRecipeGroup.create(MIMachineMaterialRecipeContext::new) + .add("plate_to_curved_plate_bending", (c) -> c.machine("curved_plate", BENDING_MACHINE, 2, (int) (200 * c.get(TIME_FACTOR)) / 2, PLATE, 1, CURVED_PLATE, 1)) + .add("rod_to_ring_bending", (c) -> c.machine("ring", BENDING_MACHINE, 2, (int) (200 * c.get(TIME_FACTOR)) / 2, ROD, 1, RING, 1)) + .add("polished_machine_casing", (c) -> c.machine(ASSEMBLER, 8, 10 * 20, Parts.POLISHED_MACHINE_CASING, 1, (b) -> b.addPartInput(PLATE, 3).addPartInput(CURVED_PLATE, 6))) + .add("tesla_top_load", (c) -> c.machine("tesla_top_load", PACKER, 8, 5 * 20, CURVED_PLATE, 8, Parts.TESLA_TOP_LOAD, 1)) + .add("tesla_winding", (c) -> c.machine(ASSEMBLER, 8, 5 * 20, Parts.TESLA_WINDING, 1, (b) -> b.addPartInput(CABLE, 8).addItemInput(EITags.itemCommon("plates/stainless_steel"), 4))); + } + + Material SILVER = MIMaterials.SILVER.as(EIMaterialRegistry.get()) + .add(Parts.CURVED_PLATE, Parts.TESLA_TOP_LOAD) + .add(Parts.POLISHED_MACHINE_CASING) + .recipes(Recipes.STANDARD, Recipes.STANDARD_MACHINES); + + Material COPPER = MIMaterials.COPPER.as(EIMaterialRegistry.get()) + .add(Parts.TESLA_WINDING) + .recipes(Recipes.STANDARD, Recipes.STANDARD_MACHINES); + + Material ELECTRUM = MIMaterials.ELECTRUM.as(EIMaterialRegistry.get()) + .add(Parts.TESLA_WINDING) + .recipes(Recipes.STANDARD, Recipes.STANDARD_MACHINES); + + Material ALUMINUM = MIMaterials.ALUMINUM.as(EIMaterialRegistry.get()) + .add(Parts.TESLA_WINDING) + .recipes(Recipes.STANDARD, Recipes.STANDARD_MACHINES); + + Material ANNEALED_COPPER = MIMaterials.ANNEALED_COPPER.as(EIMaterialRegistry.get()) + .add(Parts.TESLA_WINDING) + .recipes(Recipes.STANDARD, Recipes.STANDARD_MACHINES); + + Material SUPERCONDUCTOR = MIMaterials.SUPERCONDUCTOR.as(EIMaterialRegistry.get()) + .add(Parts.TESLA_WINDING) + .recipes(Recipes.STANDARD, Recipes.STANDARD_MACHINES); + + static Material[] values() + { + return new Material[]{SILVER, COPPER, ELECTRUM, ALUMINUM, ANNEALED_COPPER, SUPERCONDUCTOR}; + } + + static void init() + { + } +} diff --git a/src/main/resources/assets/extended_industrialization/textures/block/polished_silver_machine_casing.png b/src/main/resources/assets/extended_industrialization/textures/block/polished_silver_machine_casing.png new file mode 100644 index 0000000000000000000000000000000000000000..44f9637ed46dface05e3b920eb194daef4932909 GIT binary patch literal 562 zcmV-20?qx2P)mk~i|U za{c*0-ZJ0szcHIuGypike@A%d|G2z)OS(&hIjPD)?F0A+e9}}1=>!Y0Ae%-$?O*6}7 zVZS~T;k0^?w=2^$#G`k@9d{?0`8jg9QI4HynujCn;4eoeqO)H&YAGx!(P|^YN!FD0 z$K!wIF|-Qh*r}ypW=Jk*8(w&M-k9f!FdG!Yjd@8}tIW$n-mggB>3x{RbohRn;Mg-# z$`CP}WM*vZkJDih{dAc&rF&3iX!QKFBKbJC5bh*5BX1k&azR_eJ?I{ojdj%`l$>vX zIDzgq*63<{`}_q{#mtBZ-1PkPs`l&sZ?K#38?ehla8=#ECjbBd07*qoM6N<$f{1?% AZU6uP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/polished_stainless_steel_casing.png b/src/main/resources/assets/extended_industrialization/textures/block/polished_stainless_steel_casing.png deleted file mode 100644 index 4a4fd9795a29242a590889ed73d7645c105cf07e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 995 zcmV<9104K`P)4Tx04UFuk-JO7P!z_0Z571_f;xyebWm}yAPV9r6?CZ%wSupujY%scX-Hb6 zxC$-~f`jPdYw$nNRd7`h1Vs>WboRA~#B&>=MRf3noAcwl`3~oPfpEgqEU#u1EW6+) zC*slBx%p__6ScGwW`s~$^PI`)@f3fq_Zvd0UdL1~{KV;eai)s3oNEd933pp&QTv`p z-K0skXQrig%I?A=$pmqtWGJ$XNr9MDTQd9IH&FIXkr$69Z-)}DII`r#+b?QSy6RF5 z(RF!DN-FoCd3wgsV9>oO4z&-y|I!0>TkyH*`yU6s|9J?JdpNTz{=DQg@+SIbMeE*! zmNhszuV|TVI9-R1J16a?%Th#k*f8Mv7@Fsx?Ft$ef~>yJIl6_^s{Eo$*x7|%`MzcG z3j=Rx3l^FG)Bpeg32;bRa{vGf6951U69E94oEQKA0u)I^K~y+TZBt3I(=ZV2IQcmV zXJN-3*l-I@11qXH3=0lGQ7nE2l313d)@1QsJFfZ*RHd?p?tX*XyKmorcJ*0GQOtz7 zu2YJVbCi;^v{t27d~3B?Yr$Ew@9yiDAN~D@cM@`wrFV&`ik3y{vdH{MqEiufMX^{= zbe3tl$>VX67$&)%UuDQy5!{92Z8FEw*7N_3{r-UaCIji_3N$U2%yB#nqQ1zm-y!H( zY-#p=J17kdlBCisxgeM`Vck%)C=m981rx~ohtbdQr$a9NFa{yR7|`AiD`K4Tnxs|2 z2!N1m-}@pjFGpJ!0Mp2UZdYg}qPO5G9iGs<;Ihmk?)d_sOVq>RXxcfS5~7T7nTaJe zn*r`u$l8W#kPsXs+$GFzJ=}pUd>LvfSO5{GDX3TICbBz6pwHF|oJ6nC%wFO9$Kcmj z;KrST%r~_nm){S3R}TW-dTl6`al8U_XXgw2qJHy$I!Hgb1oKp4oIu&b?Xx-0BHVW* zd3Tp-yqkd)9ZOS(1_t-r2?!T)?yt3Sj2_6ro^8UJMlkdvl8P}%s$es$CQ=s{EI_wu z3=Jb?(&rsPsFxCAm;pd<@QgH(&A|Sq&eQ8JxnBOrh-M*01rs(+Qv6idI|qNjhGTn5 z^MLfY;n+|WC@fAyKaG~S#qbX`24wZ=uvu$+hW>M%-6o#LB@7$eXX4rK{i2+H_#??rL5eq_yiHV8U{08DjYhmn32#GEDQCJycVrfZZ zV(=GO7|;TQz$`QD?6~aC&W9DNu-h2k=1orSea?ALjwp(Pvq+xlH(;DDEUvEc@%2hE zWV=|lgJrw8l`?T75^kl;`?t?eycee<)M|H%(ebM|ZkgfgIm%uYZ^R?;1H2JW1b)D) z7mo%Yz=FcB_e$3av{>sRr+$QSWf&`VIECcgXXcl4+7<85c$;Fio3Q+`!N#+O!5o z2zT4G;)rfHK`Moi5_{MoK0Ls*HA<&^Jvq;bPNn_ z_PlR`#nm;Gq3Im`CQDO<5aek_yVXP~jpZnm@z)3LAU-^x8AhaO7bzuCct~F4L_vev ztqGK&DOo20Cn6+Co03%`OH)F>PFUX;{;yqeZR)mI|MUezmpJx5z}DslomNb+S0~F- zE{Q>-xLi)g3qbSABs0)gK7&$IYYwss;c6002ovPDHLkV1m7J B0V@Ci literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/item/silver_tesla_top_load.png b/src/main/resources/assets/extended_industrialization/textures/item/silver_tesla_top_load.png new file mode 100644 index 0000000000000000000000000000000000000000..f594203ee5eb10c79b9d8b2dec16f2410063da97 GIT binary patch literal 562 zcmV-20?qx2P){=vuxe#NaQ|%V-yYDkIo28WapX%wpOg?; zkq}T3L=^D>Q|12T^{lPQ+6kr}e@!Z$!OOh>NJ=zT19?MO|KR~x|5fAF(F?@^w%+AdH5#d1JVb*?rr}s!7 zpWiQT^+3Xgdry|}?9pog?%o*bZ~}}~C(_dV0;eyW1Heq_Ab6Kkh|z2+-sRlBHoQ#? z@L=jz7R@O4>>+OzM6)de@s8jkzNLtFyN=9E$s2W2N}U9o2!Wz5xRxRz>}n9rkPr|b zItezLD6Fq+j7mlRlE6qQK}y&*1W`0ZnzaH|W2`!{V?ECgS5u5eeRYlCJu!AA5Fc1s zUIyS`|8bV)7Z|y6GnpyTtn*s`z$v0BMJp$2R}V~;x3kYVIdqm%xy<0Di?~*Ult4sK zQCwb-VkB?0`10`srE(eQTII^sdnu}M=)_U>?%Pkjwu%HHS;RYssnV=B`1WZLGv&?P zOt#GcV6-xxVvLx|X7nwD_BopI^2PMd&-AbL8@IN2djxhki~s-t07*qoM6N<$f*lP2 AbpQYW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/materialsets/common/tesla_top_load.png b/src/main/resources/assets/extended_industrialization/textures/materialsets/common/tesla_top_load.png new file mode 100644 index 0000000000000000000000000000000000000000..527381aaec8ecd2bae213db5aefc18819ae9ca2b GIT binary patch literal 968 zcmV;(12_DMP)4Tx04UFukv&MmP!xqvQ?)7;2Rn#3WT;LSii+qaQ7nRm(pG5I!Q`bsLX(Ch z#l=x@EjakISaoo5*44pP5Cnff+}xZLU8KbOl0u76!3UT3ao#(J`|bmTT8U{^M- z+f2qJF_T>p1Fz^o7gZE9GP8_$Y9Wob>+2pqzTZW77XG*T)SSftpGZ8*4AUlFC!X50 z4bJ<-Ay$-C;&b9LlNuy`Es-7h*&JNu+qY;Xllfh#9>v_DPPEV zta9Gstd%OP(I(i|qi@Or1Ghl$syDaBIZhvdG|g)11~@nb zMhld^*5=*at#kYHjypd{KhC6b%xuDa3jhEB32;bRa{vGf6951U69E94oEQKA0qIFZ zK~y+TrBktP8bJ_!2PQ@Q2@#G9M@rJr#i2z}$Pe%jNc6Uxf`Tso0)7OlI5MH20H+`p zKM|b6@o~4iw|kqJIgS{K6j4Un-I?2&H}iJp0`EQkM|J=vlZm(1B280T2HMbRjM#>j zC7sW9yB%yo{s7G9a|y0ikHpS02dxzaTPUUETfAQ5^Oq|EP0{Uk1*F7Vk+}#C=*rrZ zHE;s94P|Gkzd3~?-;Wm;lKFr)4n8?~0p~26SS%KMDI8UwVRe6xS1(^<`fVz{0>BO| zrBWHUx8Fr?Ha~26vV6L{^f%KP-Z$TgZB3p`C~$d>N;XD|-e@#-f?3Yb&H_VK9h57G zqlhZXDdhnC!p;emqMCiebk_8cZlkjZK+bc+m3aS6IFZqs{FUe|IRF`2=}iSW@;>3a zj80Em;kTvWvW)tkgYbjN?IUTmTGVQXySpV~m5?73DcVRB!tkejI6i)k+3W_LPRBDf z1~0PF<5FOX=piB+IR%--e!uU-RfziAI?6OP>m-4q#Y4)k?Z`PwVw%nj%jFM@Mqg2> zJi%}{2)3i#>-9WOSglsW)5AmjqJh!WR!@~CDi)wHTwy#OOZMy0wX}NYXX5cpsh#W~ qU3o--yHiZ$a4^`;$qvB33-B8Y3W1M(bme6L0000 Date: Mon, 9 Dec 2024 07:52:43 -0500 Subject: [PATCH 102/159] Make tesla arcs straighter --- .../client/tesla/generator/TeslaArcs.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java index 6b52cdeb..a75cfa06 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java @@ -161,9 +161,9 @@ private void createArc() for(int i = 0; i < length; i++) { float sectionLength = maxSectionLength / (i + 1); - float offsetX = this.randomOffset(Direction.Axis.X); - float offsetY = this.randomOffset(Direction.Axis.Y); - float offsetZ = this.randomOffset(Direction.Axis.Z); + float offsetX = Math.abs(dirX) * RANDOM.nextFloat(); + float offsetY = Math.abs(dirY) * RANDOM.nextFloat(); + float offsetZ = Math.abs(dirZ) * RANDOM.nextFloat(); for(int j = 0; j < sectionSplits; j++) { trail.addTrailPoint(new Vec3(x, y, z)); From 48dbd71dfa01c1f0dc61f165ea9b8e19d72eb68e Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 10 Dec 2024 11:13:01 -0500 Subject: [PATCH 103/159] Clean up the merge --- .../extended_industrialization/EIClient.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index c8799c93..4367a9e8 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -36,7 +36,6 @@ import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.registries.DeferredHolder; import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; -import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; import net.swedz.extended_industrialization.client.ber.chainer.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.model.chainer.MachineChainerUnbakedModel; @@ -128,17 +127,11 @@ private static void registerBlockEntityRenderers(FMLClientSetupEvent event) BlockEntityRendererProvider provider = switch (blockEntity) { case MachineChainerMachineBlockEntity be -> MachineChainerHighlightRenderer::new; - case TeslaNetworkPart __ -> + case TeslaNetworkPart __ -> switch (blockEntity) { - if(blockEntity instanceof MultiblockMachineBlockEntity) - { - yield TeslaPartMultiblockRenderer::new; - } - else - { - yield TeslaPartSingleBlockRenderer::new; - } - } + case MultiblockMachineBlockEntity be -> TeslaPartMultiblockRenderer::new; + default -> TeslaPartSingleBlockRenderer::new; + }; case LargeTankMultiblockBlockEntity be -> MultiblockTankBER::new; case MultiblockMachineBlockEntity be -> MultiblockMachineBER::new; default -> MachineBlockEntityRenderer::new; From b9d1302add36793ca0cb0ca3685214362769a3c1 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 10 Dec 2024 12:04:38 -0500 Subject: [PATCH 104/159] Follow API changes --- .../lang/en_us.json | 6 +- .../TeslaCoilMachineBlockEntity.java | 23 +++--- .../TeslaReceiverMachineBlockEntity.java | 24 +++---- .../teslatower/SameCableTierShapeMatcher.java | 60 ++++------------ .../teslatower/TeslaTowerBlockEntity.java | 70 +++++++++---------- .../TeslaTransmitterComponent.java | 2 +- .../modularslots/ModularSlotPanelClient.java | 3 +- 7 files changed, 73 insertions(+), 115 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index fd9e89ee..ed7ed065 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -163,7 +163,7 @@ "text.extended_industrialization.key_mouse_scroll": "Mouse Scroll", "text.extended_industrialization.machine_batcher_coils": "Batch size and cost is determined by coil used.", "text.extended_industrialization.machine_chainer_connected_machines": "Connected Machines: %d / %d", - "text.extended_industrialization.machine_chainer_help_1": "Connects up to %d consecutive machines in a horizontal line in the direction it is facing.", + "text.extended_industrialization.machine_chainer_help_1": "Connects up to %d consecutive machines in a straight line in the direction it is facing.", "text.extended_industrialization.machine_chainer_help_2": "Accepts items, fluids, and energy and distributes them to connected machines.", "text.extended_industrialization.machine_chainer_help_3": "Can connect to other machine chainers, but it must not link back to itself.", "text.extended_industrialization.machine_chainer_problem_at": "Problem at: %s", @@ -247,8 +247,8 @@ "text.extended_industrialization.tesla_tower_mismatching_hatches": "All energy hatches must be of the same voltage.", "text.extended_industrialization.tesla_tower_no_energy_hatches": "No energy hatches provided", "text.extended_industrialization.tesla_tower_upgrade": "Add tesla upgrades to increase maximum range.", - "text.extended_industrialization.universal_transformer_from_tier_input": "Casing for cable tier to convert from (LV by default).", - "text.extended_industrialization.universal_transformer_to_tier_input": "Casing for cable tier to convert to (LV by default).", + "text.extended_industrialization.universal_transformer_from_tier_input": "Hull for cable tier to convert from (LV by default).", + "text.extended_industrialization.universal_transformer_to_tier_input": "Hull for cable tier to convert to (LV by default).", "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected.", "text.extended_industrialization.windings_tesla_tower_tier": "Allows the Tesla Tower to transmit up to %s within %s blocks with a passive drain of %s." } \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java index dce4a879..88ac1e30 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java @@ -19,7 +19,6 @@ import aztech.modern_industrialization.util.Tickable; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.AABB; @@ -71,19 +70,7 @@ public TeslaCoilMachineBlockEntity(BEP bep) isActive = new IsActiveComponent(); redstoneControl = new RedstoneControlComponent(); - casing = new CasingComponent() - { - @Override - protected void setCasingStack(ItemStack stack) - { - super.setCasingStack(stack); - - if(level != null && !level.isClientSide()) - { - transmitter.getNetwork().updateAll(); - } - } - }; + casing = new CasingComponent(this::onCasingUpdate); energy = new EnergyComponent(this, casing::getEuCapacity); insertable = energy.buildInsertable(casing::canInsertEu); @@ -144,6 +131,14 @@ protected void setCasingStack(ItemStack stack) .withCasings(casing)); } + private void onCasingUpdate(CableTier from, CableTier to) + { + if(level != null && !level.isClientSide()) + { + transmitter.getNetwork().updateAll(); + } + } + @Override public TeslaArcBehavior getTeslaArcBehavior() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java index bd173692..4837b95b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.machines.blockentity; +import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.EnergyApi; import aztech.modern_industrialization.api.energy.MIEnergyStorage; import aztech.modern_industrialization.inventory.MIInventory; @@ -17,7 +18,6 @@ import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.util.Tickable; import net.minecraft.core.Direction; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.AABB; @@ -60,19 +60,7 @@ public TeslaReceiverMachineBlockEntity(BEP bep) isActive = new IsActiveComponent(); redstoneControl = new RedstoneControlComponent(); - casing = new CasingComponent() - { - @Override - protected void setCasingStack(ItemStack stack) - { - super.setCasingStack(stack); - - if(level != null && !level.isClientSide()) - { - receiver.addToNetwork(); - } - } - }; + casing = new CasingComponent(this::onCasingUpdate); energy = new EnergyComponent(this, casing::getEuCapacity); insertable = energy.buildInsertable(casing::canInsertEu); @@ -118,6 +106,14 @@ protected void setCasingStack(ItemStack stack) .withCasing(casing)); } + private void onCasingUpdate(CableTier from, CableTier to) + { + if(level != null && !level.isClientSide()) + { + receiver.addToNetwork(); + } + } + @Override public TeslaPlasmaBehavior getTeslaPlasmaBehavior() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java index 1fb8a00a..e25dfcd8 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java @@ -11,66 +11,36 @@ import net.minecraft.world.level.Level; import java.util.Set; +import java.util.function.Consumer; public class SameCableTierShapeMatcher extends ShapeMatcher { - protected boolean hasMismatchingHatches; + protected final Consumer mismatchingHatchesCallback; - public SameCableTierShapeMatcher(Level level, BlockPos controllerPos, Direction controllerDirection, ShapeTemplate template) + public SameCableTierShapeMatcher(Level level, BlockPos controllerPos, Direction controllerDirection, ShapeTemplate template, Consumer mismatchingHatchesCallback) { super(level, controllerPos, controllerDirection, template); - } - - public boolean hasMismatchingHatches() - { - return hasMismatchingHatches; + this.mismatchingHatchesCallback = mismatchingHatchesCallback; } @Override - public void rematch(Level level) + protected boolean checkRematch(Level world) { - this.unlinkHatches(); - matchSuccessful = true; - - for(BlockPos pos : simpleMembers.keySet()) + boolean hasMismatchingHatches = false; + Set tiers = Sets.newHashSet(); + for(HatchBlockEntity hatch : this.getMatchedHatches()) { - int originalHatchCount = matchedHatches.size(); - if(!this.matches(pos, level, matchedHatches)) + if(hatch instanceof EnergyHatch energyHatch) { - matchSuccessful = false; - } - else if(originalHatchCount != matchedHatches.size()) - { - Set tiers = Sets.newHashSet(); - for(HatchBlockEntity hatch : matchedHatches) + tiers.add(energyHatch.getCableTier()); + if(tiers.size() > 1) { - if(hatch instanceof EnergyHatch energyHatch) - { - tiers.add(energyHatch.getCableTier()); - if(tiers.size() > 1) - { - hasMismatchingHatches = true; - matchSuccessful = false; - break; - } - } + hasMismatchingHatches = true; + break; } } } - - if(!matchSuccessful) - { - matchedHatches.clear(); - } - else - { - hasMismatchingHatches = false; - for(HatchBlockEntity hatch : matchedHatches) - { - hatch.link(template.hatchCasing); - } - } - - needsRematch = false; + mismatchingHatchesCallback.accept(hasMismatchingHatches); + return !hasMismatchingHatches; } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index a91a0dcd..79ab791c 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -50,7 +50,7 @@ public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder { - private final RedstoneControlComponent redstoneControl; + private final RedstoneControlComponent redstoneControl; private final TeslaTowerUpgradeComponent upgrade; private final List energyInputs = Lists.newArrayList(); @@ -59,6 +59,7 @@ public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEnti private final TeslaArcs arcs; + private boolean hasMismatchingHatches; private CableTier cableTier; private long lastEnergyTransmitted; @@ -125,7 +126,7 @@ else if(this.getCableTier() == null) } else { - if(this.getShapeMatcher() != null && this.getShapeMatcher().hasMismatchingHatches()) + if(hasMismatchingHatches) { content.add(EIText.TESLA_TOWER_MISMATCHING_HATCHES, RED, true); } @@ -217,44 +218,45 @@ public List getEnergyComponents() } @Override - public void onMatchSuccessful() + protected void onRematch(ShapeMatcher shapeMatcher) { - super.onMatchSuccessful(); + super.onRematch(shapeMatcher); - CableTier cableTier = null; - energyInputs.clear(); - for(HatchBlockEntity hatch : shapeMatcher.getMatchedHatches()) + if(shapeMatcher.isMatchSuccessful()) { - hatch.appendEnergyInputs(energyInputs); - if(cableTier == null && hatch instanceof EnergyHatch energyHatch) + CableTier cableTier = null; + energyInputs.clear(); + for(HatchBlockEntity hatch : shapeMatcher.getMatchedHatches()) { - cableTier = energyHatch.getCableTier(); + hatch.appendEnergyInputs(energyInputs); + if(cableTier == null && hatch instanceof EnergyHatch energyHatch) + { + cableTier = energyHatch.getCableTier(); + } } - } - this.cableTier = cableTier; - if(this.hasNetwork()) - { - if(this.getCableTier() != null) + this.cableTier = cableTier; + if(this.hasNetwork()) { - this.getNetwork().loadTransmitter(transmitter); + if(this.getCableTier() != null) + { + this.getNetwork().loadTransmitter(transmitter); + } + } + else + { + EI.LOGGER.error("Failed to load transmitter into the network because no network was set yet"); } } else { - EI.LOGGER.error("Failed to load transmitter into the network because no network was set yet"); - } - } - - @Override - protected void onMatchFailure() - { - if(this.hasNetwork()) - { - this.getNetwork().unloadTransmitter(); - } - else - { - EI.LOGGER.error("Failed to unload transmitter into the network because no network was set yet"); + if(this.hasNetwork()) + { + this.getNetwork().unloadTransmitter(); + } + else + { + EI.LOGGER.error("Failed to unload transmitter into the network because no network was set yet"); + } } } @@ -277,16 +279,10 @@ public ShapeMatcher createShapeMatcher() { return new SameCableTierShapeMatcher( level, worldPosition, orientation.facingDirection, - this.getActiveShape() + this.getActiveShape(), (value) -> hasMismatchingHatches = value ); } - @Override - public SameCableTierShapeMatcher getShapeMatcher() - { - return (SameCableTierShapeMatcher) shapeMatcher; - } - @Override public void tick() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index 4c14a32c..0e995a21 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -144,7 +144,7 @@ public long getPassiveDrain() @Override public boolean isInterdimensional() { - return machine.getComponents().mapOrDefault(TeslaTowerUpgradeComponent.class, TeslaTowerUpgradeComponent::isInterdimensional, false); + return machine.components.mapOrDefault(TeslaTowerUpgradeComponent.class, TeslaTowerUpgradeComponent::isInterdimensional, false); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java index 804e3b0d..ac2ffb2e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java @@ -81,7 +81,8 @@ public int getMaxStackSize() @Override public ResourceLocation getBackgroundAtlasLocation() { - return slot.atlas(); + ResourceLocation atlas = slot.atlas(); + return atlas == null ? super.getBackgroundAtlasLocation() : atlas; } @Override From 88ac018408b49c965976952451650cf495f7f83e Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 10 Dec 2024 12:30:08 -0500 Subject: [PATCH 105/159] Allow inserting upgrades and redstone control modules into the tower with right click --- .../teslatower/TeslaTowerBlockEntity.java | 41 ++++++++++++------- .../itemslot/SimpleItemStackComponent.java | 20 ++++++++- .../itemslot/TeslaTowerUpgradeComponent.java | 32 ++++++++++++++- 3 files changed, 77 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 79ab791c..b312dcb2 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -5,7 +5,6 @@ import aztech.modern_industrialization.api.machine.component.EnergyAccess; import aztech.modern_industrialization.api.machine.holder.EnergyListComponentHolder; import aztech.modern_industrialization.machines.BEP; -import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.blockentities.hatches.EnergyHatch; import aztech.modern_industrialization.machines.components.EnergyComponent; import aztech.modern_industrialization.machines.components.RedstoneControlComponent; @@ -16,6 +15,9 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; @@ -72,19 +74,7 @@ public TeslaTowerBlockEntity(BEP bep) ); redstoneControl = new RedstoneControlComponent(); - upgrade = new TeslaTowerUpgradeComponent() - { - @Override - public void setStackServer(MachineBlockEntity machine, ItemStack stack) - { - super.setStackServer(machine, stack); - - if(level != null && !level.isClientSide()) - { - transmitter.getNetwork().updateAll(); - } - } - }; + upgrade = new TeslaTowerUpgradeComponent(this::onUpgradeUpdate); transmitter = new TeslaTransmitterComponent( this, @@ -140,6 +130,14 @@ else if(this.getCableTier() == null) .with(EIModularSlotPanelSlots.TESLA_TOWER_UPGRADE, upgrade)); } + private void onUpgradeUpdate(ItemStack from, ItemStack to) + { + if(level != null && !level.isClientSide()) + { + transmitter.getNetwork().updateAll(); + } + } + public BlockPos getTopLoadPosition() { Direction facing = orientation.facingDirection; @@ -274,6 +272,21 @@ public void setLevel(Level level) this.setNetwork(new WorldPos(level, worldPosition)); } + @Override + protected ItemInteractionResult useItemOn(Player player, InteractionHand hand, Direction face) + { + var result = super.useItemOn(player, hand, face); + if(!result.consumesAction()) + { + result = redstoneControl.onUse(this, player, hand); + } + if(!result.consumesAction()) + { + result = upgrade.onUse(this, player, hand); + } + return result; + } + @Override public ShapeMatcher createShapeMatcher() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java index 78a8a4d1..f3299263 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java @@ -13,13 +13,26 @@ public class SimpleItemStackComponent implements IComponent, DropableComponent { + public interface UpdatedCallback + { + void onUpdate(ItemStack from, ItemStack to); + } + protected final String stackTagKey; + protected final UpdatedCallback callback; + protected ItemStack stack = ItemStack.EMPTY; - public SimpleItemStackComponent(String stackTagKey) + public SimpleItemStackComponent(String stackTagKey, UpdatedCallback callback) { this.stackTagKey = stackTagKey; + this.callback = callback; + } + + public SimpleItemStackComponent(String stackTagKey) + { + this(stackTagKey, null); } public ItemStack getStack() @@ -29,9 +42,14 @@ public ItemStack getStack() public void setStackServer(MachineBlockEntity machine, ItemStack stack) { + ItemStack previous = this.stack; this.stack = stack; machine.setChanged(); machine.sync(); + if(callback != null) + { + callback.onUpdate(previous, stack); + } } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java index d4b5eb14..03727f0f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java @@ -1,16 +1,46 @@ package net.swedz.extended_industrialization.machines.component.itemslot; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.swedz.extended_industrialization.EIItems; public class TeslaTowerUpgradeComponent extends SimpleItemStackComponent { + public TeslaTowerUpgradeComponent(UpdatedCallback callback) + { + super("tesla_tower_upgrade_stack", callback); + } + public TeslaTowerUpgradeComponent() { - super("tesla_tower_upgrade_stack"); + this(null); } public boolean isInterdimensional() { return this.getStack().is(EIItems.TESLA_INTERDIMENSIONAL_UPGRADE.asItem()); } + + public ItemInteractionResult onUse(MachineBlockEntity blockEntity, Player player, InteractionHand hand) + { + ItemStack stack = player.getItemInHand(hand); + if(!stack.is(EIItems.TESLA_INTERDIMENSIONAL_UPGRADE.asItem())) + { + return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + } + if(this.getStack().isEmpty()) + { + ItemStack copy = stack.copyWithCount(1); + stack.consume(1, player); + if(!blockEntity.getLevel().isClientSide()) + { + this.setStackServer(blockEntity, copy); + } + return ItemInteractionResult.sidedSuccess(blockEntity.getLevel().isClientSide()); + } + return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + } } From 9e624aaeb61c8a49dfb70413967327c87e6b032b Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 10 Dec 2024 12:43:01 -0500 Subject: [PATCH 106/159] Use config option for transmit range of tesla coil --- .../extended_industrialization/lang/en_us.json | 4 ++-- .../swedz/extended_industrialization/EIConfig.java | 12 ++++++------ .../swedz/extended_industrialization/EIMachines.java | 4 ++-- .../net/swedz/extended_industrialization/EIText.java | 4 ++-- .../swedz/extended_industrialization/EITooltips.java | 2 +- .../{ => tesla}/TeslaCoilMachineBlockEntity.java | 5 +++-- .../{ => tesla}/TeslaReceiverMachineBlockEntity.java | 2 +- 7 files changed, 17 insertions(+), 16 deletions(-) rename src/main/java/net/swedz/extended_industrialization/machines/blockentity/{ => tesla}/TeslaCoilMachineBlockEntity.java (98%) rename src/main/java/net/swedz/extended_industrialization/machines/blockentity/{ => tesla}/TeslaReceiverMachineBlockEntity.java (99%) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index ed7ed065..b7abb59e 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -220,8 +220,8 @@ "text.extended_industrialization.tesla_calibrator_link_success": "Linked receiver to selected transmitter.", "text.extended_industrialization.tesla_calibrator_linked": "Linked to %s", "text.extended_industrialization.tesla_calibrator_selected": "Selected transmitter for calibration.", - "text.extended_industrialization.tesla_coil_help_1": "Wirelessly transmits energy to linked receivers within range.", - "text.extended_industrialization.tesla_coil_help_2": "Voltage of energy transmitted is set by the hull provided.", + "text.extended_industrialization.tesla_coil_help_1": "Wirelessly transmits energy to linked receivers within %d blocks.", + "text.extended_industrialization.tesla_coil_help_2": "Voltage of energy transmitted is set by the hull provided. Higher voltages have an increased passive drain.", "text.extended_industrialization.tesla_handheld_clear": "Cleared selected transmitter.", "text.extended_industrialization.tesla_handheld_help_1": "Receives energy from a linked transmitter within range and charges items while in your inventory.", "text.extended_industrialization.tesla_handheld_help_2": "Tesla Calibration:", diff --git a/src/main/java/net/swedz/extended_industrialization/EIConfig.java b/src/main/java/net/swedz/extended_industrialization/EIConfig.java index 2ceeaf05..64fa9c64 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIConfig.java +++ b/src/main/java/net/swedz/extended_industrialization/EIConfig.java @@ -6,7 +6,7 @@ public final class EIConfig { private static final ModConfigSpec.Builder BUILDER; - private static final ModConfigSpec.IntValue LOCAL_WIRELESS_CHARGING_STATION_RANGE; + private static final ModConfigSpec.IntValue TESLA_COIL_RANGE; private static final ModConfigSpec.IntValue MACHINE_CHAINER_MAX_CONNECTIONS; private static final ModConfigSpec.BooleanValue ALLOW_UPGRADES_IN_PROCESSING_ARRAY; private static final ModConfigSpec.IntValue LARGE_STEAM_MACERATOR_SIZE; @@ -23,9 +23,9 @@ public final class EIConfig { BUILDER = new ModConfigSpec.Builder(); - LOCAL_WIRELESS_CHARGING_STATION_RANGE = BUILDER - .comment("The range for the local wireless charging station machine") - .defineInRange("local_wireless_charging_station_range", 32, 0, Integer.MAX_VALUE); + TESLA_COIL_RANGE = BUILDER + .comment("The range for the tesla coil to transmit energy within") + .defineInRange("tesla_coil_range", 32, 0, Integer.MAX_VALUE); MACHINE_CHAINER_MAX_CONNECTIONS = BUILDER .comment("The maximum amount of connections a machine chainer can have") @@ -69,7 +69,7 @@ public final class EIConfig SPEC = BUILDER.build(); } - public static int localWirelessChargingStationRange; + public static int teslaCoilRange; public static int machineChainerMaxConnections; public static boolean allowUpgradesInProcessingArray; public static int largeSteamMaceratorBatchSize; @@ -82,7 +82,7 @@ public final class EIConfig public static void loadConfig() { - localWirelessChargingStationRange = LOCAL_WIRELESS_CHARGING_STATION_RANGE.get(); + teslaCoilRange = TESLA_COIL_RANGE.get(); machineChainerMaxConnections = MACHINE_CHAINER_MAX_CONNECTIONS.get(); allowUpgradesInProcessingArray = ALLOW_UPGRADES_IN_PROCESSING_ARRAY.get(); largeSteamMaceratorBatchSize = LARGE_STEAM_MACERATOR_SIZE.get(); diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index 57a3abcd..bf91049c 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -27,8 +27,8 @@ import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarBoilerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarPanelMachineBlockEntity; -import net.swedz.extended_industrialization.machines.blockentity.TeslaCoilMachineBlockEntity; -import net.swedz.extended_industrialization.machines.blockentity.TeslaReceiverMachineBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.UniversalTransformerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.ElectricBreweryMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.SteamBreweryMachineBlockEntity; diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 53d9353d..90eba5ae 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -111,8 +111,8 @@ public enum EIText implements MICompatibleTranslatableTextEnum TESLA_CALIBRATOR_LINK_FAILED_NO_SELECTION("Failed to link receiver because no transmitter is selected."), TESLA_CALIBRATOR_LINK_SUCCESS("Linked receiver to selected transmitter."), TESLA_CALIBRATOR_SELECTED("Selected transmitter for calibration."), - TESLA_COIL_HELP_1("Wirelessly transmits energy to linked receivers within range."), - TESLA_COIL_HELP_2("Voltage of energy transmitted is set by the hull provided."), + TESLA_COIL_HELP_1("Wirelessly transmits energy to linked receivers within %d blocks."), + TESLA_COIL_HELP_2("Voltage of energy transmitted is set by the hull provided. Higher voltages have an increased passive drain."), TESLA_HANDHELD_CLEAR("Cleared selected transmitter."), TESLA_HANDHELD_HELP_1("Receives energy from a linked transmitter within range and charges items while in your inventory."), TESLA_HANDHELD_HELP_2("Tesla Calibration:"), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 54478f70..1dc36692 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -231,7 +231,7 @@ public final class EITooltips public static final TooltipAttachment TESLA_COIL = TooltipAttachment.multilines( List.of(EI.id("tesla_coil")), List.of( - line(EIText.TESLA_COIL_HELP_1), + line(EIText.TESLA_COIL_HELP_1).arg(EIConfig.teslaCoilRange), line(EIText.TESLA_COIL_HELP_2) ) ); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java similarity index 98% rename from src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java rename to src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 88ac1e30..c010a064 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.blockentity; +package net.swedz.extended_industrialization.machines.blockentity.tesla; import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.EnergyApi; @@ -25,6 +25,7 @@ import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; +import net.swedz.extended_industrialization.EIConfig; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; @@ -82,7 +83,7 @@ public TeslaCoilMachineBlockEntity(BEP bep) { CableTier tier = casing.getCableTier(); long maxTransfer = tier.getMaxTransfer(); - return TeslaTransferLimits.of(tier, maxTransfer, 32, 2); + return TeslaTransferLimits.of(tier, maxTransfer, EIConfig.teslaCoilRange, tier.eu / 16); } ); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java similarity index 99% rename from src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java rename to src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index 4837b95b..fa8c6d16 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.blockentity; +package net.swedz.extended_industrialization.machines.blockentity.tesla; import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.EnergyApi; From d4303da8a9fce39cb56ab48de056a5bbf459e167 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 10 Dec 2024 12:44:10 -0500 Subject: [PATCH 107/159] Update tesla tower tooltip --- .../resources/assets/extended_industrialization/lang/en_us.json | 2 +- src/main/java/net/swedz/extended_industrialization/EIText.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index b7abb59e..3d45e056 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -242,7 +242,7 @@ "text.extended_industrialization.tesla_receiver_help_1": "Can receive energy from a linked transmitter.", "text.extended_industrialization.tesla_receiver_help_2": "Must accept energy of the same voltage as the linked transmitter.", "text.extended_industrialization.tesla_tower_help_1": "Wirelessly transmits energy to linked receivers within range.", - "text.extended_industrialization.tesla_tower_help_2": "Energy transfer rate and range is determined by the windings used.", + "text.extended_industrialization.tesla_tower_help_2": "Energy transfer rate, range, and passive drain is determined by the windings used.", "text.extended_industrialization.tesla_tower_help_3": "Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier.", "text.extended_industrialization.tesla_tower_mismatching_hatches": "All energy hatches must be of the same voltage.", "text.extended_industrialization.tesla_tower_no_energy_hatches": "No energy hatches provided", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 90eba5ae..ce6e8820 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -133,7 +133,7 @@ public enum EIText implements MICompatibleTranslatableTextEnum TESLA_RECEIVER_HELP_1("Can receive energy from a linked transmitter."), TESLA_RECEIVER_HELP_2("Must accept energy of the same voltage as the linked transmitter."), TESLA_TOWER_HELP_1("Wirelessly transmits energy to linked receivers within range."), - TESLA_TOWER_HELP_2("Energy transfer rate and range is determined by the windings used."), + TESLA_TOWER_HELP_2("Energy transfer rate, range, and passive drain is determined by the windings used."), TESLA_TOWER_HELP_3("Voltage of energy transmitted is set by the energy hatches. All hatches must be the same tier."), TESLA_TOWER_MISMATCHING_HATCHES("All energy hatches must be of the same voltage."), TESLA_TOWER_NO_ENERGY_HATCHES("No energy hatches provided"), From 6480204d881ea8b50536373ed233b82c6c02ea09 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 04:18:20 -0500 Subject: [PATCH 108/159] Move a bunch of API stuff to Tesseract --- .../extended_industrialization/EIClient.java | 3 - .../EIKeybinds.java | 2 +- .../EIMachines.java | 4 +- .../EITooltips.java | 2 +- .../api/Assert.java | 82 ---- .../api/BoxRenderHelper.java | 394 ------------------ .../api/ItemStackTooltipComponent.java | 8 - .../api/WorldPos.java | 95 ----- .../client/tesla/TeslaPartRenderer.java | 4 +- .../client/tesla/generator/TeslaArcs.java | 2 +- .../ItemStackClientTooltipComponent.java | 28 -- .../commands/EICommands.java | 2 +- .../compat/mi/EIMIHookListener.java | 4 - .../datamap/TeslaTowerTierData.java | 2 +- .../teslalinkable/SelectedTeslaNetwork.java | 2 +- .../teslalinkable/TeslaCalibratorItem.java | 4 +- .../TeslaHandheldReceiverItem.java | 4 +- .../teslatower/SameCableTierShapeMatcher.java | 46 -- .../teslatower/TeslaTowerBlockEntity.java | 5 +- .../teslatower/TeslaTowerShapes.java | 2 +- .../multiblock/teslatower/TeslaTowerTier.java | 2 +- .../tesla/TeslaCoilMachineBlockEntity.java | 2 +- .../harvestable/TreeHarvestable.java | 2 +- .../plantable/SpecialFarmerPlantable.java | 2 +- .../itemslot/SimpleItemStackComponent.java | 274 ------------ .../itemslot/TeslaTowerUpgradeComponent.java | 1 + .../component/tesla/TeslaNetwork.java | 2 +- .../component/tesla/TeslaNetworkCache.java | 2 +- .../component/tesla/TeslaNetworkPart.java | 2 +- .../tesla/receiver/PlayerTeslaReceiver.java | 2 +- .../tesla/receiver/TeslaReceiver.java | 2 +- .../receiver/TeslaReceiverComponent.java | 2 +- .../tesla/transmitter/TeslaTransmitter.java | 2 +- .../TeslaTransmitterComponent.java | 2 +- .../guicomponent/EIModularSlotPanelSlots.java | 2 +- .../modularslots/ModularSlotPanel.java | 260 ------------ .../modularslots/ModularSlotPanelClient.java | 162 ------- .../teslanetwork/TeslaNetworkBar.java | 2 +- .../teslanetwork/TeslaNetworkBarClient.java | 8 +- .../DataMapMultiblockTieredShapes.java | 32 -- .../tieredshapes/DataMultiblockTier.java | 9 - .../machines/tieredshapes/MultiblockTier.java | 16 - .../tieredshapes/MultiblockTieredShapes.java | 129 ------ ...eslaNetworkHolderMinecraftServerMixin.java | 2 +- .../TeslaNetworkReceiversPlayerMixin.java | 2 +- 45 files changed, 40 insertions(+), 1578 deletions(-) delete mode 100644 src/main/java/net/swedz/extended_industrialization/api/Assert.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/api/BoxRenderHelper.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/api/ItemStackTooltipComponent.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/api/WorldPos.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/tooltip/ItemStackClientTooltipComponent.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMapMultiblockTieredShapes.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMultiblockTier.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTier.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 4367a9e8..0c7cf36b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -35,13 +35,11 @@ import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.registries.DeferredHolder; -import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; import net.swedz.extended_industrialization.client.ber.chainer.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.model.chainer.MachineChainerUnbakedModel; import net.swedz.extended_industrialization.client.tesla.TeslaPartMultiblockRenderer; import net.swedz.extended_industrialization.client.tesla.TeslaPartSingleBlockRenderer; -import net.swedz.extended_industrialization.client.tooltip.ItemStackClientTooltipComponent; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; @@ -146,7 +144,6 @@ private static void registerClientTooltipComponents(RegisterClientTooltipCompone { event.register(SteamChainsawItem.SteamChainsawTooltipData.class, SteamChainsawTooltipComponent::new); event.register(MachineConfigCardItem.TooltipData.class, MachineConfigCardTooltipComponent::new); - event.register(ItemStackTooltipComponent.class, ItemStackClientTooltipComponent::new); } @SubscribeEvent diff --git a/src/main/java/net/swedz/extended_industrialization/EIKeybinds.java b/src/main/java/net/swedz/extended_industrialization/EIKeybinds.java index 6c286127..d93d75cc 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIKeybinds.java +++ b/src/main/java/net/swedz/extended_industrialization/EIKeybinds.java @@ -90,7 +90,7 @@ public static void init(IEventBus bus) ), toggleableItemAction(EquipmentSlot.CHEST) ); - public static final Keybind TOGGLE_LEGGINGS_ABILITY = create( + public static final Keybind TOGGLE_LEGGINGS_ABILITY = create( "toggle_leggings_ability", "Toggle Leggings Ability", (id) -> new KeyMapping( diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index bf91049c..06ff99c5 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -27,8 +27,6 @@ import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarBoilerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.SolarPanelMachineBlockEntity; -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.UniversalTransformerMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.ElectricBreweryMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.brewery.SteamBreweryMachineBlockEntity; @@ -39,6 +37,8 @@ import net.swedz.extended_industrialization.machines.blockentity.multiblock.farmer.ElectricFarmerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.farmer.SteamFarmerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.component.fluidharvesting.honeyextractor.HoneyExtractorBehavior; import net.swedz.extended_industrialization.machines.component.fluidharvesting.wastecollector.WasteCollectorBehavior; import net.swedz.extended_industrialization.machines.recipe.BreweryMachineRecipeType; diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 1dc36692..d18b55a8 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -10,13 +10,13 @@ import net.minecraft.network.chat.Component; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.BlockItem; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.PhotovoltaicCellItem; import net.swedz.extended_industrialization.item.nanosuit.NanoSuitArmorItem; import net.swedz.extended_industrialization.machines.blockentity.multiblock.LargeElectricFurnaceBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; +import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.tooltip.BiParser; import net.swedz.tesseract.neoforge.tooltip.Parser; import net.swedz.tesseract.neoforge.tooltip.TooltipAttachment; diff --git a/src/main/java/net/swedz/extended_industrialization/api/Assert.java b/src/main/java/net/swedz/extended_industrialization/api/Assert.java deleted file mode 100644 index 4b9303ed..00000000 --- a/src/main/java/net/swedz/extended_industrialization/api/Assert.java +++ /dev/null @@ -1,82 +0,0 @@ -package net.swedz.extended_industrialization.api; - -import java.util.Objects; - -public final class Assert -{ - public static void that(boolean bool, String message, ThrowableSupplier throwable) - { - if(!bool) - { - throw throwable.apply(message); - } - } - - public static void that(boolean bool, String message) - { - that(bool, message, IllegalArgumentException::new); - } - - public static void that(boolean bool, ThrowableSupplier throwable) - { - that(bool, null, throwable); - } - - public static void that(boolean bool) - { - that(bool, (String) null); - } - - public static void notNull(Object object, String message, ThrowableSupplier throwable) - { - that(object != null, message, throwable); - } - - public static void notNull(Object object, String message) - { - notNull(object != null, message, NullPointerException::new); - } - - public static void notNull(Object object, ThrowableSupplier throwable) - { - notNull(object, null, throwable); - } - - public static void notNull(Object object) - { - notNull(object, (String) null); - } - - public static void noneNull(Object... objects) - { - for(Object object : objects) - { - that(object != null, null, NullPointerException::new); - } - } - - public static void equals(Object a, Object b, String message, ThrowableSupplier throwable) - { - that(Objects.equals(a, b), message, throwable); - } - - public static void equals(Object a, Object b, String message) - { - equals(a, b, message, IllegalArgumentException::new); - } - - public static void equals(Object a, Object b, ThrowableSupplier throwable) - { - equals(a, b, null, throwable); - } - - public static void equals(Object a, Object b) - { - equals(a, b, (String) null); - } - - public interface ThrowableSupplier - { - RuntimeException apply(String message); - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/api/BoxRenderHelper.java b/src/main/java/net/swedz/extended_industrialization/api/BoxRenderHelper.java deleted file mode 100644 index bd41d002..00000000 --- a/src/main/java/net/swedz/extended_industrialization/api/BoxRenderHelper.java +++ /dev/null @@ -1,394 +0,0 @@ -package net.swedz.extended_industrialization.api; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.core.Direction; -import net.minecraft.world.phys.AABB; - -import java.util.function.Predicate; - -public final class BoxRenderHelper -{ - public static void renderFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x1, float y1, float z1, - float x2, float y2, float z2, - Direction direction, - float textureWidth, float textureHeight, float textureScale, - float red, float green, float blue, float alpha) - { - float u1, v1, u2, v2; - switch (direction) - { - case DOWN, UP -> - { - u1 = (x1 / textureWidth) / textureScale; - v1 = (z1 / textureHeight) / textureScale; - u2 = (x2 / textureWidth) / textureScale; - v2 = (z2 / textureHeight) / textureScale; - } - case NORTH, SOUTH -> - { - u1 = (x1 / textureWidth) / textureScale; - v1 = (y1 / textureHeight) / textureScale; - u2 = (x2 / textureWidth) / textureScale; - v2 = (y2 / textureHeight) / textureScale; - } - case WEST, EAST -> - { - u1 = (z1 / textureWidth) / textureScale; - v1 = (y1 / textureHeight) / textureScale; - u2 = (z2 / textureWidth) / textureScale; - v2 = (y2 / textureHeight) / textureScale; - } - default -> throw new IllegalStateException("Unexpected value: " + direction); - } - switch (direction) - { - case DOWN -> - { - addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha, u1, v1); - addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha, u2, v1); - addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha, u2, v2); - addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha, u1, v2); - } - case UP -> - { - addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha, u1, v1); - addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha, u2, v1); - addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha, u2, v2); - addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha, u1, v2); - } - case NORTH -> - { - addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha, u1, v1); - addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha, u2, v1); - addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha, u2, v2); - addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha, u1, v2); - } - case SOUTH -> - { - addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha, u1, v1); - addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha, u2, v1); - addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha, u2, v2); - addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha, u1, v2); - } - case WEST -> - { - addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha, u1, v1); - addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha, u2, v1); - addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha, u2, v2); - addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha, u1, v2); - } - case EAST -> - { - addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha, u1, v1); - addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha, u2, v1); - addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha, u2, v2); - addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha, u1, v2); - } - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x1, float y1, float z1, - float x2, float y2, float z2, - Iterable directions, - float textureWidth, float textureHeight, float textureScale, - float red, float green, float blue, float alpha) - { - for(Direction direction : directions) - { - renderFace( - matrices, light, overlay, vc, - x1, y1, z1, x2, y2, z2, - direction, - textureWidth, textureHeight, textureScale, - red, green, blue, alpha - ); - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x1, float y1, float z1, - float x2, float y2, float z2, - Predicate directionFilter, - float textureWidth, float textureHeight, float textureScale, - float red, float green, float blue, float alpha) - { - for(Direction direction : Direction.values()) - { - if(directionFilter.test(direction)) - { - renderFace( - matrices, light, overlay, vc, - x1, y1, z1, x2, y2, z2, - direction, - textureWidth, textureHeight, textureScale, - red, green, blue, alpha - ); - } - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x1, float y1, float z1, - float x2, float y2, float z2, - float textureWidth, float textureHeight, float textureScale, - float red, float green, float blue, float alpha) - { - renderBox( - matrices, light, overlay, vc, - x1, y1, z1, x2, y2, z2, - (__) -> true, - textureWidth, textureHeight, textureScale, - red, green, blue, alpha - ); - } - - public static void renderFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, - AABB box, Direction direction, - float textureWidth, float textureHeight, float textureScale, - float red, float green, float blue, float alpha) - { - renderFace( - matrices, light, overlay, vc, - (float) box.minX, (float) box.minY, (float) box.minZ, - (float) box.maxX, (float) box.maxY, (float) box.maxZ, - direction, - textureWidth, textureHeight, textureScale, - red, green, blue, alpha - ); - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - AABB box, Iterable directions, - float textureWidth, float textureHeight, float textureScale, - float red, float green, float blue, float alpha) - { - for(Direction direction : directions) - { - renderFace( - matrices, light, overlay, vc, - box, direction, - textureWidth, textureHeight, textureScale, - red, green, blue, alpha - ); - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - AABB box, Predicate directionFilter, - float textureWidth, float textureHeight, float textureScale, - float red, float green, float blue, float alpha) - { - for(Direction direction : Direction.values()) - { - if(directionFilter.test(direction)) - { - renderFace( - matrices, light, overlay, vc, - box, direction, - textureWidth, textureHeight, textureScale, - red, green, blue, alpha - ); - } - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - AABB box, - float textureWidth, float textureHeight, float textureScale, - float red, float green, float blue, float alpha) - { - renderBox( - matrices, light, overlay, vc, - box, (__) -> true, - textureWidth, textureHeight, textureScale, - red, green, blue, alpha - ); - } - - private static void addVertex(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x, float y, float z, - float red, float green, float blue, float alpha, - float u, float v) - { - PoseStack.Pose pose = matrices.last(); - vc.addVertex(pose, x, y, z) - .setColor(red, green, blue, alpha) - .setLight(light) - .setNormal(pose, 0, 0, 0) - .setOverlay(overlay) - .setUv(u, v); - } - - public static void renderFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x1, float y1, float z1, - float x2, float y2, float z2, - Direction direction, - float red, float green, float blue, float alpha) - { - switch (direction) - { - case DOWN -> - { - addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha); - } - case UP -> - { - addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha); - } - case NORTH -> - { - addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha); - } - case SOUTH -> - { - addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha); - } - case WEST -> - { - addVertex(matrices, light, overlay, vc, x1, y1, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x1, y1, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x1, y2, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x1, y2, z1, red, green, blue, alpha); - } - case EAST -> - { - addVertex(matrices, light, overlay, vc, x2, y1, z1, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y1, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y2, z2, red, green, blue, alpha); - addVertex(matrices, light, overlay, vc, x2, y2, z1, red, green, blue, alpha); - } - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x1, float y1, float z1, - float x2, float y2, float z2, - Iterable directions, - float red, float green, float blue, float alpha) - { - for(Direction direction : directions) - { - renderFace( - matrices, light, overlay, vc, - x1, y1, z1, x2, y2, z2, - direction, - red, green, blue, alpha - ); - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x1, float y1, float z1, - float x2, float y2, float z2, - Predicate directionFilter, - float red, float green, float blue, float alpha) - { - for(Direction direction : Direction.values()) - { - if(directionFilter.test(direction)) - { - renderFace( - matrices, light, overlay, vc, - x1, y1, z1, x2, y2, z2, - direction, - red, green, blue, alpha - ); - } - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x1, float y1, float z1, - float x2, float y2, float z2, - float red, float green, float blue, float alpha) - { - renderBox( - matrices, light, overlay, vc, - x1, y1, z1, x2, y2, z2, - (__) -> true, - red, green, blue, alpha - ); - } - - public static void renderFace(PoseStack matrices, int light, int overlay, VertexConsumer vc, - AABB box, Direction direction, - float red, float green, float blue, float alpha) - { - renderFace( - matrices, light, overlay, vc, - (float) box.minX, (float) box.minY, (float) box.minZ, - (float) box.maxX, (float) box.maxY, (float) box.maxZ, - direction, - red, green, blue, alpha - ); - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - AABB box, Iterable directions, - float red, float green, float blue, float alpha) - { - for(Direction direction : directions) - { - renderFace( - matrices, light, overlay, vc, - box, direction, - red, green, blue, alpha - ); - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - AABB box, Predicate directionFilter, - float red, float green, float blue, float alpha) - { - for(Direction direction : Direction.values()) - { - if(directionFilter.test(direction)) - { - renderFace( - matrices, light, overlay, vc, - box, direction, - red, green, blue, alpha - ); - } - } - } - - public static void renderBox(PoseStack matrices, int light, int overlay, VertexConsumer vc, - AABB box, - float red, float green, float blue, float alpha) - { - renderBox( - matrices, light, overlay, vc, - box, (__) -> true, - red, green, blue, alpha - ); - } - - private static void addVertex(PoseStack matrices, int light, int overlay, VertexConsumer vc, - float x, float y, float z, - float red, float green, float blue, float alpha) - { - PoseStack.Pose pose = matrices.last(); - vc.addVertex(pose, x, y, z) - .setColor(red, green, blue, alpha) - .setLight(light) - .setNormal(pose, 0, 0, 0) - .setOverlay(overlay); - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/api/ItemStackTooltipComponent.java b/src/main/java/net/swedz/extended_industrialization/api/ItemStackTooltipComponent.java deleted file mode 100644 index dbbcc276..00000000 --- a/src/main/java/net/swedz/extended_industrialization/api/ItemStackTooltipComponent.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.swedz.extended_industrialization.api; - -import net.minecraft.world.inventory.tooltip.TooltipComponent; -import net.minecraft.world.item.ItemStack; - -public record ItemStackTooltipComponent(ItemStack stack) implements TooltipComponent -{ -} diff --git a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java b/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java deleted file mode 100644 index 99840a26..00000000 --- a/src/main/java/net/swedz/extended_industrialization/api/WorldPos.java +++ /dev/null @@ -1,95 +0,0 @@ -package net.swedz.extended_industrialization.api; - -import com.mojang.serialization.Codec; -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import io.netty.buffer.ByteBuf; -import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.Registries; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.Level; -import net.swedz.tesseract.neoforge.proxy.Proxies; -import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; - -public record WorldPos(ResourceKey dimension, BlockPos pos) -{ - public static final MapCodec MAP_CODEC = RecordCodecBuilder.mapCodec((instance) -> instance - .group( - Level.RESOURCE_KEY_CODEC.fieldOf("dimension").forGetter(WorldPos::dimension), - BlockPos.CODEC.fieldOf("pos").forGetter(WorldPos::pos) - ) - .apply(instance, WorldPos::new)); - public static final Codec CODEC = MAP_CODEC.codec(); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ResourceKey.streamCodec(Registries.DIMENSION), - WorldPos::dimension, - BlockPos.STREAM_CODEC, - WorldPos::pos, - WorldPos::new - ); - - public WorldPos(Level level, BlockPos pos) - { - this(level.dimension(), pos); - } - - public ServerLevel level() - { - TesseractProxy proxy = Proxies.get(TesseractProxy.class); - if(!proxy.hasServer()) - { - throw new IllegalStateException("Cannot get level from world position on the client"); - } - return proxy.getServer().getLevel(dimension); - } - - public boolean isLoaded() - { - return this.level().isLoaded(pos); - } - - public boolean isTicking() - { - Level level = this.level(); - return level.tickRateManager().runsNormally() && - level.shouldTickBlocksAt(pos); - } - - public boolean isSameDimension(WorldPos other) - { - return dimension.equals(other.dimension()); - } - - public double distanceSqr(WorldPos other) - { - if(!this.isSameDimension(other)) - { - throw new IllegalArgumentException("Mismatching dimensions in distance check"); - } - return pos.distSqr(other.pos()); - } - - public int getX() - { - return pos.getX(); - } - - public int getY() - { - return pos.getY(); - } - - public int getZ() - { - return pos.getZ(); - } - - @Override - public int hashCode() - { - int dimensionHashCode = (31 * dimension.registry().hashCode() + dimension.location().hashCode()); - return 31 * dimensionHashCode + pos.hashCode(); - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index 387cb317..abed1af0 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -16,14 +16,14 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIComponents; -import net.swedz.extended_industrialization.api.BoxRenderHelper; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import net.swedz.tesseract.neoforge.api.WorldPos; +import net.swedz.tesseract.neoforge.helper.BoxRenderHelper; import team.lodestar.lodestone.handlers.RenderHandler; import team.lodestar.lodestone.registry.client.LodestoneRenderTypes; import team.lodestar.lodestone.systems.rendering.LodestoneRenderType; diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java index a75cfa06..58c90618 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java @@ -4,7 +4,7 @@ import com.google.common.collect.Maps; import net.minecraft.core.Direction; import net.minecraft.world.phys.Vec3; -import net.swedz.extended_industrialization.api.Assert; +import net.swedz.tesseract.neoforge.api.Assert; import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; import java.util.Arrays; diff --git a/src/main/java/net/swedz/extended_industrialization/client/tooltip/ItemStackClientTooltipComponent.java b/src/main/java/net/swedz/extended_industrialization/client/tooltip/ItemStackClientTooltipComponent.java deleted file mode 100644 index 206b3782..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/tooltip/ItemStackClientTooltipComponent.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.swedz.extended_industrialization.client.tooltip; - -import aztech.modern_industrialization.util.RenderHelper; -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; -import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; - -public record ItemStackClientTooltipComponent(ItemStackTooltipComponent component) implements ClientTooltipComponent -{ - @Override - public int getHeight() - { - return 20; - } - - @Override - public int getWidth(Font font) - { - return 18; - } - - @Override - public void renderImage(Font font, int mouseX, int mouseY, GuiGraphics graphics) - { - RenderHelper.renderAndDecorateItem(graphics, font, component.stack(), mouseX, mouseY); - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java index 9570bbc7..4aeb1f56 100644 --- a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java +++ b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java @@ -11,10 +11,10 @@ import net.neoforged.neoforge.event.RegisterCommandsEvent; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkCache; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import net.swedz.tesseract.neoforge.api.WorldPos; import static net.minecraft.commands.Commands.*; import static net.minecraft.commands.arguments.DimensionArgument.*; diff --git a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java index d1255afd..e127873b 100644 --- a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java +++ b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookListener.java @@ -3,8 +3,6 @@ import net.swedz.extended_industrialization.EIMachines; import net.swedz.extended_industrialization.EITooltips; import net.swedz.extended_industrialization.compat.viewer.common.FluidFertilizerCategory; -import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; -import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanelClient; import net.swedz.extended_industrialization.machines.guicomponent.processingarraymachineslot.ProcessingArrayMachineSlot; import net.swedz.extended_industrialization.machines.guicomponent.processingarraymachineslot.ProcessingArrayMachineSlotClient; import net.swedz.extended_industrialization.machines.guicomponent.solarefficiency.SolarEfficiencyBar; @@ -40,8 +38,6 @@ public void clientGuiComponents(ClientGuiComponentsMIHookContext hook) hook.register(ProcessingArrayMachineSlot.ID, ProcessingArrayMachineSlotClient::new); hook.register(UniversalTransformerSlots.ID, UniversalTransformerSlotsClient::new); hook.register(TeslaNetworkBar.ID, TeslaNetworkBarClient::new); - // TODO move to tesseract - hook.register(ModularSlotPanel.ID, ModularSlotPanelClient::new); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java index 428dbb5a..1d6e00cd 100644 --- a/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java +++ b/src/main/java/net/swedz/extended_industrialization/datamap/TeslaTowerTierData.java @@ -5,7 +5,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.block.Block; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; -import net.swedz.extended_industrialization.machines.tieredshapes.DataMultiblockTier; +import net.swedz.tesseract.neoforge.compat.mi.machine.multiblock.tieredshape.DataMultiblockTier; public record TeslaTowerTierData( long maxTransfer, int maxDistance, long drain diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java index d6a6493c..09b85fd1 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java @@ -7,7 +7,7 @@ import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.level.block.Block; -import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.tesseract.neoforge.api.WorldPos; public record SelectedTeslaNetwork(WorldPos key, Block block) { diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java index 3ace7920..4555a0ba 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java @@ -21,10 +21,10 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.tesseract.neoforge.api.WorldPos; +import net.swedz.tesseract.neoforge.tooltip.component.ItemStackTooltipComponent; import java.util.List; import java.util.Optional; diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java index 81cad1ed..4f5ab959 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java @@ -15,9 +15,9 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.api.ItemStackTooltipComponent; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.tesseract.neoforge.api.WorldPos; +import net.swedz.tesseract.neoforge.tooltip.component.ItemStackTooltipComponent; import java.util.List; import java.util.Optional; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java deleted file mode 100644 index e25dfcd8..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/SameCableTierShapeMatcher.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower; - -import aztech.modern_industrialization.api.energy.CableTier; -import aztech.modern_industrialization.machines.blockentities.hatches.EnergyHatch; -import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; -import aztech.modern_industrialization.machines.multiblocks.ShapeMatcher; -import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; -import com.google.common.collect.Sets; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.Level; - -import java.util.Set; -import java.util.function.Consumer; - -public class SameCableTierShapeMatcher extends ShapeMatcher -{ - protected final Consumer mismatchingHatchesCallback; - - public SameCableTierShapeMatcher(Level level, BlockPos controllerPos, Direction controllerDirection, ShapeTemplate template, Consumer mismatchingHatchesCallback) - { - super(level, controllerPos, controllerDirection, template); - this.mismatchingHatchesCallback = mismatchingHatchesCallback; - } - - @Override - protected boolean checkRematch(Level world) - { - boolean hasMismatchingHatches = false; - Set tiers = Sets.newHashSet(); - for(HatchBlockEntity hatch : this.getMatchedHatches()) - { - if(hatch instanceof EnergyHatch energyHatch) - { - tiers.add(energyHatch.getCableTier()); - if(tiers.size() > 1) - { - hasMismatchingHatches = true; - break; - } - } - } - mismatchingHatchesCallback.accept(hasMismatchingHatches); - return !hasMismatchingHatches; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index b312dcb2..43c8182f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -25,7 +25,6 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; @@ -38,9 +37,11 @@ import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; import net.swedz.extended_industrialization.machines.guicomponent.EIModularSlotPanelSlots; -import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; +import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; +import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; +import net.swedz.tesseract.neoforge.compat.mi.machine.multiblock.matcher.SameCableTierShapeMatcher; import java.util.List; import java.util.Map; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index 6ebed03f..dbd2b6e8 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -9,7 +9,7 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIDataMaps; import net.swedz.extended_industrialization.datamap.TeslaTowerTierData; -import net.swedz.extended_industrialization.machines.tieredshapes.DataMapMultiblockTieredShapes; +import net.swedz.tesseract.neoforge.compat.mi.machine.multiblock.tieredshape.DataMapMultiblockTieredShapes; import java.util.Comparator; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java index 2c7f640c..9b0e9257 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerTier.java @@ -2,7 +2,7 @@ import net.minecraft.resources.ResourceLocation; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.machines.tieredshapes.MultiblockTier; +import net.swedz.tesseract.neoforge.compat.mi.machine.multiblock.tieredshape.MultiblockTier; public record TeslaTowerTier( ResourceLocation blockId, long maxTransfer, int maxDistance, long drain diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index c010a064..38384ed1 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -36,9 +36,9 @@ import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; -import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; +import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; import java.util.List; import java.util.Optional; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/farmer/harvesting/harvestable/TreeHarvestable.java b/src/main/java/net/swedz/extended_industrialization/machines/component/farmer/harvesting/harvestable/TreeHarvestable.java index e537b9b8..3c574ff2 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/farmer/harvesting/harvestable/TreeHarvestable.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/farmer/harvesting/harvestable/TreeHarvestable.java @@ -7,9 +7,9 @@ import net.neoforged.bus.api.Event; import net.swedz.extended_industrialization.machines.component.farmer.block.FarmerBlockMap; import net.swedz.extended_industrialization.machines.component.farmer.block.FarmerTree; +import net.swedz.extended_industrialization.machines.component.farmer.harvesting.FarmerListener; import net.swedz.extended_industrialization.machines.component.farmer.harvesting.HarvestingContext; import net.swedz.extended_industrialization.machines.component.farmer.harvesting.LootTableHarvestableBehavior; -import net.swedz.extended_industrialization.machines.component.farmer.harvesting.FarmerListener; import net.swedz.tesseract.neoforge.event.TreeGrowthEvent; import java.util.Arrays; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/farmer/planting/plantable/SpecialFarmerPlantable.java b/src/main/java/net/swedz/extended_industrialization/machines/component/farmer/planting/plantable/SpecialFarmerPlantable.java index 063e2a3a..0b072d29 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/farmer/planting/plantable/SpecialFarmerPlantable.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/farmer/planting/plantable/SpecialFarmerPlantable.java @@ -4,8 +4,8 @@ import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.common.SpecialPlantable; import net.swedz.extended_industrialization.EITags; -import net.swedz.extended_industrialization.machines.component.farmer.planting.PlantingContext; import net.swedz.extended_industrialization.machines.component.farmer.planting.FarmerPlantable; +import net.swedz.extended_industrialization.machines.component.farmer.planting.PlantingContext; public final class SpecialFarmerPlantable implements FarmerPlantable { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java deleted file mode 100644 index f3299263..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/SimpleItemStackComponent.java +++ /dev/null @@ -1,274 +0,0 @@ -package net.swedz.extended_industrialization.machines.component.itemslot; - -import aztech.modern_industrialization.machines.IComponent; -import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.machines.components.CasingComponent; -import aztech.modern_industrialization.machines.components.DropableComponent; -import aztech.modern_industrialization.machines.components.OverdriveComponent; -import aztech.modern_industrialization.machines.components.RedstoneControlComponent; -import aztech.modern_industrialization.machines.components.UpgradeComponent; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.item.ItemStack; - -public class SimpleItemStackComponent implements IComponent, DropableComponent -{ - public interface UpdatedCallback - { - void onUpdate(ItemStack from, ItemStack to); - } - - protected final String stackTagKey; - - protected final UpdatedCallback callback; - - protected ItemStack stack = ItemStack.EMPTY; - - public SimpleItemStackComponent(String stackTagKey, UpdatedCallback callback) - { - this.stackTagKey = stackTagKey; - this.callback = callback; - } - - public SimpleItemStackComponent(String stackTagKey) - { - this(stackTagKey, null); - } - - public ItemStack getStack() - { - return stack; - } - - public void setStackServer(MachineBlockEntity machine, ItemStack stack) - { - ItemStack previous = this.stack; - this.stack = stack; - machine.setChanged(); - machine.sync(); - if(callback != null) - { - callback.onUpdate(previous, stack); - } - } - - @Override - public ItemStack getDrop() - { - return stack; - } - - @Override - public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) - { - tag.put(stackTagKey, stack.saveOptional(registries)); - } - - @Override - public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) - { - stack = ItemStack.parseOptional(registries, tag.getCompound(stackTagKey)); - } - - @Override - public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - } - - @Override - public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - } - - public static SimpleItemStackComponent wrap(RedstoneControlComponent component) - { - return new SimpleItemStackComponent("redstoneModuleStack") - { - @Override - public ItemStack getStack() - { - return component.getDrop(); - } - - @Override - public void setStackServer(MachineBlockEntity machine, ItemStack stack) - { - component.setStackServer(machine, stack); - } - - @Override - public ItemStack getDrop() - { - return component.getDrop(); - } - - @Override - public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.writeNbt(tag, registries); - } - - @Override - public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) - { - component.readNbt(tag, registries, isUpgradingMachine); - } - - @Override - public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.writeClientNbt(tag, registries); - } - - @Override - public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.readClientNbt(tag, registries); - } - }; - } - - public static SimpleItemStackComponent wrap(UpgradeComponent component) - { - return new SimpleItemStackComponent("upgradesItemStack") - { - @Override - public ItemStack getStack() - { - return component.getDrop(); - } - - @Override - public void setStackServer(MachineBlockEntity machine, ItemStack stack) - { - component.setStackServer(machine, stack); - } - - @Override - public ItemStack getDrop() - { - return component.getDrop(); - } - - @Override - public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.writeNbt(tag, registries); - } - - @Override - public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) - { - component.readNbt(tag, registries, isUpgradingMachine); - } - - @Override - public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.writeClientNbt(tag, registries); - } - - @Override - public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.readClientNbt(tag, registries); - } - }; - } - - public static SimpleItemStackComponent wrap(OverdriveComponent component) - { - return new SimpleItemStackComponent("overdriveModuleStack") - { - @Override - public ItemStack getStack() - { - return component.getDrop(); - } - - @Override - public void setStackServer(MachineBlockEntity machine, ItemStack stack) - { - component.setStackServer(machine, stack); - } - - @Override - public ItemStack getDrop() - { - return component.getDrop(); - } - - @Override - public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.writeNbt(tag, registries); - } - - @Override - public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) - { - component.readNbt(tag, registries, isUpgradingMachine); - } - - @Override - public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.writeClientNbt(tag, registries); - } - - @Override - public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.readClientNbt(tag, registries); - } - }; - } - - public static SimpleItemStackComponent wrap(CasingComponent component) - { - return new SimpleItemStackComponent("casing") - { - @Override - public ItemStack getStack() - { - return component.getDrop(); - } - - @Override - public void setStackServer(MachineBlockEntity machine, ItemStack stack) - { - component.setCasingServer(machine, stack); - } - - @Override - public ItemStack getDrop() - { - return component.getDrop(); - } - - @Override - public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.writeNbt(tag, registries); - } - - @Override - public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) - { - component.readNbt(tag, registries, isUpgradingMachine); - } - - @Override - public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.writeClientNbt(tag, registries); - } - - @Override - public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) - { - component.readClientNbt(tag, registries); - } - }; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java index 03727f0f..117c47f2 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/itemslot/TeslaTowerUpgradeComponent.java @@ -6,6 +6,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.swedz.extended_industrialization.EIItems; +import net.swedz.tesseract.neoforge.compat.mi.component.SimpleItemStackComponent; public class TeslaTowerUpgradeComponent extends SimpleItemStackComponent { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index 5acc749f..cf5597b2 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -3,9 +3,9 @@ import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.MIEnergyStorage; import com.google.common.collect.Sets; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.tesseract.neoforge.api.WorldPos; import java.util.Optional; import java.util.Set; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java index d2fb6d25..011e1b9f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java @@ -3,7 +3,7 @@ import com.google.common.collect.Maps; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; -import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.tesseract.neoforge.api.WorldPos; import java.util.Map; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java index c861c8c6..60398fa1 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java @@ -1,7 +1,7 @@ package net.swedz.extended_industrialization.machines.component.tesla; import aztech.modern_industrialization.api.energy.CableTier; -import net.swedz.extended_industrialization.api.WorldPos; +import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java index fd008fb6..ea0d63a1 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java @@ -6,8 +6,8 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; +import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.compat.mi.helper.ChargeInventoryHelper; import net.swedz.tesseract.neoforge.proxy.Proxies; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index 0f20af24..f29026ee 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -1,10 +1,10 @@ package net.swedz.extended_industrialization.machines.component.tesla.receiver; import aztech.modern_industrialization.api.energy.CableTier; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.tesseract.neoforge.api.WorldPos; public interface TeslaReceiver extends TeslaNetworkPart { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java index 99532b95..a285dbb4 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java @@ -8,8 +8,8 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java index a79b3971..ab0f1c1b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java @@ -1,9 +1,9 @@ package net.swedz.extended_industrialization.machines.component.tesla.transmitter; import aztech.modern_industrialization.api.energy.CableTier; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; +import net.swedz.tesseract.neoforge.api.WorldPos; public interface TeslaTransmitter extends TeslaNetworkPart, TeslaTransferLimits { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java index 0e995a21..bc1627e3 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java @@ -9,10 +9,10 @@ import dev.technici4n.grandpower.api.EnergyStorageUtil; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; +import net.swedz.tesseract.neoforge.api.WorldPos; import java.util.List; import java.util.Optional; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java index 8997fb3d..d295b34b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/EIModularSlotPanelSlots.java @@ -7,7 +7,7 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIItems; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.machines.guicomponent.modularslots.ModularSlotPanel; +import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; import java.util.function.Predicate; import java.util.function.Supplier; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java deleted file mode 100644 index a9590e08..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanel.java +++ /dev/null @@ -1,260 +0,0 @@ -package net.swedz.extended_industrialization.machines.guicomponent.modularslots; - -import aztech.modern_industrialization.MI; -import aztech.modern_industrialization.inventory.HackySlot; -import aztech.modern_industrialization.inventory.SlotGroup; -import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.machines.components.CasingComponent; -import aztech.modern_industrialization.machines.components.OverdriveComponent; -import aztech.modern_industrialization.machines.components.RedstoneControlComponent; -import aztech.modern_industrialization.machines.components.UpgradeComponent; -import aztech.modern_industrialization.machines.gui.GuiComponent; -import aztech.modern_industrialization.machines.gui.MachineGuiParameters; -import aztech.modern_industrialization.machines.guicomponents.SlotPanel; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.machines.component.itemslot.SimpleItemStackComponent; - -import java.util.List; -import java.util.Map; -import java.util.function.Predicate; -import java.util.function.Supplier; - -import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; - -public final class ModularSlotPanel -{ - public static final ResourceLocation ID = EI.id("modular_slot_panel"); - - private static final Map SLOTS = Maps.newHashMap(); - - public static final ResourceLocation REDSTONE_MODULE = registerMISlot("redstone_module", SlotPanel.SlotType.REDSTONE_MODULE); - public static final ResourceLocation UPGRADES = registerMISlot("upgrades", SlotPanel.SlotType.UPGRADES); - public static final ResourceLocation CASINGS = registerMISlot("casings", SlotPanel.SlotType.CASINGS); - public static final ResourceLocation OVERDRIVE_MODULE = registerMISlot("overdrive_module", SlotPanel.SlotType.OVERDRIVE_MODULE); - - public static ResourceLocation registerSlot(ResourceLocation id, SlotGroup group, - int stackLimit, Predicate insertionChecker, - ResourceLocation atlas, int u, int v, - Supplier tooltip) - { - if(SLOTS.containsKey(id)) - { - throw new IllegalArgumentException("There is already a slot type registered for the id '" + id.toString() + "'"); - } - SLOTS.put(id, new Slot(id, group, stackLimit, insertionChecker, atlas, u, v, tooltip)); - return id; - } - - private static ResourceLocation registerMISlot(String name, SlotPanel.SlotType slotType) - { - return registerSlot(MI.id(name), slotType.group, slotType.slotLimit, slotType.insertionChecker, null, slotType.u, slotType.v, () -> line(slotType.tooltip)); - } - - static Slot getSlot(ResourceLocation id) - { - Slot slot = SLOTS.get(id); - if(slot == null) - { - throw new IllegalArgumentException("Could not find slot with id '" + id.toString() + "'"); - } - return slot; - } - - static int getSlotX(MachineGuiParameters guiParameters) - { - return guiParameters.backgroundWidth + 6; - } - - static int getSlotY(int index) - { - return 19 + (index * 20); - } - - public static final class Server implements GuiComponent.Server - { - private final MachineBlockEntity machine; - - private final int offsetY; - - private final List slotIds = Lists.newArrayList(); - private final List slots = Lists.newArrayList(); - private final List> stackLimits = Lists.newArrayList(); - private final List slotComponents = Lists.newArrayList(); - - public Server(MachineBlockEntity machine, int offsetY) - { - this.machine = machine; - this.offsetY = offsetY; - } - - private Server with(Slot slot, Supplier stackLimit, SimpleItemStackComponent component) - { - slotIds.add(slot.id()); - slots.add(slot); - stackLimits.add(stackLimit); - slotComponents.add(component); - return this; - } - - public Server with(ResourceLocation slotId, Supplier stackLimit, SimpleItemStackComponent component) - { - return this.with(getSlot(slotId), stackLimit, component); - } - - private Server with(Slot slot, SimpleItemStackComponent component) - { - return this.with(slot, slot::stackLimit, component); - } - - public Server with(ResourceLocation slotId, SimpleItemStackComponent component) - { - return this.with(getSlot(slotId), component); - } - - public Server withRedstoneModule(RedstoneControlComponent component) - { - return this.with(REDSTONE_MODULE, SimpleItemStackComponent.wrap(component)); - } - - public Server withUpgrades(UpgradeComponent component) - { - return this.with(UPGRADES, SimpleItemStackComponent.wrap(component)); - } - - public Server withCasings(CasingComponent component) - { - return this.with(CASINGS, SimpleItemStackComponent.wrap(component)); - } - - public Server withOverdrive(OverdriveComponent component) - { - return this.with(OVERDRIVE_MODULE, SimpleItemStackComponent.wrap(component)); - } - - @Override - public Data copyData() - { - return new Data(stackLimits); - } - - @Override - public boolean needsSync(Data cachedData) - { - return !cachedData.equals(this.copyData()); - } - - @Override - public void writeInitialData(RegistryFriendlyByteBuf buf) - { - buf.writeVarInt(offsetY); - - buf.writeVarInt(slots.size()); - for(ResourceLocation slotId : slotIds) - { - buf.writeResourceLocation(slotId); - } - - this.writeCurrentData(buf); - } - - @Override - public void writeCurrentData(RegistryFriendlyByteBuf buf) - { - for(Supplier limit : stackLimits) - { - buf.writeVarInt(limit.get()); - } - } - - @Override - public void setupMenu(GuiComponent.MenuFacade menu) - { - for(int i = 0; i < slots.size(); i++) - { - Slot slot = slots.get(i); - Supplier stackLimit = stackLimits.get(i); - SimpleItemStackComponent component = slotComponents.get(i); - - menu.addSlotToMenu(new HackySlot(getSlotX(machine.guiParams), getSlotY(i)) - { - @Override - protected ItemStack getRealStack() - { - return component.getStack().copy(); - } - - @Override - protected void setRealStack(ItemStack stack) - { - component.setStackServer(machine, stack); - } - - @Override - public boolean mayPlace(ItemStack stack) - { - return slot.insertionChecker().test(stack); - } - - @Override - public int getMaxStackSize() - { - return stackLimit.get(); - } - }, slot.group()); - } - } - - @Override - public ResourceLocation getId() - { - return ID; - } - } - - public record Data(List> stackLimits) - { - @Override - public boolean equals(Object o) - { - if(this == o) - { - return true; - } - if(o == null || this.getClass() != o.getClass()) - { - return false; - } - - Data other = (Data) o; - - if(stackLimits.size() != other.stackLimits().size()) - { - return false; - } - for(int i = 0; i < stackLimits.size(); i++) - { - if(!stackLimits.get(i).equals(other.stackLimits.get(i))) - { - return false; - } - } - - return true; - } - } - - public record Slot( - ResourceLocation id, SlotGroup group, - int stackLimit, Predicate insertionChecker, - ResourceLocation atlas, int u, int v, - Supplier tooltip - ) - { - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java deleted file mode 100644 index ac2ffb2e..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/modularslots/ModularSlotPanelClient.java +++ /dev/null @@ -1,162 +0,0 @@ -package net.swedz.extended_industrialization.machines.guicomponent.modularslots; - -import aztech.modern_industrialization.inventory.BackgroundRenderedSlot; -import aztech.modern_industrialization.machines.gui.ClientComponentRenderer; -import aztech.modern_industrialization.machines.gui.GuiComponent; -import aztech.modern_industrialization.machines.gui.GuiComponentClient; -import aztech.modern_industrialization.machines.gui.MachineScreen; -import aztech.modern_industrialization.util.Rectangle; -import com.google.common.collect.Lists; -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.Container; -import net.minecraft.world.SimpleContainer; -import net.minecraft.world.inventory.Slot; -import net.minecraft.world.item.ItemStack; - -import java.util.List; -import java.util.function.Supplier; - -public final class ModularSlotPanelClient implements GuiComponentClient -{ - private final int offsetY; - - private final List slots = Lists.newArrayList(); - private final List stackLimits = Lists.newArrayList(); - - public ModularSlotPanelClient(RegistryFriendlyByteBuf buf) - { - offsetY = buf.readVarInt(); - - int count = buf.readVarInt(); - for(int i = 0; i < count; i++) - { - slots.add(ModularSlotPanel.getSlot(buf.readResourceLocation())); - } - - this.readCurrentData(buf); - } - - @Override - public void readCurrentData(RegistryFriendlyByteBuf buf) - { - stackLimits.clear(); - for(int i = 0; i < slots.size(); i++) - { - stackLimits.add(buf.readVarInt()); - } - } - - @Override - public void setupMenu(GuiComponent.MenuFacade menu) - { - for(int i = 0; i < slots.size(); i++) - { - int slotIndex = i; - ModularSlotPanel.Slot slot = slots.get(slotIndex); - Supplier stackLimit = () -> stackLimits.get(slotIndex); - - class ClientSlot extends SlotWithBackground implements SlotTooltip - { - public ClientSlot() - { - super(new SimpleContainer(1), 0, ModularSlotPanel.getSlotX(menu.getGuiParams()), ModularSlotPanel.getSlotY(slotIndex) + offsetY); - } - - @Override - public boolean mayPlace(ItemStack stack) - { - return slot.insertionChecker().test(stack); - } - - @Override - public int getMaxStackSize() - { - return stackLimit.get(); - } - - @Override - public ResourceLocation getBackgroundAtlasLocation() - { - ResourceLocation atlas = slot.atlas(); - return atlas == null ? super.getBackgroundAtlasLocation() : atlas; - } - - @Override - public int getBackgroundU() - { - return this.hasItem() ? 0 : slot.u(); - } - - @Override - public int getBackgroundV() - { - return this.hasItem() ? 0 : slot.v(); - } - - @Override - public Component getTooltip() - { - return slot.tooltip().get(); - } - } - menu.addSlotToMenu(new ClientSlot(), slot.group()); - } - } - - @Override - public ClientComponentRenderer createRenderer(MachineScreen machineScreen) - { - return new ClientComponentRenderer() - { - private Rectangle getBox(int leftPos, int topPos) - { - return new Rectangle(leftPos + machineScreen.getGuiParams().backgroundWidth, topPos + 10 + offsetY, 31, 14 + (slots.size() * 20)); - } - - @Override - public void addExtraBoxes(List rectangles, int leftPos, int topPos) - { - rectangles.add(this.getBox(leftPos, topPos)); - } - - @Override - public void renderBackground(GuiGraphics graphics, int x, int y) - { - Rectangle box = this.getBox(x, y); - int textureX = box.x() - x - box.w(); - graphics.blit(MachineScreen.BACKGROUND, box.x(), box.y(), textureX, 0, box.w(), box.h() - 4); - graphics.blit(MachineScreen.BACKGROUND, box.x(), box.y() + box.h() - 4, textureX, 252, box.w(), 4); - } - - @Override - public void renderTooltip(MachineScreen screen, Font font, GuiGraphics graphics, int x, int y, int cursorX, int cursorY) - { - Slot slot = screen.getFocusedSlot(); - if(slot instanceof SlotTooltip tooltip) - { - if(!screen.getFocusedSlot().hasItem()) - { - graphics.renderTooltip(font, tooltip.getTooltip(), cursorX, cursorY); - } - } - } - }; - } - - interface SlotTooltip - { - Component getTooltip(); - } - - public static class SlotWithBackground extends Slot implements BackgroundRenderedSlot - { - public SlotWithBackground(Container container, int index, int x, int y) - { - super(container, index, x, y); - } - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java index f65b7386..05a90190 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java @@ -5,8 +5,8 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.tesseract.neoforge.api.WorldPos; import java.util.Optional; import java.util.function.Supplier; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java index e13ee5f4..184c1b47 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java @@ -13,8 +13,8 @@ import net.minecraft.resources.ResourceLocation; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.helper.ComponentHelper; import java.util.List; @@ -115,8 +115,10 @@ else if(data.get() instanceof TeslaNetworkBar.ReceiverData receiver) switch (receiver.state()) { case NO_LINK -> lines.add(EIText.TESLA_NETWORK_RECEIVER_NO_LINK.text()); - case UNLOADED_TRANSMITTER -> lines.add(EIText.TESLA_NETWORK_RECEIVER_UNLOADED.text()); - case MISMATCHING_VOLTAGE -> lines.add(EIText.TESLA_NETWORK_RECEIVER_MISMATCHING_VOLTAGE.arg(receiver.networkCableTier().orElseThrow(), CABLE_TIER_SHORT)); + case UNLOADED_TRANSMITTER -> + lines.add(EIText.TESLA_NETWORK_RECEIVER_UNLOADED.text()); + case MISMATCHING_VOLTAGE -> + lines.add(EIText.TESLA_NETWORK_RECEIVER_MISMATCHING_VOLTAGE.arg(receiver.networkCableTier().orElseThrow(), CABLE_TIER_SHORT)); case TOO_FAR -> lines.add(EIText.TESLA_NETWORK_RECEIVER_TOO_FAR.text()); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMapMultiblockTieredShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMapMultiblockTieredShapes.java deleted file mode 100644 index d7f99d54..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMapMultiblockTieredShapes.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.swedz.extended_industrialization.machines.tieredshapes; - -import com.google.common.collect.Lists; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.Block; -import net.neoforged.neoforge.registries.datamaps.DataMapType; - -import java.util.Comparator; -import java.util.List; - -public abstract class DataMapMultiblockTieredShapes> extends MultiblockTieredShapes -{ - private final DataMapType tierDataMap; - - public DataMapMultiblockTieredShapes(ResourceLocation machineId, Comparator tierSort, DataMapType tierDataMap) - { - super(machineId, tierSort); - this.tierDataMap = tierDataMap; - } - - @Override - protected List buildTiers() - { - List newTiers = Lists.newArrayList(); - - BuiltInRegistries.BLOCK.getDataMap(tierDataMap).forEach((block, tier) -> - newTiers.add(tier.wrap(block))); - - return newTiers; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMultiblockTier.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMultiblockTier.java deleted file mode 100644 index ccfee0f2..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/DataMultiblockTier.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.swedz.extended_industrialization.machines.tieredshapes; - -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.block.Block; - -public interface DataMultiblockTier -{ - T wrap(ResourceKey key); -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTier.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTier.java deleted file mode 100644 index 7df7960e..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTier.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.swedz.extended_industrialization.machines.tieredshapes; - -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; - -public interface MultiblockTier -{ - ResourceLocation blockId(); - - String getTranslationKey(); - - default Component getDisplayName() - { - return Component.translatable(this.getTranslationKey()); - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java deleted file mode 100644 index 141638cd..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/tieredshapes/MultiblockTieredShapes.java +++ /dev/null @@ -1,129 +0,0 @@ -package net.swedz.extended_industrialization.machines.tieredshapes; - -import aztech.modern_industrialization.compat.rei.machines.ReiMachineRecipes; -import aztech.modern_industrialization.machines.components.ActiveShapeComponent; -import aztech.modern_industrialization.machines.guicomponents.ShapeSelection; -import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBlockEntity; -import aztech.modern_industrialization.machines.multiblocks.ShapeTemplate; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import net.minecraft.core.registries.Registries; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.neoforged.bus.api.EventPriority; -import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.registries.datamaps.DataMapsUpdatedEvent; -import net.swedz.tesseract.neoforge.compat.mi.helper.CommonGuiComponents; - -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -public abstract class MultiblockTieredShapes -{ - protected final ResourceLocation machineId; - - private final Comparator tierSort; - - protected List tiers = List.of(); - protected Map tiersByBlock = Collections.unmodifiableMap(Maps.newHashMap()); - - private ShapeTemplate[] shapeTemplates = new ShapeTemplate[0]; - - public MultiblockTieredShapes(ResourceLocation machineId, Comparator tierSort) - { - this.machineId = machineId; - this.tierSort = tierSort; - } - - public final ResourceLocation machineId() - { - return machineId; - } - - public final List tiers() - { - return tiers; - } - - public final Map tiersByBlock() - { - return tiersByBlock; - } - - public final ShapeTemplate[] shapeTemplates() - { - return shapeTemplates; - } - - protected abstract List buildTiers(); - - private void invalidateTiers() - { - List newTiers = Lists.newArrayList(); - newTiers.addAll(this.buildTiers()); - newTiers.sort(tierSort); - - tiers = Collections.unmodifiableList(newTiers); - tiersByBlock = tiers.stream().collect(Collectors.toMap(MultiblockTier::blockId, Function.identity())); - } - - protected abstract void buildShapeTemplates(ShapeTemplate[] shapeTemplates); - - private void invalidateShapeTemplates() - { - shapeTemplates = new ShapeTemplate[tiers.size()]; - this.buildShapeTemplates(shapeTemplates); - } - - protected void invalidateRecipeViewerShapes() - { - ReiMachineRecipes.multiblockShapes.removeIf((e) -> e.machine().equals(machineId)); - int index = 0; - for(ShapeTemplate shapeTemplate : shapeTemplates) - { - ReiMachineRecipes.registerMultiblockShape(machineId, shapeTemplate, "" + index); - index++; - } - } - - private void invalidate() - { - this.invalidateTiers(); - this.invalidateShapeTemplates(); - this.invalidateRecipeViewerShapes(); - } - - public ShapeSelection.Server createShapeSelectionGuiComponent(MultiblockMachineBlockEntity machine, ActiveShapeComponent activeShape, boolean useArrows) - { - List tierNames = tiers.stream().map(MultiblockTier::getDisplayName).toList(); - return CommonGuiComponents.rangedShapeSelection(machine, activeShape, tierNames, useArrows); - } - - public final void register() - { - NeoForge.EVENT_BUS.addListener(EventPriority.LOWEST, DataMapsUpdatedEvent.class, (event) -> - event.ifRegistry(Registries.BLOCK, (registry) -> this.invalidate())); - } - - protected static String[][] layersConvertFromVertical(String[][] input) - { - int rows = input[0].length; - int columns = input.length; - - String[][] result = new String[rows][columns]; - - for(int row = 0; row < rows; row++) - { - for(int column = 0; column < columns; column++) - { - result[row][column] = input[column][row]; - } - } - - return result; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java index 69784fb1..babaa9db 100644 --- a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java @@ -1,8 +1,8 @@ package net.swedz.extended_industrialization.mixin; import net.minecraft.server.MinecraftServer; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkCache; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkHolder; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java index ce619de8..ca7a425c 100644 --- a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java @@ -11,12 +11,12 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.swedz.extended_industrialization.EIComponents; -import net.swedz.extended_industrialization.api.WorldPos; import net.swedz.extended_industrialization.item.teslalinkable.TeslaHandheldReceiverItem; import net.swedz.extended_industrialization.machines.component.tesla.TeslaReceiverHolder; import net.swedz.extended_industrialization.machines.component.tesla.receiver.PlayerTeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; +import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.proxy.Proxies; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; From 86431e04c5e042860f471273aecb28d69c05a08a Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 04:18:32 -0500 Subject: [PATCH 109/159] Fix orientation of top load position --- .../multiblock/teslatower/TeslaTowerBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 43c8182f..c12739b6 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -143,7 +143,7 @@ public BlockPos getTopLoadPosition() { Direction facing = orientation.facingDirection; BlockPos topLoadCenter = worldPosition - .relative(facing.getAxis(), -3) + .relative(facing, -3) .above(14); return topLoadCenter.subtract(worldPosition); } From 4ff9bf7c7e71ff754ad8dc2ac36f77675f2a949b Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 05:30:50 -0500 Subject: [PATCH 110/159] Fix player receivers not getting properly tracked --- .../teslatower/TeslaTowerBlockEntity.java | 12 ++++++---- .../component/tesla/TeslaNetwork.java | 8 ++++++- .../tesla/receiver/PlayerTeslaReceiver.java | 6 +++++ .../tesla/receiver/TeslaReceiver.java | 5 ++++ .../TeslaNetworkReceiversPlayerMixin.java | 24 +++++++++---------- 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index c12739b6..2dcd6b85 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -86,7 +86,7 @@ public TeslaTowerBlockEntity(BEP bep) arcs = new TeslaArcs( 1f, 3, 6, 4, 8, 15, 10, - () -> Vec3.atCenterOf(this.getTopLoadPosition()) + () -> Vec3.atCenterOf(this.getTopLoadPositionRelative()) ); this.registerComponents(redstoneControl, upgrade, transmitter); @@ -142,10 +142,14 @@ private void onUpgradeUpdate(ItemStack from, ItemStack to) public BlockPos getTopLoadPosition() { Direction facing = orientation.facingDirection; - BlockPos topLoadCenter = worldPosition + return worldPosition .relative(facing, -3) .above(14); - return topLoadCenter.subtract(worldPosition); + } + + public BlockPos getTopLoadPositionRelative() + { + return this.getTopLoadPosition().subtract(worldPosition); } @Override @@ -181,7 +185,7 @@ public boolean shouldRender() @Override public Vec3 getOffset() { - return Vec3.atLowerCornerOf(TeslaTowerBlockEntity.this.getTopLoadPosition()); + return Vec3.atLowerCornerOf(TeslaTowerBlockEntity.this.getTopLoadPositionRelative()); } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java index cf5597b2..240edf10 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java @@ -86,7 +86,7 @@ public void updateAll() private void update(TeslaReceiver receiver) { - if(this.isTransmitterLoaded() && receiver.checkReceiveFrom(this).isSuccess()) + if(this.isTransmitterLoaded() && (receiver.isMobile() || receiver.checkReceiveFrom(this).isSuccess())) { receivers.add(receiver); } @@ -143,6 +143,12 @@ public long receive(long maxReceive, boolean simulate) int index = 0; for(TeslaReceiver receiver : receivers) { + if(receiver.isMobile() && receiver.checkReceiveFrom(this).isFailure()) + { + index++; + continue; + } + int remainingStorages = receivers.size() - index; long amountToReceive = remainingStorages == 1 ? remaining : remaining / remainingStorages; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java index ea0d63a1..5c9c036b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java @@ -24,6 +24,12 @@ public PlayerTeslaReceiver(Player player, WorldPos networkKey) this.networkKey = networkKey; } + @Override + public boolean isMobile() + { + return true; + } + @Override public long receiveEnergy(long maxReceive, boolean simulate) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java index f29026ee..38e65b64 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java @@ -8,6 +8,11 @@ public interface TeslaReceiver extends TeslaNetworkPart { + default boolean isMobile() + { + return false; + } + default TeslaReceiverState checkReceiveFrom(TeslaNetwork network) { TeslaTransmitter transmitter = network.getTransmitter(); diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java index ca7a425c..87f51ac8 100644 --- a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java @@ -42,11 +42,11 @@ protected TeslaNetworkReceiversPlayerMixin(EntityType en } @Unique - private final Map receivers = Maps.newHashMap(); + private final Map playerReceivers = Maps.newHashMap(); public Collection teslaNetwork$getTeslaReceivers() { - return Collections.unmodifiableCollection(receivers.values()); + return Collections.unmodifiableCollection(playerReceivers.values()); } @Unique @@ -78,30 +78,28 @@ private void tick(CallbackInfo callback) return; } - Map found = Maps.newHashMap(); - + Set found = Sets.newHashSet(); for(ItemStack stack : this.getAllItems()) { if(stack.getItem() instanceof TeslaHandheldReceiverItem && stack.has(EIComponents.SELECTED_TESLA_NETWORK)) { - WorldPos key = stack.get(EIComponents.SELECTED_TESLA_NETWORK).key(); - found.computeIfAbsent(key, (k) -> new PlayerTeslaReceiver(player, k)); + found.add(stack.get(EIComponents.SELECTED_TESLA_NETWORK).key()); } } - Set toRemove = Sets.difference(receivers.keySet(), found.keySet()); + Set toRemove = Sets.difference(playerReceivers.keySet(), found); for(WorldPos key : toRemove) { - TeslaReceiver receiver = receivers.remove(key); + PlayerTeslaReceiver receiver = playerReceivers.remove(key); receiver.getNetwork().remove(receiver); } - Set toAdd = Sets.difference(found.keySet(), receivers.keySet()); + Set toAdd = Sets.difference(found, playerReceivers.keySet()); for(WorldPos key : toAdd) { - TeslaReceiver receiver = found.get(key); + PlayerTeslaReceiver receiver = new PlayerTeslaReceiver(player, key); receiver.getNetwork().add(receiver); - receivers.put(key, receiver); + playerReceivers.put(key, receiver); } } @@ -117,7 +115,7 @@ private void remove(Entity.RemovalReason reason, return; } - receivers.forEach((key, receiver) -> receiver.getNetwork().remove(receiver)); - receivers.clear(); + playerReceivers.forEach((key, receiver) -> receiver.getNetwork().remove(receiver)); + playerReceivers.clear(); } } From b2443a13eaadecf5b6e4e6e9cb3b529e0a4a84a0 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 05:59:09 -0500 Subject: [PATCH 111/159] Changed my mind on this --- .../blockentity/multiblock/teslatower/TeslaTowerShapes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java index dbd2b6e8..703c503c 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerShapes.java @@ -114,7 +114,7 @@ protected void buildShapeTemplates(ShapeTemplate[] shapeTemplates) builder.key('P', SimpleMember.forBlockId(MI.id("stainless_steel_machine_casing_pipe")), HatchFlags.NO_HATCH); builder.key('T', SimpleMember.forBlockId(EI.id("polished_silver_machine_casing")), HatchFlags.NO_HATCH); builder.key('W', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); - builder.key('w', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); // TODO secondary winding? + builder.key('w', SimpleMember.forBlockId(tier.blockId()), HatchFlags.NO_HATCH); shapeTemplates[i] = builder.build(); } } From 84a73e33435b53bd91e7350723c1a7bd7da31a4e Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 06:02:52 -0500 Subject: [PATCH 112/159] Use silver wire instead of top load for calibrator recipe --- .../recipe/tool/assembler/tesla_calibrator.json | 2 +- .../recipe/tool/craft/tesla_calibrator.json | 2 +- .../recipes/CommonRecipesServerDatagenProvider.java | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_calibrator.json b/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_calibrator.json index 9204c9fc..a4bddc5e 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_calibrator.json +++ b/src/generated/resources/data/extended_industrialization/recipe/tool/assembler/tesla_calibrator.json @@ -5,7 +5,7 @@ "item_inputs": [ { "amount": 1, - "item": "extended_industrialization:silver_tesla_top_load" + "item": "modern_industrialization:silver_wire" }, { "amount": 1, diff --git a/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_calibrator.json b/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_calibrator.json index 4a2dd4ff..fefb1784 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_calibrator.json +++ b/src/generated/resources/data/extended_industrialization/recipe/tool/craft/tesla_calibrator.json @@ -12,7 +12,7 @@ "tag": "c:glass_panes" }, "S": { - "item": "extended_industrialization:silver_tesla_top_load" + "item": "modern_industrialization:silver_wire" }, "T": { "item": "modern_industrialization:transistor" diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java index 9652828b..24d5ebae 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java @@ -4,8 +4,6 @@ import aztech.modern_industrialization.MIItem; import aztech.modern_industrialization.machines.init.MIMachineRecipeTypes; import aztech.modern_industrialization.machines.recipe.MachineRecipeBuilder; -import aztech.modern_industrialization.materials.MIMaterials; -import aztech.modern_industrialization.materials.part.MIParts; import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.world.item.Items; import net.minecraft.world.level.ItemLike; @@ -18,6 +16,8 @@ import net.swedz.extended_industrialization.EITags; import net.swedz.extended_industrialization.datagen.api.recipe.ShapedRecipeBuilder; import net.swedz.extended_industrialization.material.EIMaterials; +import net.swedz.tesseract.neoforge.compat.mi.material.MIMaterials; +import net.swedz.tesseract.neoforge.compat.mi.material.part.MIMaterialParts; import java.util.function.Consumer; @@ -253,7 +253,7 @@ private static void tesla(RecipeOutput output) "tool", "tesla_calibrator", true, EIItems.TESLA_CALIBRATOR, 1, (r) -> r - .define('S', "%s:silver_tesla_top_load".formatted(EI.ID)) + .define('S', MIMaterials.SILVER.get(MIMaterialParts.WIRE)) .define('T', MIItem.TRANSISTOR) .define('G', EITags.itemCommon("glass_panes")) .define('D', MIItem.DIODE) @@ -335,7 +335,7 @@ protected void buildRecipes(RecipeOutput output) "casing", "steel_plated_bricks", true, EIBlocks.STEEL_PLATED_BRICKS.get().asItem(), 1, (r) -> r - .define('S', MIMaterials.STEEL.getPart(MIParts.PLATE)) + .define('S', MIMaterials.STEEL.get(MIMaterialParts.PLATE)) .define('B', "modern_industrialization:fire_clay_bricks") .pattern("SSS") .pattern("SBS") From 3f4189e7418e0c39b9ff679dadd534d60bfdf400 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 06:05:34 -0500 Subject: [PATCH 113/159] Sort windings together in creative menu --- .../extended_industrialization/EISortOrder.java | 15 ++++++++------- .../material/EIMaterials.java | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EISortOrder.java b/src/main/java/net/swedz/extended_industrialization/EISortOrder.java index 7deeb3c7..28a03346 100644 --- a/src/main/java/net/swedz/extended_industrialization/EISortOrder.java +++ b/src/main/java/net/swedz/extended_industrialization/EISortOrder.java @@ -6,11 +6,12 @@ @ApiStatus.NonExtendable public interface EISortOrder { - SortOrder GEAR = new SortOrder(0); - SortOrder OTHER_GEAR = new SortOrder(1); - SortOrder CASINGS = new SortOrder(2); - SortOrder MACHINES = new SortOrder(3); - SortOrder PARTS = new SortOrder(4); - SortOrder RESOURCES = new SortOrder(5); - SortOrder BUCKETS = new SortOrder(6); + SortOrder GEAR = new SortOrder(0); + SortOrder OTHER_GEAR = new SortOrder(1); + SortOrder CASINGS = new SortOrder(2); + SortOrder TESLA_WINDINGS = new SortOrder(3); + SortOrder MACHINES = new SortOrder(4); + SortOrder PARTS = new SortOrder(5); + SortOrder RESOURCES = new SortOrder(6); + SortOrder BUCKETS = new SortOrder(7); } diff --git a/src/main/java/net/swedz/extended_industrialization/material/EIMaterials.java b/src/main/java/net/swedz/extended_industrialization/material/EIMaterials.java index 6f783464..79d0be70 100644 --- a/src/main/java/net/swedz/extended_industrialization/material/EIMaterials.java +++ b/src/main/java/net/swedz/extended_industrialization/material/EIMaterials.java @@ -38,7 +38,7 @@ interface Parts MaterialPart TESLA_WINDING = create("tesla_winding", "Tesla Winding") .blockModel(CommonModelBuilders::blockTopEnd) .blockLoot(CommonLootTableBuilders::self) - .itemOn(EI.ID, (c, h) -> h.sorted(EISortOrder.CASINGS)); + .itemOn(EI.ID, (c, h) -> h.sorted(EISortOrder.TESLA_WINDINGS)); static MaterialPart create(String id, String englishName) { From 30c94b8d9fd49b2538f487583b1adb4ab2454b51 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 08:06:06 -0500 Subject: [PATCH 114/159] Add tesla receiver hatches --- .../blockstates/ev_tesla_receiver_hatch.json | 7 + .../blockstates/hv_tesla_receiver_hatch.json | 7 + .../blockstates/lv_tesla_receiver_hatch.json | 7 + .../blockstates/mv_tesla_receiver_hatch.json | 7 + .../superconductor_tesla_receiver_hatch.json | 7 + .../lang/en_us.json | 5 + .../models/block/ev_tesla_receiver_hatch.json | 11 ++ .../models/block/hv_tesla_receiver_hatch.json | 11 ++ .../models/block/lv_tesla_receiver_hatch.json | 11 ++ .../models/block/mv_tesla_receiver_hatch.json | 11 ++ .../superconductor_tesla_receiver_hatch.json | 11 ++ .../models/item/ev_tesla_receiver_hatch.json | 3 + .../models/item/hv_tesla_receiver_hatch.json | 3 + .../models/item/lv_tesla_receiver_hatch.json | 3 + .../models/item/mv_tesla_receiver_hatch.json | 3 + .../superconductor_tesla_receiver_hatch.json | 3 + .../blocks/ev_tesla_receiver_hatch.json | 21 +++ .../blocks/hv_tesla_receiver_hatch.json | 21 +++ .../blocks/lv_tesla_receiver_hatch.json | 21 +++ .../blocks/mv_tesla_receiver_hatch.json | 21 +++ .../superconductor_tesla_receiver_hatch.json | 21 +++ .../ev_tesla_receiver_hatch/assembler.json | 29 ++++ .../ev_tesla_receiver_hatch/unpacker.json | 21 +++ .../hv_tesla_receiver_hatch/assembler.json | 29 ++++ .../hv_tesla_receiver_hatch/unpacker.json | 21 +++ .../lv_tesla_receiver_hatch/assembler.json | 29 ++++ .../lv_tesla_receiver_hatch/unpacker.json | 21 +++ .../mv_tesla_receiver_hatch/assembler.json | 29 ++++ .../mv_tesla_receiver_hatch/unpacker.json | 21 +++ .../assembler.json | 29 ++++ .../unpacker.json | 21 +++ .../tags/block/mineable/pickaxe.json | 5 + .../tags/block/needs_stone_tool.json | 5 + .../EIMachines.java | 10 ++ .../EISortOrder.java | 7 +- .../compat/mi/EIMIHookRegistry.java | 8 + ...chineItemRecipesServerDatagenProvider.java | 32 ++++ .../tesla/TeslaReceiverHatchBlockEntity.java | 155 ++++++++++++++++++ .../tesla_receiver_hatch/overlay_front.png | Bin 0 -> 583 bytes .../tesla_receiver_hatch/overlay_side.png | Bin 0 -> 583 bytes 40 files changed, 684 insertions(+), 3 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/ev_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/hv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/lv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/mv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/superconductor_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/ev_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/hv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/lv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/mv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/superconductor_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/ev_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/hv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/lv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/mv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/superconductor_tesla_receiver_hatch.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/ev_tesla_receiver_hatch.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/hv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/lv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/mv_tesla_receiver_hatch.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/superconductor_tesla_receiver_hatch.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/unpacker.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/unpacker.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/unpacker.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/unpacker.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/unpacker.json create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver_hatch/overlay_front.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver_hatch/overlay_side.png diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/ev_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/blockstates/ev_tesla_receiver_hatch.json new file mode 100644 index 00000000..37bf636e --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/ev_tesla_receiver_hatch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/ev_tesla_receiver_hatch" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/hv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/blockstates/hv_tesla_receiver_hatch.json new file mode 100644 index 00000000..f68b6c82 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/hv_tesla_receiver_hatch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/hv_tesla_receiver_hatch" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/lv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/blockstates/lv_tesla_receiver_hatch.json new file mode 100644 index 00000000..a24321f3 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/lv_tesla_receiver_hatch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/lv_tesla_receiver_hatch" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/mv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/blockstates/mv_tesla_receiver_hatch.json new file mode 100644 index 00000000..ab00aa57 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/mv_tesla_receiver_hatch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/mv_tesla_receiver_hatch" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/superconductor_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/blockstates/superconductor_tesla_receiver_hatch.json new file mode 100644 index 00000000..d96fa6af --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/superconductor_tesla_receiver_hatch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/superconductor_tesla_receiver_hatch" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 3d45e056..714bfef1 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -18,18 +18,22 @@ "block.extended_industrialization.electric_honey_extractor": "Electric Honey Extractor", "block.extended_industrialization.electric_waste_collector": "Electric Waste Collector", "block.extended_industrialization.electrum_tesla_winding": "Electrum Tesla Winding", + "block.extended_industrialization.ev_tesla_receiver_hatch": "EV Tesla Receiver Hatch", "block.extended_industrialization.honey": "Honey", "block.extended_industrialization.hv_solar_panel": "HV Solar Panel", + "block.extended_industrialization.hv_tesla_receiver_hatch": "HV Tesla Receiver Hatch", "block.extended_industrialization.large_configurable_chest": "Large Configurable Chest", "block.extended_industrialization.large_electric_furnace": "Large Electric Furnace", "block.extended_industrialization.large_electric_macerator": "Large Electric Macerator", "block.extended_industrialization.large_steam_furnace": "Large Steam Furnace", "block.extended_industrialization.large_steam_macerator": "Large Steam Macerator", "block.extended_industrialization.lv_solar_panel": "LV Solar Panel", + "block.extended_industrialization.lv_tesla_receiver_hatch": "LV Tesla Receiver Hatch", "block.extended_industrialization.machine_chainer": "Machine Chainer", "block.extended_industrialization.machine_chainer_relay": "Machine Chainer Relay", "block.extended_industrialization.manure": "Manure", "block.extended_industrialization.mv_solar_panel": "MV Solar Panel", + "block.extended_industrialization.mv_tesla_receiver_hatch": "MV Tesla Receiver Hatch", "block.extended_industrialization.npk_fertilizer": "NPK Fertilizer", "block.extended_industrialization.phosphoric_acid": "Phosphoric Acid", "block.extended_industrialization.polished_silver_machine_casing": "Polished Silver Machine Casing", @@ -46,6 +50,7 @@ "block.extended_industrialization.steel_plated_bricks": "Steel Plated Bricks", "block.extended_industrialization.steel_solar_boiler": "Steel Solar Boiler", "block.extended_industrialization.steel_waste_collector": "Steel Waste Collector", + "block.extended_industrialization.superconductor_tesla_receiver_hatch": "Superconductor Tesla Receiver Hatch", "block.extended_industrialization.superconductor_tesla_winding": "Superconductor Tesla Winding", "block.extended_industrialization.tesla_coil": "Tesla Coil", "block.extended_industrialization.tesla_receiver": "Tesla Receiver", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/ev_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/block/ev_tesla_receiver_hatch.json new file mode 100644 index 00000000..5b1093db --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/ev_tesla_receiver_hatch.json @@ -0,0 +1,11 @@ +{ + "casing": "ev", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_front", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output", + "side": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_side" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/hv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/block/hv_tesla_receiver_hatch.json new file mode 100644 index 00000000..b9a613ea --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/hv_tesla_receiver_hatch.json @@ -0,0 +1,11 @@ +{ + "casing": "hv", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_front", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output", + "side": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_side" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/lv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/block/lv_tesla_receiver_hatch.json new file mode 100644 index 00000000..fdf80e55 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/lv_tesla_receiver_hatch.json @@ -0,0 +1,11 @@ +{ + "casing": "lv", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_front", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output", + "side": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_side" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/mv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/block/mv_tesla_receiver_hatch.json new file mode 100644 index 00000000..85e9a80a --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/mv_tesla_receiver_hatch.json @@ -0,0 +1,11 @@ +{ + "casing": "mv", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_front", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output", + "side": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_side" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/superconductor_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/block/superconductor_tesla_receiver_hatch.json new file mode 100644 index 00000000..a6cc9f90 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/superconductor_tesla_receiver_hatch.json @@ -0,0 +1,11 @@ +{ + "casing": "superconductor", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_front", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output", + "side": "extended_industrialization:block/machines/tesla_receiver_hatch/overlay_side" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/ev_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/item/ev_tesla_receiver_hatch.json new file mode 100644 index 00000000..ebf8746e --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/ev_tesla_receiver_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/ev_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/hv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/item/hv_tesla_receiver_hatch.json new file mode 100644 index 00000000..d5d61801 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/hv_tesla_receiver_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/hv_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/lv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/item/lv_tesla_receiver_hatch.json new file mode 100644 index 00000000..630163ab --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/lv_tesla_receiver_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/lv_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/mv_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/item/mv_tesla_receiver_hatch.json new file mode 100644 index 00000000..f9efc812 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/mv_tesla_receiver_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/mv_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/superconductor_tesla_receiver_hatch.json b/src/generated/resources/assets/extended_industrialization/models/item/superconductor_tesla_receiver_hatch.json new file mode 100644 index 00000000..43a11e0e --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/superconductor_tesla_receiver_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/superconductor_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/ev_tesla_receiver_hatch.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/ev_tesla_receiver_hatch.json new file mode 100644 index 00000000..12666275 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/ev_tesla_receiver_hatch.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:ev_tesla_receiver_hatch" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/ev_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/hv_tesla_receiver_hatch.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/hv_tesla_receiver_hatch.json new file mode 100644 index 00000000..ac787e8f --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/hv_tesla_receiver_hatch.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:hv_tesla_receiver_hatch" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/hv_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/lv_tesla_receiver_hatch.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/lv_tesla_receiver_hatch.json new file mode 100644 index 00000000..a4f30145 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/lv_tesla_receiver_hatch.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:lv_tesla_receiver_hatch" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/lv_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/mv_tesla_receiver_hatch.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/mv_tesla_receiver_hatch.json new file mode 100644 index 00000000..079c7481 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/mv_tesla_receiver_hatch.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:mv_tesla_receiver_hatch" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/mv_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/superconductor_tesla_receiver_hatch.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/superconductor_tesla_receiver_hatch.json new file mode 100644 index 00000000..d85ebc9f --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/superconductor_tesla_receiver_hatch.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:superconductor_tesla_receiver_hatch" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/superconductor_tesla_receiver_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/assembler.json new file mode 100644 index 00000000..6cbf06ec --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/assembler.json @@ -0,0 +1,29 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 1, + "item": "modern_industrialization:annealed_copper_cable" + }, + { + "amount": 1, + "item": "modern_industrialization:highly_advanced_machine_hull" + }, + { + "amount": 4, + "item": "extended_industrialization:silver_curved_plate" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:ev_tesla_receiver_hatch" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/unpacker.json new file mode 100644 index 00000000..546486b7 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/unpacker.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:unpacker", + "duration": 200, + "eu": 2, + "item_inputs": [ + { + "amount": 1, + "item": "extended_industrialization:ev_tesla_receiver_hatch" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "modern_industrialization:highly_advanced_machine_hull" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/assembler.json new file mode 100644 index 00000000..fe3f2a5f --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/assembler.json @@ -0,0 +1,29 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 1, + "item": "modern_industrialization:aluminum_cable" + }, + { + "amount": 1, + "item": "modern_industrialization:turbo_machine_hull" + }, + { + "amount": 4, + "item": "extended_industrialization:silver_curved_plate" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:hv_tesla_receiver_hatch" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/unpacker.json new file mode 100644 index 00000000..e09a4d17 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/unpacker.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:unpacker", + "duration": 200, + "eu": 2, + "item_inputs": [ + { + "amount": 1, + "item": "extended_industrialization:hv_tesla_receiver_hatch" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "modern_industrialization:turbo_machine_hull" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/assembler.json new file mode 100644 index 00000000..6663680a --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/assembler.json @@ -0,0 +1,29 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 1, + "item": "modern_industrialization:tin_cable" + }, + { + "amount": 1, + "item": "modern_industrialization:basic_machine_hull" + }, + { + "amount": 4, + "item": "extended_industrialization:silver_curved_plate" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:lv_tesla_receiver_hatch" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/unpacker.json new file mode 100644 index 00000000..9607644d --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/unpacker.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:unpacker", + "duration": 200, + "eu": 2, + "item_inputs": [ + { + "amount": 1, + "item": "extended_industrialization:lv_tesla_receiver_hatch" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "modern_industrialization:basic_machine_hull" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/assembler.json new file mode 100644 index 00000000..65188b81 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/assembler.json @@ -0,0 +1,29 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 1, + "item": "modern_industrialization:electrum_cable" + }, + { + "amount": 1, + "item": "modern_industrialization:advanced_machine_hull" + }, + { + "amount": 4, + "item": "extended_industrialization:silver_curved_plate" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:mv_tesla_receiver_hatch" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/unpacker.json new file mode 100644 index 00000000..e2d2d71e --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/unpacker.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:unpacker", + "duration": 200, + "eu": 2, + "item_inputs": [ + { + "amount": 1, + "item": "extended_industrialization:mv_tesla_receiver_hatch" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "modern_industrialization:advanced_machine_hull" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/assembler.json new file mode 100644 index 00000000..41106fcf --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/assembler.json @@ -0,0 +1,29 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 1, + "item": "modern_industrialization:superconductor_cable" + }, + { + "amount": 1, + "item": "modern_industrialization:quantum_machine_hull" + }, + { + "amount": 4, + "item": "extended_industrialization:silver_curved_plate" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:superconductor_tesla_receiver_hatch" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/unpacker.json new file mode 100644 index 00000000..c33fa3c1 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/unpacker.json @@ -0,0 +1,21 @@ +{ + "type": "modern_industrialization:unpacker", + "duration": 200, + "eu": 2, + "item_inputs": [ + { + "amount": 1, + "item": "extended_industrialization:superconductor_tesla_receiver_hatch" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "modern_industrialization:quantum_machine_hull" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index e84769a5..4d53e323 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -16,16 +16,20 @@ "extended_industrialization:electric_honey_extractor", "extended_industrialization:electric_waste_collector", "extended_industrialization:electrum_tesla_winding", + "extended_industrialization:ev_tesla_receiver_hatch", "extended_industrialization:hv_solar_panel", + "extended_industrialization:hv_tesla_receiver_hatch", "extended_industrialization:large_configurable_chest", "extended_industrialization:large_electric_furnace", "extended_industrialization:large_electric_macerator", "extended_industrialization:large_steam_furnace", "extended_industrialization:large_steam_macerator", "extended_industrialization:lv_solar_panel", + "extended_industrialization:lv_tesla_receiver_hatch", "extended_industrialization:machine_chainer", "extended_industrialization:machine_chainer_relay", "extended_industrialization:mv_solar_panel", + "extended_industrialization:mv_tesla_receiver_hatch", "extended_industrialization:polished_silver_machine_casing", "extended_industrialization:processing_array", "extended_industrialization:steam_farmer", @@ -38,6 +42,7 @@ "extended_industrialization:steel_plated_bricks", "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", + "extended_industrialization:superconductor_tesla_receiver_hatch", "extended_industrialization:superconductor_tesla_winding", "extended_industrialization:tesla_coil", "extended_industrialization:tesla_receiver", diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index e84769a5..4d53e323 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -16,16 +16,20 @@ "extended_industrialization:electric_honey_extractor", "extended_industrialization:electric_waste_collector", "extended_industrialization:electrum_tesla_winding", + "extended_industrialization:ev_tesla_receiver_hatch", "extended_industrialization:hv_solar_panel", + "extended_industrialization:hv_tesla_receiver_hatch", "extended_industrialization:large_configurable_chest", "extended_industrialization:large_electric_furnace", "extended_industrialization:large_electric_macerator", "extended_industrialization:large_steam_furnace", "extended_industrialization:large_steam_macerator", "extended_industrialization:lv_solar_panel", + "extended_industrialization:lv_tesla_receiver_hatch", "extended_industrialization:machine_chainer", "extended_industrialization:machine_chainer_relay", "extended_industrialization:mv_solar_panel", + "extended_industrialization:mv_tesla_receiver_hatch", "extended_industrialization:polished_silver_machine_casing", "extended_industrialization:processing_array", "extended_industrialization:steam_farmer", @@ -38,6 +42,7 @@ "extended_industrialization:steel_plated_bricks", "extended_industrialization:steel_solar_boiler", "extended_industrialization:steel_waste_collector", + "extended_industrialization:superconductor_tesla_receiver_hatch", "extended_industrialization:superconductor_tesla_winding", "extended_industrialization:tesla_coil", "extended_industrialization:tesla_receiver", diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index 06ff99c5..d479e952 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -38,6 +38,7 @@ import net.swedz.extended_industrialization.machines.blockentity.multiblock.farmer.SteamFarmerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaReceiverHatchBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaReceiverMachineBlockEntity; import net.swedz.extended_industrialization.machines.component.fluidharvesting.honeyextractor.HoneyExtractorBehavior; import net.swedz.extended_industrialization.machines.component.fluidharvesting.wastecollector.WasteCollectorBehavior; @@ -422,5 +423,14 @@ public static void singleBlockSpecial(SingleBlockSpecialMachinesMIHookContext ho TeslaReceiverMachineBlockEntity::new, TeslaReceiverMachineBlockEntity::registerEnergyApi ); + + for(CableTier tier : CableTier.allTiers()) + { + hook.register( + "%s Tesla Receiver Hatch".formatted(tier.shortEnglishName), "%s_tesla_receiver_hatch".formatted(tier.name), "tesla_receiver_hatch", + tier.casing, true, false, true, false, + (bep) -> new TeslaReceiverHatchBlockEntity(bep, tier) + ); + } } } diff --git a/src/main/java/net/swedz/extended_industrialization/EISortOrder.java b/src/main/java/net/swedz/extended_industrialization/EISortOrder.java index 28a03346..78075ccf 100644 --- a/src/main/java/net/swedz/extended_industrialization/EISortOrder.java +++ b/src/main/java/net/swedz/extended_industrialization/EISortOrder.java @@ -11,7 +11,8 @@ public interface EISortOrder SortOrder CASINGS = new SortOrder(2); SortOrder TESLA_WINDINGS = new SortOrder(3); SortOrder MACHINES = new SortOrder(4); - SortOrder PARTS = new SortOrder(5); - SortOrder RESOURCES = new SortOrder(6); - SortOrder BUCKETS = new SortOrder(7); + SortOrder HATCHES = new SortOrder(5); + SortOrder PARTS = new SortOrder(6); + SortOrder RESOURCES = new SortOrder(7); + SortOrder BUCKETS = new SortOrder(8); } diff --git a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookRegistry.java b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookRegistry.java index 6928cd3c..d1a112ed 100644 --- a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookRegistry.java +++ b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookRegistry.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.compat.mi; +import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.machines.recipe.MachineRecipeType; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; @@ -63,6 +64,13 @@ public void onBlockEntityRegister(BlockEntityType blockEntityType) public void onItemRegister(ItemHolder itemHolder) { EIItems.Registry.include(itemHolder); + + String id = itemHolder.identifier().id(); + if(id.endsWith("_tesla_receiver_hatch")) + { + CableTier tier = CableTier.getTier(id.substring(0, id.indexOf("_tesla_receiver_hatch"))); + itemHolder.sorted(EISortOrder.HATCHES.and(tier)); + } } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java index d14f9857..05caded8 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java @@ -1,7 +1,9 @@ package net.swedz.extended_industrialization.datagen.server.provider.recipes; +import aztech.modern_industrialization.MI; import aztech.modern_industrialization.MIItem; import aztech.modern_industrialization.MITags; +import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.machines.init.MIMachineRecipeTypes; import net.minecraft.data.recipes.RecipeOutput; import net.neoforged.neoforge.data.event.GatherDataEvent; @@ -612,6 +614,36 @@ private static void tesla(RecipeOutput output) ); addInterchangeableMachinesRecipes("tesla_coil", "tesla_receiver", output); + String[] casings = {"basic", "advanced", "turbo", "highly_advanced", "quantum"}; + String[] cables = {"tin", "electrum", "aluminum", "annealed_copper", "superconductor"}; + CableTier[] cableTiers = {CableTier.LV, CableTier.MV, CableTier.HV, CableTier.EV, CableTier.SUPERCONDUCTOR}; + for(int i = 0; i < casings.length; i++) + { + String casing = casings[i]; + String cable = cables[i]; + CableTier tier = cableTiers[i]; + addMachineRecipe( + "machines/%s_tesla_receiver_hatch".formatted(tier.name), "assembler", MIMachineRecipeTypes.ASSEMBLER, + 8, 10 * 20, + (builder) -> builder + .addItemInput("%s:%s_cable".formatted(MI.ID, cable), 1) + .addItemInput("%s:%s_machine_hull".formatted(MI.ID, casing), 1) + .addItemInput(EIMaterials.SILVER.get(EIMaterials.Parts.CURVED_PLATE), 4) + .addItemInput(MIItem.ELECTRONIC_CIRCUIT, 2) + .addItemOutput("%s:%s_tesla_receiver_hatch".formatted(EI.ID, tier.name), 1), + output + ); + addMachineRecipe( + "machines/%s_tesla_receiver_hatch".formatted(tier.name), "unpacker", MIMachineRecipeTypes.UNPACKER, + 2, 10 * 20, + (builder) -> builder + .addItemInput("%s:%s_tesla_receiver_hatch".formatted(EI.ID, tier.name), 1) + .addItemOutput("modern_industrialization:%s_machine_hull".formatted(casing), 1) + .addItemOutput(MIItem.ELECTRONIC_CIRCUIT, 2), + output + ); + } + addBasicCraftingMachineRecipes( "tesla_tower", (builder) -> builder diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java new file mode 100644 index 00000000..ed699941 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java @@ -0,0 +1,155 @@ +package net.swedz.extended_industrialization.machines.blockentity.tesla; + +import aztech.modern_industrialization.api.energy.CableTier; +import aztech.modern_industrialization.api.energy.CableTierHolder; +import aztech.modern_industrialization.api.energy.MIEnergyStorage; +import aztech.modern_industrialization.api.machine.component.EnergyAccess; +import aztech.modern_industrialization.api.machine.holder.EnergyComponentHolder; +import aztech.modern_industrialization.inventory.MIInventory; +import aztech.modern_industrialization.machines.BEP; +import aztech.modern_industrialization.machines.components.EnergyComponent; +import aztech.modern_industrialization.machines.components.OrientationComponent; +import aztech.modern_industrialization.machines.gui.MachineGuiParameters; +import aztech.modern_industrialization.machines.guicomponents.EnergyBar; +import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; +import aztech.modern_industrialization.machines.multiblocks.HatchType; +import net.minecraft.world.level.Level; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; +import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; + +import java.util.List; +import java.util.Optional; + +public final class TeslaReceiverHatchBlockEntity extends HatchBlockEntity implements EnergyComponentHolder, CableTierHolder, TeslaReceiver.Delegate +{ + private final CableTier tier; + + private final EnergyComponent energy; + private final MIEnergyStorage insertable; + + private final TeslaReceiverComponent receiver; + + public TeslaReceiverHatchBlockEntity(BEP bep, CableTier tier) + { + super( + bep, + new MachineGuiParameters.Builder(EI.id("tesla_receiver_hatch"), false).build(), + new OrientationComponent.Params(false, false, false) + ); + + this.tier = tier; + + energy = new EnergyComponent(this, () -> 30 * 20 * tier.getEu()); + insertable = energy.buildInsertable((other) -> other == tier); + + receiver = new TeslaReceiverComponent(this, insertable, () -> true, () -> tier); + + this.registerComponents(energy, receiver); + + this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); + + this.registerGuiComponent(new TeslaNetworkBar.Server( + new TeslaNetworkBar.Parameters(101, 34), + () -> + { + if(this.hasNetwork()) + { + TeslaNetwork network = this.getNetwork(); + if(network.isTransmitterLoaded()) + { + TeslaReceiverState state = this.checkReceiveFrom(network); + return Optional.of(new TeslaNetworkBar.ReceiverData(state, Optional.of(this.getNetworkKey()), Optional.of(network.getCableTier()))); + } + else + { + return Optional.of(new TeslaNetworkBar.ReceiverData(TeslaReceiverState.UNLOADED_TRANSMITTER, Optional.of(this.getNetworkKey()), Optional.empty())); + } + } + else + { + return Optional.of(new TeslaNetworkBar.ReceiverData(TeslaReceiverState.NO_LINK, Optional.empty(), Optional.empty())); + } + } + )); + } + + private void onCasingUpdate(CableTier from, CableTier to) + { + if(level != null && !level.isClientSide()) + { + receiver.addToNetwork(); + } + } + + @Override + public TeslaReceiver getDelegateReceiver() + { + return receiver; + } + + @Override + public CableTier getCableTier() + { + return tier; + } + + @Override + public EnergyAccess getEnergyComponent() + { + return energy; + } + + @Override + public HatchType getHatchType() + { + return HatchType.ENERGY_INPUT; + } + + @Override + public boolean upgradesToSteel() + { + return false; + } + + @Override + public MIInventory getInventory() + { + return MIInventory.EMPTY; + } + + @Override + public void appendEnergyInputs(List list) + { + list.add(energy); + } + + @Override + public void setLevel(Level level) + { + super.setLevel(level); + + if(level.isClientSide()) + { + return; + } + + receiver.addToNetwork(); + } + + @Override + public void setRemoved() + { + super.setRemoved(); + + if(level.isClientSide()) + { + return; + } + + receiver.removeFromNetwork(); + } +} diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver_hatch/overlay_front.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver_hatch/overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..57111b865a9bd122ed73f690301ef95439ed61a2 GIT binary patch literal 583 zcmV-N0=WH&P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0o+MMK~y+TrBXXD z1W^<|b9W0Xg2bahf#3&-kf>xmW*bowg+!rNpi?U}egGRKtq9rdDl`(!YD6U{R(6xk z5MpP&=HWYM?#v=OUvlT%d*__*eCM1?|AnD#1k*IdT9zgDJBsBpl?nxY3J?*5ftle7 zk>_LQ!g^S+u7mX{cId28{POv{*dGL$k*Wj~HqOb$AKOq=RR+DmjqS`*mymQEdXW+( zUm!DV6ZxJFW?n_lAZT+vO87q6AW5f7lAxG^8jVPSzdkC#6$JC;>hucNL3N1)8%iB) z8tVdO33#JT*HX+yf0w&2)?$-A7wSBh-+Go@hiRknhq5!f)d> z&i=tJSs`A~2Pu!6t5G9xU9#cO>o_8tvxcZVKhfLkE488@RU!CG0WSHcg&ISYZYp$r zaj#D}$6}fQqt&SC#hiIm7C5;Qx9WgKw&nUmAHsta&kiN*f$uH(hdE6X5?}wdiO67eF1KS V&QK4W`1$|<002ovPDHLkV1gsH@P7aR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver_hatch/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/tesla_receiver_hatch/overlay_side.png new file mode 100644 index 0000000000000000000000000000000000000000..57111b865a9bd122ed73f690301ef95439ed61a2 GIT binary patch literal 583 zcmV-N0=WH&P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0o+MMK~y+TrBXXD z1W^<|b9W0Xg2bahf#3&-kf>xmW*bowg+!rNpi?U}egGRKtq9rdDl`(!YD6U{R(6xk z5MpP&=HWYM?#v=OUvlT%d*__*eCM1?|AnD#1k*IdT9zgDJBsBpl?nxY3J?*5ftle7 zk>_LQ!g^S+u7mX{cId28{POv{*dGL$k*Wj~HqOb$AKOq=RR+DmjqS`*mymQEdXW+( zUm!DV6ZxJFW?n_lAZT+vO87q6AW5f7lAxG^8jVPSzdkC#6$JC;>hucNL3N1)8%iB) z8tVdO33#JT*HX+yf0w&2)?$-A7wSBh-+Go@hiRknhq5!f)d> z&i=tJSs`A~2Pu!6t5G9xU9#cO>o_8tvxcZVKhfLkE488@RU!CG0WSHcg&ISYZYp$r zaj#D}$6}fQqt&SC#hiIm7C5;Qx9WgKw&nUmAHsta&kiN*f$uH(hdE6X5?}wdiO67eF1KS V&QK4W`1$|<002ovPDHLkV1gsH@P7aR literal 0 HcmV?d00001 From 1040e2db0d8044ad7f7dc497816e3e188ff42646 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 08:17:52 -0500 Subject: [PATCH 115/159] Buff energy storage of tesla coil and receiver --- .../machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java | 2 +- .../blockentity/tesla/TeslaReceiverMachineBlockEntity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 38384ed1..e0f4958c 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -73,7 +73,7 @@ public TeslaCoilMachineBlockEntity(BEP bep) redstoneControl = new RedstoneControlComponent(); casing = new CasingComponent(this::onCasingUpdate); - energy = new EnergyComponent(this, casing::getEuCapacity); + energy = new EnergyComponent(this, () -> 30 * 20 * casing.getCableTier().eu); insertable = energy.buildInsertable(casing::canInsertEu); transmitter = new TeslaTransmitterComponent( diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index fa8c6d16..cf9d4e29 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -62,7 +62,7 @@ public TeslaReceiverMachineBlockEntity(BEP bep) redstoneControl = new RedstoneControlComponent(); casing = new CasingComponent(this::onCasingUpdate); - energy = new EnergyComponent(this, casing::getEuCapacity); + energy = new EnergyComponent(this, () -> 30 * 20 * casing.getCableTier().eu); insertable = energy.buildInsertable(casing::canInsertEu); extractable = energy.buildExtractable(casing::canInsertEu); From dcf2edafa1adeddcc9425957a196bba59b136d9f Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 08:43:17 -0500 Subject: [PATCH 116/159] Apply tooltips in the machine BE instead of static tooltips --- .../EITooltips.java | 25 ------------------- .../teslatower/TeslaTowerBlockEntity.java | 12 +++++++++ .../tesla/TeslaCoilMachineBlockEntity.java | 13 ++++++++++ .../tesla/TeslaReceiverHatchBlockEntity.java | 10 ++++++++ .../TeslaReceiverMachineBlockEntity.java | 14 +++++++++++ 5 files changed, 49 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index d18b55a8..25cd2251 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -219,36 +219,11 @@ public final class EITooltips line(EIText.WASTE_COLLECTOR_HELP) ); - public static final TooltipAttachment TESLA_TOWER = TooltipAttachment.multilines( - List.of(EI.id("tesla_tower")), - List.of( - line(EIText.TESLA_TOWER_HELP_1), - line(EIText.TESLA_TOWER_HELP_2), - line(EIText.TESLA_TOWER_HELP_3) - ) - ); - - public static final TooltipAttachment TESLA_COIL = TooltipAttachment.multilines( - List.of(EI.id("tesla_coil")), - List.of( - line(EIText.TESLA_COIL_HELP_1).arg(EIConfig.teslaCoilRange), - line(EIText.TESLA_COIL_HELP_2) - ) - ); - public static final TooltipAttachment TESLA_INTERDIMENSIONAL_UPGRADE = TooltipAttachment.singleLine( List.of(EI.id("tesla_interdimensional_upgrade")), line(EIText.TESLA_INTERDIMENSIONAL_UPGRADE_HELP) ); - public static final TooltipAttachment TESLA_RECEIVER = TooltipAttachment.multilines( - List.of(EI.id("tesla_receiver")), - List.of( - line(EIText.TESLA_RECEIVER_HELP_1), - line(EIText.TESLA_RECEIVER_HELP_2) - ) - ); - public static final TooltipAttachment TESLA_HANDHELD_RECEIVER = TooltipAttachment.multilines( List.of(EI.id("tesla_handheld_receiver")), List.of( diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 2dcd6b85..71f0d4b7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -14,6 +14,7 @@ import com.google.common.collect.Lists; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; @@ -49,6 +50,7 @@ import static aztech.modern_industrialization.MITooltips.*; import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.line; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder @@ -355,6 +357,16 @@ public void setRemoved() } } + @Override + public List getTooltips() + { + return List.of( + line(EIText.TESLA_TOWER_HELP_1), + line(EIText.TESLA_TOWER_HELP_2), + line(EIText.TESLA_TOWER_HELP_3) + ); + } + private static final TeslaTowerShapes SHAPES = new TeslaTowerShapes(); public static void registerTieredShapes() diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index e0f4958c..68ed96db 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -19,6 +19,7 @@ import aztech.modern_industrialization.util.Tickable; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; +import net.minecraft.network.chat.Component; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.AABB; @@ -26,6 +27,7 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIConfig; +import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; @@ -44,6 +46,8 @@ import java.util.Optional; import java.util.Set; +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; + public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder { private final IsActiveComponent isActive; @@ -290,6 +294,15 @@ public void tick() isActive.updateActive(active, this); } + @Override + public List getTooltips() + { + return List.of( + line(EIText.TESLA_COIL_HELP_1).arg(EIConfig.teslaCoilRange), + line(EIText.TESLA_COIL_HELP_2) + ); + } + public static void registerEnergyApi(BlockEntityType bet) { CapabilitiesListeners.register(EI.ID, (event) -> diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java index ed699941..1f27933a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java @@ -13,8 +13,10 @@ import aztech.modern_industrialization.machines.guicomponents.EnergyBar; import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; import aztech.modern_industrialization.machines.multiblocks.HatchType; +import net.minecraft.network.chat.Component; import net.minecraft.world.level.Level; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; @@ -24,6 +26,8 @@ import java.util.List; import java.util.Optional; +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; + public final class TeslaReceiverHatchBlockEntity extends HatchBlockEntity implements EnergyComponentHolder, CableTierHolder, TeslaReceiver.Delegate { private final CableTier tier; @@ -152,4 +156,10 @@ public void setRemoved() receiver.removeFromNetwork(); } + + @Override + public List getTooltips() + { + return List.of(line(EIText.TESLA_RECEIVER_HELP_1)); + } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index cf9d4e29..fd187ba1 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -18,11 +18,13 @@ import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.util.Tickable; import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; @@ -33,9 +35,12 @@ import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; +import java.util.List; import java.util.Optional; import java.util.Set; +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; + public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable, TeslaPlasmaBehaviorHolder { private final IsActiveComponent isActive; @@ -226,6 +231,15 @@ public void tick() } } + @Override + public List getTooltips() + { + return List.of( + line(EIText.TESLA_RECEIVER_HELP_1), + line(EIText.TESLA_RECEIVER_HELP_2) + ); + } + public static void registerEnergyApi(BlockEntityType bet) { CapabilitiesListeners.register(EI.ID, (event) -> From 45b0709dfbc8c2b11f3a87631ef7a8e3f1d8fffd Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 11 Dec 2024 14:28:20 -0500 Subject: [PATCH 117/159] Update readme to include tesla stuff --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 829735fb..89c63c1f 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,9 @@ For any questions, please ask in the `#extended-industrialization` channel on [m - Processing Array - Universal Transformer - Waste Collector - - Wireless Charging Station + - Tesla Coil + - Tesla Receiver (and also a hatch) + - Tesla Tower - Generators - Solar Boiler - Solar Panel @@ -29,6 +31,8 @@ For any questions, please ask in the `#extended-industrialization` channel on [m - Electric Drill & Chainsaw - Ultimate Laser Drill - Nano Suit + - Tesla Calibrator + - Tesla Handheld Receiver - Resources - Mulch - Manure From 11984e128a330bc62596e3a2cb97bc780b9487ae Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 12 Dec 2024 04:10:09 -0500 Subject: [PATCH 118/159] Update lodestone --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 170a77cb..b293d35e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -52,5 +52,5 @@ curios_version_range=[9,) cucumber_version=1.21.1-8.0.8 mystical_agriculture_version=1.21.1-8.0.9 mystical_agriculture_version_range=[8.0.0,) -lodestone_version=1.21.1-1.7.0.71 -lodestone_version_range=[1.21.1-1.7.0.71,) \ No newline at end of file +lodestone_version=1.21.1-1.7.0.99 +lodestone_version_range=[1.21.1-1.7.0.99,) \ No newline at end of file From 186e2e09a80d1b55638120a52dcfe60d6b590814 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 12 Dec 2024 11:18:18 -0500 Subject: [PATCH 119/159] Dont register client item stuff on server --- gradle.properties | 8 ++++---- .../net/swedz/extended_industrialization/EIClient.java | 7 +++++++ .../net/swedz/extended_industrialization/EIItems.java | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index 74578bf8..e0273bc6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,8 +19,8 @@ mod_discord_icon=https://cdn.discordapp.com/emojis/1264330258505531473.webp # NeoForge Environment minecraft_version=1.21.1 minecraft_version_range=1.21.1 -neoforge_version=21.1.37 -neoforge_version_range=[21.1.37, 22-) +neoforge_version=21.1.60 +neoforge_version_range=[21.1.60, 22-) parchment_mappings_minecraft_version=1.21 parchment_mappings_version=2024.07.28 loader_version_range=[4,) @@ -52,5 +52,5 @@ curios_version_range=[9,) cucumber_version=1.21.1-8.0.8 mystical_agriculture_version=1.21.1-8.0.9 mystical_agriculture_version_range=[8.0.0,) -lodestone_version=1.21.1-1.7.0.99 -lodestone_version_range=[1.21.1-1.7.0.99,) \ No newline at end of file +lodestone_version=1.21.1-1.7.0.111 +lodestone_version_range=[1.21.1-1.7.0.111,) \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 3a602853..d7298afa 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -47,6 +47,7 @@ import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.extended_industrialization.network.packet.ModifyElectricToolSpeedPacket; import net.swedz.tesseract.neoforge.item.DynamicDyedItem; +import net.swedz.tesseract.neoforge.registry.holder.ItemHolder; @Mod(value = EI.ID, dist = Dist.CLIENT) @EventBusSubscriber(value = Dist.CLIENT, modid = EI.ID, bus = EventBusSubscriber.Bus.MOD) @@ -90,6 +91,12 @@ public EIClient(IEventBus bus, ModContainer container) }); } + @SubscribeEvent + private static void registerItemProperties(FMLClientSetupEvent event) + { + event.enqueueWork(() -> EIItems.values().forEach(ItemHolder::triggerClientRegistrationListener)); + } + @SubscribeEvent private static void onRegisterColorItems(RegisterColorHandlersEvent.Item event) { diff --git a/src/main/java/net/swedz/extended_industrialization/EIItems.java b/src/main/java/net/swedz/extended_industrialization/EIItems.java index 7eefd9ab..98a2f17d 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIItems.java +++ b/src/main/java/net/swedz/extended_industrialization/EIItems.java @@ -70,8 +70,8 @@ public static void init(IEventBus bus) public static final ItemHolder CANNED_FOOD = create("canned_food", "Canned Food", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.3f).fast().usingConvertsTo(TIN_CAN).build())).tag(ItemTags.WOLF_FOOD, ItemTags.CAT_FOOD).withModelBuilder(CommonModelBuilders::generated).register(); public static final ItemHolder MACHINE_CONFIG_CARD = create("machine_config_card", "Machine Config Card", MachineConfigCardItem::new, EISortOrder.OTHER_GEAR).withModelBuilder(CommonModelBuilders::generated).register(); - public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModelBuilder(CommonModelBuilders::generated).withRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); - public static final ItemHolder TESLA_HANDHELD_RECEIVER = create("tesla_handheld_receiver", "Tesla Handheld Receiver", TeslaHandheldReceiverItem::new, EISortOrder.OTHER_GEAR).withRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); + public static final ItemHolder TESLA_CALIBRATOR = create("tesla_calibrator", "Tesla Calibrator", TeslaCalibratorItem::new, EISortOrder.OTHER_GEAR).withModelBuilder(CommonModelBuilders::generated).withClientRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); + public static final ItemHolder TESLA_HANDHELD_RECEIVER = create("tesla_handheld_receiver", "Tesla Handheld Receiver", TeslaHandheldReceiverItem::new, EISortOrder.OTHER_GEAR).withClientRegistrationListener(EIItems::itemPropertyTeslaNetworkSelected).register(); public static final ItemHolder TESLA_INTERDIMENSIONAL_UPGRADE = create("tesla_interdimensional_upgrade", "Tesla Interdimensional Upgrade", Item::new, EISortOrder.OTHER_GEAR).withProperties((p) -> p.stacksTo(1).rarity(Rarity.EPIC)).withModelBuilder(CommonModelBuilders::generated).register(); From fecda89069b8901a7bd80b84b64609c4687680d3 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 12 Dec 2024 11:20:14 -0500 Subject: [PATCH 120/159] Formatting --- .../brewery/ElectricBreweryMachineBlockEntity.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/brewery/ElectricBreweryMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/brewery/ElectricBreweryMachineBlockEntity.java index 879f5566..44d12d3e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/brewery/ElectricBreweryMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/brewery/ElectricBreweryMachineBlockEntity.java @@ -40,12 +40,13 @@ public final class ElectricBreweryMachineBlockEntity extends BreweryMachineBlock private static final int EFFICIENCY_BAR_X = 57; private static final int EFFICIENCY_BAR_Y = 86; - private final EnergyComponent energy; - private final MIEnergyStorage insertable; private final RedstoneControlComponent redstoneControl; private final CasingComponent casing; private final UpgradeComponent upgrades; + private final EnergyComponent energy; + private final MIEnergyStorage insertable; + public ElectricBreweryMachineBlockEntity(BEP bep) { super(bep, "electric_brewery", MachineTier.LV, 32 * FluidType.BUCKET_VOLUME); From a411fe3cd4f3d38678740dcad3ee06fd34a25f6f Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 12 Dec 2024 11:36:08 -0500 Subject: [PATCH 121/159] Allow applying casing and redstone control using right click in world --- .../tesla/TeslaCoilMachineBlockEntity.java | 18 ++++++++++++++++++ .../tesla/TeslaReceiverMachineBlockEntity.java | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 68ed96db..a3eb7993 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -20,6 +20,9 @@ import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.AABB; @@ -294,6 +297,21 @@ public void tick() isActive.updateActive(active, this); } + @Override + protected ItemInteractionResult useItemOn(Player player, InteractionHand hand, Direction face) + { + ItemInteractionResult result = super.useItemOn(player, hand, face); + if(!result.consumesAction()) + { + result = redstoneControl.onUse(this, player, hand); + } + if(!result.consumesAction()) + { + result = casing.onUse(this, player, hand); + } + return result; + } + @Override public List getTooltips() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index fd187ba1..5600b001 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -19,6 +19,9 @@ import aztech.modern_industrialization.util.Tickable; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.AABB; @@ -231,6 +234,21 @@ public void tick() } } + @Override + protected ItemInteractionResult useItemOn(Player player, InteractionHand hand, Direction face) + { + ItemInteractionResult result = super.useItemOn(player, hand, face); + if(!result.consumesAction()) + { + result = redstoneControl.onUse(this, player, hand); + } + if(!result.consumesAction()) + { + result = casing.onUse(this, player, hand); + } + return result; + } + @Override public List getTooltips() { From 92b4e4507000b6ea40d679dcb4621564ca891388 Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 12 Dec 2024 12:48:44 -0500 Subject: [PATCH 122/159] Add plasma renderer to tesla receiver hatches --- .../tesla/TeslaCoilMachineBlockEntity.java | 22 ++-- .../tesla/TeslaReceiverHatchBlockEntity.java | 108 +++++++++++++++++- .../TeslaReceiverMachineBlockEntity.java | 8 +- 3 files changed, 121 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index a3eb7993..2457e9a2 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -208,30 +208,30 @@ public float getTextureScale() } @Override - public MIInventory getInventory() + public TeslaTransmitter getDelegateTransmitter() { - return MIInventory.EMPTY; + return transmitter; } @Override - public EnergyAccess getEnergyComponent() + protected MachineModelClientData getMachineModelData() { - return energy; + MachineModelClientData data = new MachineModelClientData(casing.getCasing()); + data.isActive = isActive.isActive; + orientation.writeModelData(data); + return data; } @Override - public TeslaTransmitter getDelegateTransmitter() + public MIInventory getInventory() { - return transmitter; + return MIInventory.EMPTY; } @Override - protected MachineModelClientData getMachineModelData() + public EnergyAccess getEnergyComponent() { - MachineModelClientData data = new MachineModelClientData(casing.getCasing()); - data.isActive = isActive.isActive; - orientation.writeModelData(data); - return data; + return energy; } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java index 1f27933a..e75851cd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java @@ -8,15 +8,24 @@ import aztech.modern_industrialization.inventory.MIInventory; import aztech.modern_industrialization.machines.BEP; import aztech.modern_industrialization.machines.components.EnergyComponent; +import aztech.modern_industrialization.machines.components.IsActiveComponent; import aztech.modern_industrialization.machines.components.OrientationComponent; import aztech.modern_industrialization.machines.gui.MachineGuiParameters; import aztech.modern_industrialization.machines.guicomponents.EnergyBar; +import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; import aztech.modern_industrialization.machines.multiblocks.HatchType; +import com.google.common.collect.Sets; +import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; @@ -25,13 +34,16 @@ import java.util.List; import java.util.Optional; +import java.util.Set; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; -public final class TeslaReceiverHatchBlockEntity extends HatchBlockEntity implements EnergyComponentHolder, CableTierHolder, TeslaReceiver.Delegate +public final class TeslaReceiverHatchBlockEntity extends HatchBlockEntity implements EnergyComponentHolder, CableTierHolder, TeslaReceiver.Delegate, TeslaPlasmaBehaviorHolder { private final CableTier tier; + private final IsActiveComponent isActive; + private final EnergyComponent energy; private final MIEnergyStorage insertable; @@ -47,12 +59,14 @@ public TeslaReceiverHatchBlockEntity(BEP bep, CableTier tier) this.tier = tier; + isActive = new IsActiveComponent(); + energy = new EnergyComponent(this, () -> 30 * 20 * tier.getEu()); insertable = energy.buildInsertable((other) -> other == tier); receiver = new TeslaReceiverComponent(this, insertable, () -> true, () -> tier); - this.registerComponents(energy, receiver); + this.registerComponents(isActive, energy, receiver); this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); @@ -89,12 +103,81 @@ private void onCasingUpdate(CableTier from, CableTier to) } } + @Override + public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + { + return new TeslaPlasmaBehavior() + { + @Override + public boolean shouldRender() + { + return isActive.isActive; + } + + @Override + public Vec3 getOffset() + { + return Vec3.ZERO; + } + + private static Set only(Direction direction) + { + Set ignoreFaces = Sets.newHashSet(Direction.values()); + ignoreFaces.remove(direction); + return ignoreFaces; + } + + @Override + public void getShape(TeslaPlasmaShapeAdder shapes) + { + double inflate = 0.02; + double inflate2 = inflate * 2; + + shapes.add(new AABB(5f / 16f, 6f / 16f, 0, 6f / 16f - inflate2, 10f / 16f, 0).inflate(inflate, inflate, inflate), only(Direction.NORTH)); + shapes.add(new AABB(6f / 16f, 5f / 16f, 0, 10f / 16f, 11f / 16f, 0).inflate(inflate, inflate, inflate), only(Direction.NORTH)); + shapes.add(new AABB(10f / 16f + inflate2, 6f / 16f, 0, 11f / 16f, 10f / 16f, 0).inflate(inflate, inflate, inflate), only(Direction.NORTH)); + + shapes.add(new AABB(5f / 16f, 6f / 16f, 1, 6f / 16f - inflate2, 10f / 16f, 1).inflate(inflate, inflate, inflate), only(Direction.SOUTH)); + shapes.add(new AABB(6f / 16f, 5f / 16f, 1, 10f / 16f, 11f / 16f, 1).inflate(inflate, inflate, inflate), only(Direction.SOUTH)); + shapes.add(new AABB(10f / 16f + inflate2, 6f / 16f, 1, 11f / 16f, 10f / 16f, 1).inflate(inflate, inflate, inflate), only(Direction.SOUTH)); + + shapes.add(new AABB(1, 6f / 16f, 5f / 16f, 1, 10f / 16f, 6f / 16f - inflate2).inflate(inflate, inflate, inflate), only(Direction.EAST)); + shapes.add(new AABB(1, 5f / 16f, 6f / 16f, 1, 11f / 16f, 10f / 16f).inflate(inflate, inflate, inflate), only(Direction.EAST)); + shapes.add(new AABB(1, 6f / 16f, 10f / 16f + inflate2, 1, 10f / 16f, 11f / 16f).inflate(inflate, inflate, inflate), only(Direction.EAST)); + + shapes.add(new AABB(0, 6f / 16f, 5f / 16f, 0, 10f / 16f, 6f / 16f - inflate2).inflate(inflate, inflate, inflate), only(Direction.WEST)); + shapes.add(new AABB(0, 5f / 16f, 6f / 16f, 0, 11f / 16f, 10f / 16f).inflate(inflate, inflate, inflate), only(Direction.WEST)); + shapes.add(new AABB(0, 6f / 16f, 10f / 16f + inflate2, 0, 10f / 16f, 11f / 16f).inflate(inflate, inflate, inflate), only(Direction.WEST)); + } + + @Override + public float getSpeed() + { + return 0.0075f; + } + + @Override + public float getTextureScale() + { + return 8f / 64f; + } + }; + } + @Override public TeslaReceiver getDelegateReceiver() { return receiver; } + @Override + protected MachineModelClientData getMachineModelData() + { + MachineModelClientData data = super.getMachineModelData(); + data.isActive = isActive.isActive; + return data; + } + @Override public CableTier getCableTier() { @@ -157,6 +240,27 @@ public void setRemoved() receiver.removeFromNetwork(); } + @Override + public void tick() + { + super.tick(); + + if(level.isClientSide()) + { + return; + } + + if(this.hasNetwork() && this.getNetwork().isTransmitterLoaded()) + { + TeslaNetwork network = this.getNetwork(); + isActive.updateActive(network.isTransmitterLoaded() && this.checkReceiveFrom(network).isSuccess(), this); + } + else + { + isActive.updateActive(false, this); + } + } + @Override public List getTooltips() { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index 5600b001..e132052f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -164,9 +164,9 @@ public float getTextureScale() } @Override - public MIInventory getInventory() + public TeslaReceiver getDelegateReceiver() { - return MIInventory.EMPTY; + return receiver; } @Override @@ -179,9 +179,9 @@ protected MachineModelClientData getMachineModelData() } @Override - public TeslaReceiver getDelegateReceiver() + public MIInventory getInventory() { - return receiver; + return MIInventory.EMPTY; } @Override From 240ba2a456eceec3b356435334b87aed03ea145c Mon Sep 17 00:00:00 2001 From: Swedz Date: Thu, 12 Dec 2024 12:59:32 -0500 Subject: [PATCH 123/159] Make tesla receiver hatch recipes a bit more consistent with other hatch recipes --- .../ev_tesla_receiver_hatch/assembler.json | 12 ++++------ .../ev_tesla_receiver_hatch/craft.json | 24 +++++++++++++++++++ .../ev_tesla_receiver_hatch/unpacker.json | 4 ++-- .../hv_tesla_receiver_hatch/assembler.json | 12 ++++------ .../hv_tesla_receiver_hatch/craft.json | 24 +++++++++++++++++++ .../hv_tesla_receiver_hatch/unpacker.json | 4 ++-- .../lv_tesla_receiver_hatch/assembler.json | 12 ++++------ .../lv_tesla_receiver_hatch/craft.json | 24 +++++++++++++++++++ .../lv_tesla_receiver_hatch/unpacker.json | 4 ++-- .../mv_tesla_receiver_hatch/assembler.json | 12 ++++------ .../mv_tesla_receiver_hatch/craft.json | 24 +++++++++++++++++++ .../mv_tesla_receiver_hatch/unpacker.json | 4 ++-- .../assembler.json | 12 ++++------ .../craft.json | 24 +++++++++++++++++++ .../unpacker.json | 4 ++-- ...chineItemRecipesServerDatagenProvider.java | 23 +++++++++--------- 16 files changed, 162 insertions(+), 61 deletions(-) create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/craft.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/craft.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/craft.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/craft.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/craft.json diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/assembler.json index 6cbf06ec..f146b76f 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/assembler.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/assembler.json @@ -5,19 +5,15 @@ "item_inputs": [ { "amount": 1, - "item": "modern_industrialization:annealed_copper_cable" + "item": "extended_industrialization:tesla_receiver" }, { "amount": 1, - "item": "modern_industrialization:highly_advanced_machine_hull" - }, - { - "amount": 4, - "item": "extended_industrialization:silver_curved_plate" + "item": "modern_industrialization:annealed_copper_cable" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "modern_industrialization:highly_advanced_machine_hull" } ], "item_outputs": [ diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/craft.json new file mode 100644 index 00000000..90857729 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/craft.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "modern_industrialization:annealed_copper_cable" + }, + "H": { + "item": "modern_industrialization:highly_advanced_machine_hull" + }, + "R": { + "item": "extended_industrialization:tesla_receiver" + } + }, + "pattern": [ + "R", + "H", + "C" + ], + "result": { + "count": 1, + "id": "extended_industrialization:ev_tesla_receiver_hatch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/unpacker.json index 546486b7..0502085d 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/unpacker.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/ev_tesla_receiver_hatch/unpacker.json @@ -14,8 +14,8 @@ "item": "modern_industrialization:highly_advanced_machine_hull" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "extended_industrialization:tesla_receiver" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/assembler.json index fe3f2a5f..270f7352 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/assembler.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/assembler.json @@ -5,19 +5,15 @@ "item_inputs": [ { "amount": 1, - "item": "modern_industrialization:aluminum_cable" + "item": "extended_industrialization:tesla_receiver" }, { "amount": 1, - "item": "modern_industrialization:turbo_machine_hull" - }, - { - "amount": 4, - "item": "extended_industrialization:silver_curved_plate" + "item": "modern_industrialization:aluminum_cable" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "modern_industrialization:turbo_machine_hull" } ], "item_outputs": [ diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/craft.json new file mode 100644 index 00000000..3abf3f60 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/craft.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "modern_industrialization:aluminum_cable" + }, + "H": { + "item": "modern_industrialization:turbo_machine_hull" + }, + "R": { + "item": "extended_industrialization:tesla_receiver" + } + }, + "pattern": [ + "R", + "H", + "C" + ], + "result": { + "count": 1, + "id": "extended_industrialization:hv_tesla_receiver_hatch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/unpacker.json index e09a4d17..780e75b6 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/unpacker.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/hv_tesla_receiver_hatch/unpacker.json @@ -14,8 +14,8 @@ "item": "modern_industrialization:turbo_machine_hull" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "extended_industrialization:tesla_receiver" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/assembler.json index 6663680a..b55165e6 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/assembler.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/assembler.json @@ -5,19 +5,15 @@ "item_inputs": [ { "amount": 1, - "item": "modern_industrialization:tin_cable" + "item": "extended_industrialization:tesla_receiver" }, { "amount": 1, - "item": "modern_industrialization:basic_machine_hull" - }, - { - "amount": 4, - "item": "extended_industrialization:silver_curved_plate" + "item": "modern_industrialization:tin_cable" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "modern_industrialization:basic_machine_hull" } ], "item_outputs": [ diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/craft.json new file mode 100644 index 00000000..cd9ca826 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/craft.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "modern_industrialization:tin_cable" + }, + "H": { + "item": "modern_industrialization:basic_machine_hull" + }, + "R": { + "item": "extended_industrialization:tesla_receiver" + } + }, + "pattern": [ + "R", + "H", + "C" + ], + "result": { + "count": 1, + "id": "extended_industrialization:lv_tesla_receiver_hatch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/unpacker.json index 9607644d..01761e1c 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/unpacker.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/lv_tesla_receiver_hatch/unpacker.json @@ -14,8 +14,8 @@ "item": "modern_industrialization:basic_machine_hull" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "extended_industrialization:tesla_receiver" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/assembler.json index 65188b81..41d86e57 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/assembler.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/assembler.json @@ -5,19 +5,15 @@ "item_inputs": [ { "amount": 1, - "item": "modern_industrialization:electrum_cable" + "item": "extended_industrialization:tesla_receiver" }, { "amount": 1, - "item": "modern_industrialization:advanced_machine_hull" - }, - { - "amount": 4, - "item": "extended_industrialization:silver_curved_plate" + "item": "modern_industrialization:electrum_cable" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "modern_industrialization:advanced_machine_hull" } ], "item_outputs": [ diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/craft.json new file mode 100644 index 00000000..4a93d782 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/craft.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "modern_industrialization:electrum_cable" + }, + "H": { + "item": "modern_industrialization:advanced_machine_hull" + }, + "R": { + "item": "extended_industrialization:tesla_receiver" + } + }, + "pattern": [ + "R", + "H", + "C" + ], + "result": { + "count": 1, + "id": "extended_industrialization:mv_tesla_receiver_hatch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/unpacker.json index e2d2d71e..fed7ef4a 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/unpacker.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/mv_tesla_receiver_hatch/unpacker.json @@ -14,8 +14,8 @@ "item": "modern_industrialization:advanced_machine_hull" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "extended_industrialization:tesla_receiver" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/assembler.json index 41106fcf..17713a97 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/assembler.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/assembler.json @@ -5,19 +5,15 @@ "item_inputs": [ { "amount": 1, - "item": "modern_industrialization:superconductor_cable" + "item": "extended_industrialization:tesla_receiver" }, { "amount": 1, - "item": "modern_industrialization:quantum_machine_hull" - }, - { - "amount": 4, - "item": "extended_industrialization:silver_curved_plate" + "item": "modern_industrialization:superconductor_cable" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "modern_industrialization:quantum_machine_hull" } ], "item_outputs": [ diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/craft.json new file mode 100644 index 00000000..083f9437 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/craft.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "modern_industrialization:superconductor_cable" + }, + "H": { + "item": "modern_industrialization:quantum_machine_hull" + }, + "R": { + "item": "extended_industrialization:tesla_receiver" + } + }, + "pattern": [ + "R", + "H", + "C" + ], + "result": { + "count": 1, + "id": "extended_industrialization:superconductor_tesla_receiver_hatch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/unpacker.json b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/unpacker.json index c33fa3c1..ccf07cbd 100644 --- a/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/unpacker.json +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/superconductor_tesla_receiver_hatch/unpacker.json @@ -14,8 +14,8 @@ "item": "modern_industrialization:quantum_machine_hull" }, { - "amount": 2, - "item": "modern_industrialization:electronic_circuit" + "amount": 1, + "item": "extended_industrialization:tesla_receiver" } ] } \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java index 6f0c3070..2830b634 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java @@ -1,7 +1,7 @@ package net.swedz.extended_industrialization.datagen.server.provider.recipes; -import aztech.modern_industrialization.MIBlock; import aztech.modern_industrialization.MI; +import aztech.modern_industrialization.MIBlock; import aztech.modern_industrialization.MIItem; import aztech.modern_industrialization.MITags; import aztech.modern_industrialization.api.energy.CableTier; @@ -620,15 +620,16 @@ private static void tesla(RecipeOutput output) String casing = casings[i]; String cable = cables[i]; CableTier tier = cableTiers[i]; - addMachineRecipe( - "machines/%s_tesla_receiver_hatch".formatted(tier.name), "assembler", MIMachineRecipeTypes.ASSEMBLER, - 8, 10 * 20, + addBasicCraftingMachineRecipes( + "%s_tesla_receiver_hatch".formatted(tier.name), (builder) -> builder - .addItemInput("%s:%s_cable".formatted(MI.ID, cable), 1) - .addItemInput("%s:%s_machine_hull".formatted(MI.ID, casing), 1) - .addItemInput(EIMaterials.SILVER.get(EIMaterials.Parts.CURVED_PLATE), 4) - .addItemInput(MIItem.ELECTRONIC_CIRCUIT, 2) - .addItemOutput("%s:%s_tesla_receiver_hatch".formatted(EI.ID, tier.name), 1), + .define('R', "%s:tesla_receiver".formatted(EI.ID)) + .define('H', "%s:%s_machine_hull".formatted(MI.ID, casing)) + .define('C', "%s:%s_cable".formatted(MI.ID, cable)) + .pattern("R") + .pattern("H") + .pattern("C"), + true, output ); addMachineRecipe( @@ -636,8 +637,8 @@ private static void tesla(RecipeOutput output) 2, 10 * 20, (builder) -> builder .addItemInput("%s:%s_tesla_receiver_hatch".formatted(EI.ID, tier.name), 1) - .addItemOutput("modern_industrialization:%s_machine_hull".formatted(casing), 1) - .addItemOutput(MIItem.ELECTRONIC_CIRCUIT, 2), + .addItemOutput("%s:%s_machine_hull".formatted(MI.ID, casing), 1) + .addItemOutput("%s:tesla_receiver".formatted(EI.ID), 1), output ); } From 26c5a74c5e1af2ee2cb1219375ec4c19d6119c77 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 31 Dec 2024 04:26:28 -0500 Subject: [PATCH 124/159] Use models to render tesla plasma instead of hardcoded quads --- .../extended_industrialization/EIClient.java | 9 ++ .../EIClientRenderTypes.java | 36 ++++++++ .../EIClientShaders.java | 37 +++++++++ .../shader/TeslaPlasmaTextureStateShard.java | 26 ++++++ .../client/tesla/TeslaPartRenderer.java | 51 +++--------- .../tesla/generator/TeslaPlasmaBehavior.java | 5 +- .../teslatower/TeslaTowerBlockEntity.java | 25 +++--- .../tesla/TeslaCoilMachineBlockEntity.java | 23 +++--- .../tesla/TeslaReceiverHatchBlockEntity.java | 40 ++------- .../TeslaReceiverMachineBlockEntity.java | 24 +++--- .../models/tesla_plasma/tesla_coil.json | 49 +++++++++++ .../models/tesla_plasma/tesla_hatch.json | 71 ++++++++++++++++ .../models/tesla_plasma/tesla_tower.json | 77 ++++++++++++++++++ .../shaders/core/tesla_plasma.fsh | 34 ++++++++ .../shaders/core/tesla_plasma.json | 15 ++++ .../shaders/core/tesla_plasma.vsh | 18 ++++ .../{plasma_overlay.png => tesla_plasma.png} | Bin ...overlay_test.png => tesla_plasma_test.png} | Bin 18 files changed, 433 insertions(+), 107 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java create mode 100644 src/main/java/net/swedz/extended_industrialization/EIClientShaders.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/shader/TeslaPlasmaTextureStateShard.java create mode 100644 src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_coil.json create mode 100644 src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_hatch.json create mode 100644 src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_tower.json create mode 100644 src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.fsh create mode 100644 src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.json create mode 100644 src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.vsh rename src/main/resources/assets/extended_industrialization/textures/vfx/{plasma_overlay.png => tesla_plasma.png} (100%) rename src/main/resources/assets/extended_industrialization/textures/vfx/{plasma_overlay_test.png => tesla_plasma_test.png} (100%) diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index d7298afa..31c0d00a 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -11,6 +11,7 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -155,4 +156,12 @@ private static void registerGuiLayers(RegisterGuiLayersEvent event) { event.registerAbove(VanillaGuiLayers.SELECTED_ITEM_NAME, EI.id("nano_gravichestplate_activation_status"), NanoGravichestplateHudRenderer::render); } + + @SubscribeEvent + private static void registerAdditionalModels(ModelEvent.RegisterAdditional event) + { + event.register(ModelResourceLocation.standalone(EI.id("tesla_plasma/tesla_coil"))); + event.register(ModelResourceLocation.standalone(EI.id("tesla_plasma/tesla_hatch"))); + event.register(ModelResourceLocation.standalone(EI.id("tesla_plasma/tesla_tower"))); + } } diff --git a/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java b/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java new file mode 100644 index 00000000..32964c85 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java @@ -0,0 +1,36 @@ +package net.swedz.extended_industrialization; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import net.minecraft.Util; +import net.minecraft.client.renderer.RenderType; +import net.swedz.extended_industrialization.client.shader.TeslaPlasmaTextureStateShard; + +import java.util.function.BiFunction; + +import static net.minecraft.client.renderer.RenderStateShard.*; + +public final class EIClientRenderTypes +{ + public static final BiFunction TESLA_PLASMA = Util.memoize(EIClientRenderTypes::createTeslaPlasma); + + private static RenderType createTeslaPlasma(float scale, float speed) + { + return RenderType.create( + "plasma", + DefaultVertexFormat.POSITION_TEX, + VertexFormat.Mode.QUADS, + 1536, + false, + true, + RenderType.CompositeState.builder() + .setShaderState(EIClientShaders.TESLA_PLASMA) + .setTextureState(new TeslaPlasmaTextureStateShard(EI.id("textures/vfx/tesla_plasma.png"), scale, speed)) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setCullState(CULL) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(false) + ); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/EIClientShaders.java b/src/main/java/net/swedz/extended_industrialization/EIClientShaders.java new file mode 100644 index 00000000..a1ca194b --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/EIClientShaders.java @@ -0,0 +1,37 @@ +package net.swedz.extended_industrialization; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.ShaderInstance; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RegisterShadersEvent; + +import java.io.IOException; + +@EventBusSubscriber(value = Dist.CLIENT, modid = EI.ID, bus = EventBusSubscriber.Bus.MOD) +public final class EIClientShaders +{ + private static ShaderInstance TESLA_PLASMA_INSTANCE; + + public static ShaderInstance teslaPlasma() + { + return TESLA_PLASMA_INSTANCE; + } + + public static final RenderStateShard.ShaderStateShard TESLA_PLASMA = new RenderStateShard.ShaderStateShard(EIClientShaders::teslaPlasma); + + @SubscribeEvent + private static void registerShaders(RegisterShadersEvent event) + { + try + { + event.registerShader(new ShaderInstance(event.getResourceProvider(), EI.id("tesla_plasma"), DefaultVertexFormat.POSITION_TEX), (shader) -> TESLA_PLASMA_INSTANCE = shader); + } + catch (IOException ex) + { + throw new RuntimeException(ex); + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/shader/TeslaPlasmaTextureStateShard.java b/src/main/java/net/swedz/extended_industrialization/client/shader/TeslaPlasmaTextureStateShard.java new file mode 100644 index 00000000..f4c0f15f --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/shader/TeslaPlasmaTextureStateShard.java @@ -0,0 +1,26 @@ +package net.swedz.extended_industrialization.client.shader; + +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.resources.ResourceLocation; +import net.swedz.extended_industrialization.EIClientShaders; + +public final class TeslaPlasmaTextureStateShard extends RenderStateShard.TextureStateShard +{ + private final float scale, speed; + + public TeslaPlasmaTextureStateShard(ResourceLocation texture, float scale, float speed) + { + super(texture, false, false); + this.scale = scale; + this.speed = speed; + } + + @Override + public void setupRenderState() + { + super.setupRenderState(); + + EIClientShaders.teslaPlasma().getUniform("PlasmaScale").set(scale); + EIClientShaders.teslaPlasma().getUniform("PlasmaSpeed").set(speed); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java index abed1af0..a42c895c 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java @@ -2,19 +2,19 @@ import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.util.RenderHelper; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderStateShard; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.model.renderable.BakedModelRenderable; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; +import net.swedz.extended_industrialization.EIClientRenderTypes; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; @@ -23,7 +23,6 @@ import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.tesseract.neoforge.api.WorldPos; -import net.swedz.tesseract.neoforge.helper.BoxRenderHelper; import team.lodestar.lodestone.handlers.RenderHandler; import team.lodestar.lodestone.registry.client.LodestoneRenderTypes; import team.lodestar.lodestone.systems.rendering.LodestoneRenderType; @@ -35,8 +34,6 @@ import java.util.List; import java.util.Optional; -import static net.minecraft.client.renderer.RenderStateShard.*; - final class TeslaPartRenderer { private static void renderHighlight(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) @@ -104,25 +101,9 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po } } - private static RenderType getPlasmaRenderType(float u, float v) + private static BakedModelRenderable getModel(ResourceLocation location) { - return RenderType.create( - "plasma", - DefaultVertexFormat.NEW_ENTITY, - VertexFormat.Mode.QUADS, - 1536, - false, - true, - RenderType.CompositeState.builder() - .setShaderState(RENDERTYPE_ENERGY_SWIRL_SHADER) - .setTextureState(new RenderStateShard.TextureStateShard(EI.id("textures/vfx/plasma_overlay.png"), false, false)) - .setTexturingState(new RenderStateShard.OffsetTexturingStateShard(u, v)) - .setTransparencyState(TRANSLUCENT_TRANSPARENCY) - .setCullState(NO_CULL) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(false) - ); + return BakedModelRenderable.of(ModelResourceLocation.standalone(location)); } private static void renderPlasma(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) @@ -137,19 +118,13 @@ private static void renderPlasma(MachineBlockEntity machine, float partialTick, Vec3 offset = behavior.getOffset(); matrices.translate(offset.x(), offset.y(), offset.z()); - float tick = Minecraft.getInstance().levelRenderer.getTicks() + partialTick; - float speed = behavior.getSpeed(); - float u = (tick * speed) % 1f; - float v = (tick * speed) % 1f; - VertexConsumer vc = buffer.getBuffer(getPlasmaRenderType(u, v)); + float modelScale = behavior.getModelScale(); + matrices.scale(modelScale, modelScale, modelScale); - behavior.getShape((box, ignoreFaces) -> - BoxRenderHelper.renderBox( - matrices, light, overlay, vc, - box, (d) -> !ignoreFaces.contains(d), - 64f, 32f, behavior.getTextureScale(), - 1f, 1f, 1f, 0.8f - )); + var model = getModel(behavior.getModelLocation()); + float textureScale = behavior.getTextureScale(); + float speed = behavior.getSpeed(); + model.render(matrices, buffer, (texture) -> EIClientRenderTypes.TESLA_PLASMA.apply(textureScale, speed), light, overlay, partialTick, new BakedModelRenderable.Context(ModelData.EMPTY)); matrices.popPose(); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java index 00da1e6f..dfd99a92 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java +++ b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.client.tesla.generator; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; public interface TeslaPlasmaBehavior @@ -8,7 +9,9 @@ public interface TeslaPlasmaBehavior Vec3 getOffset(); - void getShape(TeslaPlasmaShapeAdder shapes); + ResourceLocation getModelLocation(); + + float getModelScale(); float getSpeed(); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 71f0d4b7..70fb8360 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -21,7 +21,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; @@ -31,7 +30,6 @@ import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; @@ -46,7 +44,6 @@ import java.util.List; import java.util.Map; -import java.util.Set; import static aztech.modern_industrialization.MITooltips.*; import static net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGuiLine.*; @@ -187,31 +184,31 @@ public boolean shouldRender() @Override public Vec3 getOffset() { - return Vec3.atLowerCornerOf(TeslaTowerBlockEntity.this.getTopLoadPositionRelative()); + return Vec3.atCenterOf(TeslaTowerBlockEntity.this.getTopLoadPositionRelative()); } @Override - public void getShape(TeslaPlasmaShapeAdder shapes) + public ResourceLocation getModelLocation() { - double inflate = 0.1; - shapes.add(new AABB(-1, -2 - inflate, -1, 2, -1 - inflate, 2).inflate(inflate, 0, inflate), Set.of(Direction.UP)); - shapes.add(new AABB(-1, 2 + inflate, -1, 2, 3 + inflate, 2).inflate(inflate, 0, inflate), Set.of(Direction.DOWN)); - shapes.add(new AABB(2 + inflate, -1, -1, 3 + inflate, 2, 2).inflate(0, inflate, inflate), Set.of(Direction.WEST)); - shapes.add(new AABB(-2 - inflate, -1, -1, -1 - inflate, 2, 2).inflate(0, inflate, inflate), Set.of(Direction.EAST)); - shapes.add(new AABB(-1, -1, 2 + inflate, 2, 2, 3 + inflate).inflate(inflate, inflate, 0), Set.of(Direction.NORTH)); - shapes.add(new AABB(-1, -1, -2 - inflate, 2, 2, -1 - inflate).inflate(inflate, inflate, 0), Set.of(Direction.SOUTH)); + return EI.id("tesla_plasma/tesla_tower"); + } + + @Override + public float getModelScale() + { + return 5.25f; } @Override public float getSpeed() { - return 0.0075f; + return 60f; } @Override public float getTextureScale() { - return 32f / 64f; + return 48f; } }; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 2457e9a2..ff592ac7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -20,12 +20,12 @@ import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; @@ -36,7 +36,6 @@ import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; @@ -180,29 +179,31 @@ public boolean shouldRender() @Override public Vec3 getOffset() { - return Vec3.ZERO; + return new Vec3(-0.05f / 2f, -0.05f / 2f, -0.05f / 2f); } @Override - public void getShape(TeslaPlasmaShapeAdder shapes) + public ResourceLocation getModelLocation() { - double inflate = 0.02; - shapes.add(new AABB(0, 11f / 16f - inflate, 0, 1, 1 + inflate, 5f / 16f).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.SOUTH)); - shapes.add(new AABB(0, 11f / 16f - inflate, 11f / 16f, 1, 1 + inflate, 1).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.NORTH)); - shapes.add(new AABB(0, 11f / 16f - inflate, 5f / 16f + inflate + inflate, 5f / 16f, 1 + inflate, 11f / 16f - inflate - inflate).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.EAST, Direction.SOUTH, Direction.NORTH)); - shapes.add(new AABB(11f / 16f, 11f / 16f - inflate, 5f / 16f + inflate + inflate, 1, 1 + inflate, 11f / 16f - inflate - inflate).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.WEST, Direction.SOUTH, Direction.NORTH)); + return EI.id("tesla_plasma/tesla_coil"); + } + + @Override + public float getModelScale() + { + return 1.05f; } @Override public float getSpeed() { - return 0.0075f; + return 100f; } @Override public float getTextureScale() { - return 8f / 64f; + return 32f; } }; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java index e75851cd..42592581 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java @@ -15,17 +15,14 @@ import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.machines.multiblocks.HatchBlockEntity; import aztech.modern_industrialization.machines.multiblocks.HatchType; -import com.google.common.collect.Sets; -import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; @@ -34,7 +31,6 @@ import java.util.List; import java.util.Optional; -import java.util.Set; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; @@ -117,49 +113,31 @@ public boolean shouldRender() @Override public Vec3 getOffset() { - return Vec3.ZERO; + return new Vec3(-0.05f / 2f, -0.05f / 2f, -0.05f / 2f); } - private static Set only(Direction direction) + @Override + public ResourceLocation getModelLocation() { - Set ignoreFaces = Sets.newHashSet(Direction.values()); - ignoreFaces.remove(direction); - return ignoreFaces; + return EI.id("tesla_plasma/tesla_hatch"); } @Override - public void getShape(TeslaPlasmaShapeAdder shapes) + public float getModelScale() { - double inflate = 0.02; - double inflate2 = inflate * 2; - - shapes.add(new AABB(5f / 16f, 6f / 16f, 0, 6f / 16f - inflate2, 10f / 16f, 0).inflate(inflate, inflate, inflate), only(Direction.NORTH)); - shapes.add(new AABB(6f / 16f, 5f / 16f, 0, 10f / 16f, 11f / 16f, 0).inflate(inflate, inflate, inflate), only(Direction.NORTH)); - shapes.add(new AABB(10f / 16f + inflate2, 6f / 16f, 0, 11f / 16f, 10f / 16f, 0).inflate(inflate, inflate, inflate), only(Direction.NORTH)); - - shapes.add(new AABB(5f / 16f, 6f / 16f, 1, 6f / 16f - inflate2, 10f / 16f, 1).inflate(inflate, inflate, inflate), only(Direction.SOUTH)); - shapes.add(new AABB(6f / 16f, 5f / 16f, 1, 10f / 16f, 11f / 16f, 1).inflate(inflate, inflate, inflate), only(Direction.SOUTH)); - shapes.add(new AABB(10f / 16f + inflate2, 6f / 16f, 1, 11f / 16f, 10f / 16f, 1).inflate(inflate, inflate, inflate), only(Direction.SOUTH)); - - shapes.add(new AABB(1, 6f / 16f, 5f / 16f, 1, 10f / 16f, 6f / 16f - inflate2).inflate(inflate, inflate, inflate), only(Direction.EAST)); - shapes.add(new AABB(1, 5f / 16f, 6f / 16f, 1, 11f / 16f, 10f / 16f).inflate(inflate, inflate, inflate), only(Direction.EAST)); - shapes.add(new AABB(1, 6f / 16f, 10f / 16f + inflate2, 1, 10f / 16f, 11f / 16f).inflate(inflate, inflate, inflate), only(Direction.EAST)); - - shapes.add(new AABB(0, 6f / 16f, 5f / 16f, 0, 10f / 16f, 6f / 16f - inflate2).inflate(inflate, inflate, inflate), only(Direction.WEST)); - shapes.add(new AABB(0, 5f / 16f, 6f / 16f, 0, 11f / 16f, 10f / 16f).inflate(inflate, inflate, inflate), only(Direction.WEST)); - shapes.add(new AABB(0, 6f / 16f, 10f / 16f + inflate2, 0, 10f / 16f, 11f / 16f).inflate(inflate, inflate, inflate), only(Direction.WEST)); + return 1.05f; } @Override public float getSpeed() { - return 0.0075f; + return 100f; } @Override public float getTextureScale() { - return 8f / 64f; + return 48f; } }; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index e132052f..84fba054 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -19,18 +19,17 @@ import aztech.modern_industrialization.util.Tickable; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaShapeAdder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; @@ -40,7 +39,6 @@ import java.util.List; import java.util.Optional; -import java.util.Set; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; @@ -136,29 +134,31 @@ public boolean shouldRender() @Override public Vec3 getOffset() { - return Vec3.ZERO; + return new Vec3(-0.05f / 2f, -0.05f / 2f, -0.05f / 2f); } @Override - public void getShape(TeslaPlasmaShapeAdder shapes) + public ResourceLocation getModelLocation() { - double inflate = 0.02; - shapes.add(new AABB(0, 11f / 16f - inflate, 0, 1, 1 + inflate, 5f / 16f).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.SOUTH)); - shapes.add(new AABB(0, 11f / 16f - inflate, 11f / 16f, 1, 1 + inflate, 1).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.NORTH)); - shapes.add(new AABB(0, 11f / 16f - inflate, 5f / 16f + inflate + inflate, 5f / 16f, 1 + inflate, 11f / 16f - inflate - inflate).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.EAST, Direction.SOUTH, Direction.NORTH)); - shapes.add(new AABB(11f / 16f, 11f / 16f - inflate, 5f / 16f + inflate + inflate, 1, 1 + inflate, 11f / 16f - inflate - inflate).inflate(inflate, 0, inflate), Set.of(Direction.DOWN, Direction.WEST, Direction.SOUTH, Direction.NORTH)); + return EI.id("tesla_plasma/tesla_coil"); + } + + @Override + public float getModelScale() + { + return 1.05f; } @Override public float getSpeed() { - return 0.0075f; + return 100f; } @Override public float getTextureScale() { - return 8f / 64f; + return 32f; } }; } diff --git a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_coil.json b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_coil.json new file mode 100644 index 00000000..eb531ae1 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_coil.json @@ -0,0 +1,49 @@ +{ + "loader": "neoforge:elements", + "elements": [ + { + "name": "north", + "from": [0, 11, 0], + "to": [16, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 11, 0]}, + "faces": { + "north": {"uv": [1.25, 0, 5.25, 2.5], "rotation": 180, "texture": "#ignored"}, + "east": {"uv": [5.25, 2.5, 6.5, 5], "rotation": 90, "texture": "#ignored"}, + "west": {"uv": [0, 2.5, 1.25, 5], "rotation": 270, "texture": "#ignored"}, + "up": {"uv": [1.25, 2.5, 5.25, 5], "texture": "#ignored"} + } + }, + { + "name": "south", + "from": [0, 11, 11], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 11, 11]}, + "faces": { + "east": {"uv": [5.25, 8, 6.5, 10.5], "rotation": 90, "texture": "#ignored"}, + "south": {"uv": [1.25, 10.5, 5.25, 13], "texture": "#ignored"}, + "west": {"uv": [0, 8, 1.25, 10.5], "rotation": 270, "texture": "#ignored"}, + "up": {"uv": [1.25, 8, 5.25, 10.5], "texture": "#ignored"} + } + }, + { + "name": "west", + "from": [0, 11, 5], + "to": [5, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 11, 5]}, + "faces": { + "west": {"uv": [0, 5, 1.25, 8], "rotation": 270, "texture": "#ignored"}, + "up": {"uv": [1.25, 5, 2.5, 8], "texture": "#ignored"} + } + }, + { + "name": "east", + "from": [11, 11, 5], + "to": [16, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 11, 5]}, + "faces": { + "east": {"uv": [5.25, 5, 6.5, 8], "rotation": 90, "texture": "#ignored"}, + "up": {"uv": [4, 5, 5.25, 8], "texture": "#ignored"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_hatch.json b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_hatch.json new file mode 100644 index 00000000..ddc3e233 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_hatch.json @@ -0,0 +1,71 @@ +{ + "loader": "neoforge:elements", + "elements": [ + { + "name": "north_south_middle", + "from": [6, 5, 0], + "to": [10, 11, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 5, 0]}, + "color": 2, + "faces": { + "north": {"uv": [0.25, 3, 1.25, 6], "texture": "#missing"}, + "south": {"uv": [0.25, 3, 1.25, 6], "texture": "#missing"} + } + }, + { + "name": "north_south_left", + "from": [10, 6, 0], + "to": [11, 10, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 6, 0]}, + "color": 2, + "faces": { + "north": {"uv": [0, 3.5, 0.25, 5.5], "texture": "#missing"}, + "south": {"uv": [1.25, 3.5, 1.5, 5.5], "texture": "#missing"} + } + }, + { + "name": "north_south_right", + "from": [5, 6, 0], + "to": [6, 10, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 6, 0]}, + "color": 2, + "faces": { + "north": {"uv": [1.25, 3.5, 1.5, 5.5], "texture": "#missing"}, + "south": {"uv": [0, 3.5, 0.25, 5.5], "texture": "#missing"} + } + }, + { + "name": "west_east_middle", + "from": [0, 5, 6], + "to": [16, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 5, 6]}, + "color": 2, + "faces": { + "east": {"uv": [0.25, 0, 1.25, 3], "texture": "#missing"}, + "west": {"uv": [0.25, 0, 1.25, 3], "texture": "#missing"} + } + }, + { + "name": "west_east_left", + "from": [0, 6, 5], + "to": [16, 10, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 5]}, + "color": 2, + "faces": { + "east": {"uv": [1.25, 0.5, 1.5, 2.5], "texture": "#missing"}, + "west": {"uv": [0, 0.5, 0.25, 2.5], "texture": "#missing"} + } + }, + { + "name": "west_east_right", + "from": [0, 6, 10], + "to": [16, 10, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 10]}, + "color": 2, + "faces": { + "east": {"uv": [0, 0.5, 0.25, 2.5], "texture": "#missing"}, + "west": {"uv": [1.25, 0.5, 1.5, 2.5], "texture": "#missing"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_tower.json b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_tower.json new file mode 100644 index 00000000..1da21cdf --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_tower.json @@ -0,0 +1,77 @@ +{ + "loader": "neoforge:elements", + "elements": [ + { + "name": "bottom", + "from": [-4.8, -8, -4.8], + "to": [4.8, -4.8, 4.8], + "faces": { + "north": {"uv": [4.5, 6, 6.75, 7.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [7.5, 6, 6.75, 1.5], "rotation": 90, "texture": "#0"}, + "south": {"uv": [4.5, 0, 6.75, 1.5], "texture": "#0"}, + "west": {"uv": [3.75, 1.5, 4.5, 6], "rotation": 90, "texture": "#0"}, + "down": {"uv": [4.5, 1.5, 6.775, 6.05], "texture": "#0"} + } + }, + { + "name": "top", + "from": [-4.8, 4.8, -4.8], + "to": [4.8, 8, 4.8], + "faces": { + "north": {"uv": [6.75, 1.5, 4.5, 0], "texture": "#0"}, + "east": {"uv": [6.75, 1.5, 7.5, 6], "rotation": 90, "texture": "#0"}, + "south": {"uv": [4.5, 6, 6.75, 7.5], "texture": "#0"}, + "west": {"uv": [4.5, 6, 3.75, 1.5], "rotation": 90, "texture": "#0"}, + "up": {"uv": [4.5, 1.5, 6.775, 6.05], "texture": "#0"} + } + }, + { + "name": "west", + "from": [-8, -4.8, -4.8], + "to": [-4.8, 4.8, 4.8], + "faces": { + "north": {"uv": [0, 9, 0.75, 13.5], "texture": "#0"}, + "south": {"uv": [3, 9, 3.75, 13.5], "texture": "#0"}, + "west": {"uv": [0.75, 9, 3, 13.5], "texture": "#0"}, + "up": {"uv": [0.75, 7.5, 3, 9], "rotation": 90, "texture": "#0"}, + "down": {"uv": [3, 15, 0.75, 13.5], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "east", + "from": [4.8, -4.8, -4.8], + "to": [8, 4.8, 4.8], + "faces": { + "north": {"uv": [10.5, 9, 11.25, 13.5], "texture": "#0"}, + "east": {"uv": [8.25, 9, 10.5, 13.5], "texture": "#0"}, + "south": {"uv": [7.5, 9, 8.25, 13.5], "texture": "#0"}, + "up": {"uv": [10.5, 9, 8.25, 7.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8.25, 13.5, 10.5, 15], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "north", + "from": [-4.8, -4.8, -8], + "to": [4.8, 4.8, -4.8], + "faces": { + "north": {"uv": [4.5, 9, 6.75, 13.5], "texture": "#0"}, + "east": {"uv": [7.5, 9, 6.75, 13.5], "texture": "#0"}, + "west": {"uv": [4.5, 9, 3.75, 13.5], "texture": "#0"}, + "up": {"uv": [6.75, 9, 4.5, 7.5], "texture": "#0"}, + "down": {"uv": [6.75, 15, 4.5, 13.5], "texture": "#0"} + } + }, + { + "name": "south", + "from": [-4.8, -4.8, 4.8], + "to": [4.8, 4.8, 8], + "faces": { + "east": {"uv": [14.25, 9, 15, 13.5], "texture": "#0"}, + "south": {"uv": [12, 9, 14.25, 13.5], "texture": "#0"}, + "west": {"uv": [11.25, 9, 12, 13.5], "texture": "#0"}, + "up": {"uv": [12, 7.5, 14.25, 9], "texture": "#0"}, + "down": {"uv": [12, 13.5, 14.25, 15], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.fsh b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.fsh new file mode 100644 index 00000000..9e67cb2d --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.fsh @@ -0,0 +1,34 @@ +#version 150 + +#moj_import + +uniform sampler2D Sampler0; +uniform float GameTime; +uniform float PlasmaScale; +uniform float PlasmaSpeed; + +in vec2 texCoord0; + +out vec4 fragColor; + +vec2 transformUV(vec2 uv) +{ + vec2 transformedUV = uv; + transformedUV *= PlasmaScale; + vec2 translation = vec2(GameTime) * PlasmaSpeed; + transformedUV += translation; + return fract(transformedUV); +} + +void main() +{ + vec4 plasmaTexture = texture(Sampler0, transformUV(texCoord0)); + if (plasmaTexture.a > 0) + { + fragColor = vec4(plasmaTexture.rgb, 0.8); + } + else + { + discard; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.json b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.json new file mode 100644 index 00000000..8430c124 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.json @@ -0,0 +1,15 @@ +{ + "vertex": "extended_industrialization:tesla_plasma", + "fragment": "extended_industrialization:tesla_plasma", + "samplers": [ + { "name": "Sampler0" } + ], + "uniforms": [ + { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "GameTime", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "TextureMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "PlasmaScale", "type": "float", "count": 1, "values": [ 1.0 ] }, + { "name": "PlasmaSpeed", "type": "float", "count": 1, "values": [ 1.0 ] } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.vsh b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.vsh new file mode 100644 index 00000000..818ee636 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.vsh @@ -0,0 +1,18 @@ +#version 150 + +#moj_import + +in vec3 Position; +in vec2 UV0; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform mat4 TextureMat; + +out vec2 texCoord0; + +void main() +{ + gl_Position = ProjMat * ModelViewMat * vec4(Position, 1); + texCoord0 = (TextureMat * vec4(UV0, 0, 1)).xy; +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png b/src/main/resources/assets/extended_industrialization/textures/vfx/tesla_plasma.png similarity index 100% rename from src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay.png rename to src/main/resources/assets/extended_industrialization/textures/vfx/tesla_plasma.png diff --git a/src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay_test.png b/src/main/resources/assets/extended_industrialization/textures/vfx/tesla_plasma_test.png similarity index 100% rename from src/main/resources/assets/extended_industrialization/textures/vfx/plasma_overlay_test.png rename to src/main/resources/assets/extended_industrialization/textures/vfx/tesla_plasma_test.png From c91237ff4d8062742d46c70cb710b3747e8b96c5 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 31 Dec 2024 06:22:49 -0500 Subject: [PATCH 125/159] Lodestone? I hardly know her! --- build.gradle | 16 --- gradle.properties | 4 +- .../extended_industrialization/EIClient.java | 4 +- .../EIClientRenderTypes.java | 20 +++- .../EIClientShaders.java | 8 ++ .../tesla/TeslaPartMultiblockRenderer.java | 2 +- .../{ => ber}/tesla/TeslaPartRenderer.java | 60 +++++----- .../tesla/TeslaPartSingleBlockRenderer.java | 2 +- .../client/ber/tesla/arc/TeslaArcBuilder.java | 79 +++++++++++++ .../client/ber/tesla/arc/TeslaArcPoint.java | 54 +++++++++ .../ber/tesla/arc/TeslaArcRenderPoint.java | 67 +++++++++++ .../ber/tesla/arc/TeslaArcRenderer.java | 107 ++++++++++++++++++ .../tesla/behavior}/TeslaArcBehavior.java | 2 +- .../behavior}/TeslaArcBehaviorHolder.java | 2 +- .../tesla/behavior}/TeslaArcs.java | 18 +-- .../tesla/behavior}/TeslaPlasmaBehavior.java | 2 +- .../behavior}/TeslaPlasmaBehaviorHolder.java | 2 +- .../generator/TeslaPlasmaShapeAdder.java | 11 -- .../teslatower/TeslaTowerBlockEntity.java | 10 +- .../tesla/TeslaCoilMachineBlockEntity.java | 10 +- .../tesla/TeslaReceiverHatchBlockEntity.java | 4 +- .../TeslaReceiverMachineBlockEntity.java | 4 +- .../shaders/core/tesla_arc.fsh | 25 ++++ .../shaders/core/tesla_arc.json | 12 ++ .../shaders/core/tesla_arc.vsh | 21 ++++ .../shaders/core/tesla_plasma.fsh | 5 +- .../shaders/core/tesla_plasma.vsh | 3 + .../textures/vfx/tesla_arc.png | Bin 168 -> 139 bytes 28 files changed, 463 insertions(+), 91 deletions(-) rename src/main/java/net/swedz/extended_industrialization/client/{ => ber}/tesla/TeslaPartMultiblockRenderer.java (93%) rename src/main/java/net/swedz/extended_industrialization/client/{ => ber}/tesla/TeslaPartRenderer.java (68%) rename src/main/java/net/swedz/extended_industrialization/client/{ => ber}/tesla/TeslaPartSingleBlockRenderer.java (93%) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcBuilder.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcPoint.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderPoint.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderer.java rename src/main/java/net/swedz/extended_industrialization/client/{tesla/generator => ber/tesla/behavior}/TeslaArcBehavior.java (55%) rename src/main/java/net/swedz/extended_industrialization/client/{tesla/generator => ber/tesla/behavior}/TeslaArcBehaviorHolder.java (54%) rename src/main/java/net/swedz/extended_industrialization/client/{tesla/generator => ber/tesla/behavior}/TeslaArcs.java (91%) rename src/main/java/net/swedz/extended_industrialization/client/{tesla/generator => ber/tesla/behavior}/TeslaPlasmaBehavior.java (80%) rename src/main/java/net/swedz/extended_industrialization/client/{tesla/generator => ber/tesla/behavior}/TeslaPlasmaBehaviorHolder.java (56%) delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaShapeAdder.java create mode 100644 src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.fsh create mode 100644 src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.json create mode 100644 src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.vsh diff --git a/build.gradle b/build.gradle index 767e323f..c1d31ebd 100644 --- a/build.gradle +++ b/build.gradle @@ -81,14 +81,6 @@ repositories { includeGroup "com.blakebr0.mysticalagriculture" } } - maven { - name = "BlameJared" - url = "https://maven.blamejared.com/" - content { - // Lodestone - includeGroup "team.lodestar.lodestone" - } - } } dependencies { @@ -138,14 +130,6 @@ dependencies { compileOnly "com.blakebr0.cucumber:Cucumber:${cucumber_version}" compileOnly "com.blakebr0.mysticalagriculture:MysticalAgriculture:${mystical_agriculture_version}" } - - jarJar(implementation("team.lodestar.lodestone:lodestone:${lodestone_version}")) { - version { - strictly lodestone_version_range - prefer lodestone_version - } - exclude group: 'top.theillusivec4.curios', module: 'curios-neoforge' - } } tasks.named('jar') { diff --git a/gradle.properties b/gradle.properties index e0273bc6..33582e9c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -51,6 +51,4 @@ curios_version=9.0.10+1.21 curios_version_range=[9,) cucumber_version=1.21.1-8.0.8 mystical_agriculture_version=1.21.1-8.0.9 -mystical_agriculture_version_range=[8.0.0,) -lodestone_version=1.21.1-1.7.0.111 -lodestone_version_range=[1.21.1-1.7.0.111,) \ No newline at end of file +mystical_agriculture_version_range=[8.0.0,) \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 31c0d00a..66827b6e 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -38,9 +38,9 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; import net.swedz.extended_industrialization.client.ber.chainer.MachineChainerHighlightRenderer; +import net.swedz.extended_industrialization.client.ber.tesla.TeslaPartMultiblockRenderer; +import net.swedz.extended_industrialization.client.ber.tesla.TeslaPartSingleBlockRenderer; import net.swedz.extended_industrialization.client.model.chainer.MachineChainerUnbakedModel; -import net.swedz.extended_industrialization.client.tesla.TeslaPartMultiblockRenderer; -import net.swedz.extended_industrialization.client.tesla.TeslaPartSingleBlockRenderer; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.tooltip.SteamChainsawTooltipComponent; diff --git a/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java b/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java index 32964c85..2a01ba08 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java @@ -3,6 +3,7 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.Util; +import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderType; import net.swedz.extended_industrialization.client.shader.TeslaPlasmaTextureStateShard; @@ -12,13 +13,30 @@ public final class EIClientRenderTypes { + public static final RenderType TESLA_ARC = RenderType.create( + "tesla_arc", + DefaultVertexFormat.POSITION_TEX_COLOR, + VertexFormat.Mode.QUADS, + 256, + false, + true, + RenderType.CompositeState.builder() + .setShaderState(EIClientShaders.TESLA_ARC) + .setTextureState(new RenderStateShard.TextureStateShard(EI.id("textures/vfx/tesla_arc.png"), false, false)) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setCullState(CULL) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(false) + ); + public static final BiFunction TESLA_PLASMA = Util.memoize(EIClientRenderTypes::createTeslaPlasma); private static RenderType createTeslaPlasma(float scale, float speed) { return RenderType.create( "plasma", - DefaultVertexFormat.POSITION_TEX, + DefaultVertexFormat.POSITION_TEX_COLOR, VertexFormat.Mode.QUADS, 1536, false, diff --git a/src/main/java/net/swedz/extended_industrialization/EIClientShaders.java b/src/main/java/net/swedz/extended_industrialization/EIClientShaders.java index a1ca194b..92c10279 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClientShaders.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClientShaders.java @@ -14,12 +14,19 @@ public final class EIClientShaders { private static ShaderInstance TESLA_PLASMA_INSTANCE; + private static ShaderInstance TESLA_ARC_INSTANCE; public static ShaderInstance teslaPlasma() { return TESLA_PLASMA_INSTANCE; } + public static ShaderInstance teslaArc() + { + return TESLA_ARC_INSTANCE; + } + + public static final RenderStateShard.ShaderStateShard TESLA_ARC = new RenderStateShard.ShaderStateShard(EIClientShaders::teslaArc); public static final RenderStateShard.ShaderStateShard TESLA_PLASMA = new RenderStateShard.ShaderStateShard(EIClientShaders::teslaPlasma); @SubscribeEvent @@ -28,6 +35,7 @@ private static void registerShaders(RegisterShadersEvent event) try { event.registerShader(new ShaderInstance(event.getResourceProvider(), EI.id("tesla_plasma"), DefaultVertexFormat.POSITION_TEX), (shader) -> TESLA_PLASMA_INSTANCE = shader); + event.registerShader(new ShaderInstance(event.getResourceProvider(), EI.id("tesla_arc"), DefaultVertexFormat.POSITION_TEX), (shader) -> TESLA_ARC_INSTANCE = shader); } catch (IOException ex) { diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartMultiblockRenderer.java similarity index 93% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockRenderer.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartMultiblockRenderer.java index 2506e533..8bf6da6a 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartMultiblockRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartMultiblockRenderer.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.client.tesla; +package net.swedz.extended_industrialization.client.ber.tesla; import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBER; import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBlockEntity; diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java similarity index 68% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java index a42c895c..e593a27b 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.client.tesla; +package net.swedz.extended_industrialization.client.ber.tesla; import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.util.RenderHelper; @@ -7,29 +7,27 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.client.model.data.ModelData; import net.neoforged.neoforge.client.model.renderable.BakedModelRenderable; -import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIClientRenderTypes; import net.swedz.extended_industrialization.EIComponents; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; +import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcPoint; +import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcRenderer; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.tesseract.neoforge.api.WorldPos; -import team.lodestar.lodestone.handlers.RenderHandler; -import team.lodestar.lodestone.registry.client.LodestoneRenderTypes; -import team.lodestar.lodestone.systems.rendering.LodestoneRenderType; -import team.lodestar.lodestone.systems.rendering.VFXBuilders; -import team.lodestar.lodestone.systems.rendering.rendeertype.RenderTypeToken; -import team.lodestar.lodestone.systems.rendering.trail.TrailPoint; -import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; +import org.joml.Vector4f; import java.util.List; import java.util.Optional; @@ -61,8 +59,6 @@ private static Optional getHeldNetworkKey() player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK).key()) : Optional.empty(); } - private static final LodestoneRenderType TESLA_ARC = LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyAndCache(RenderTypeToken.createToken(EI.id("textures/vfx/tesla_arc.png"))); - private static void renderArcs(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { if(machine instanceof TeslaArcBehaviorHolder holder) @@ -70,21 +66,15 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po TeslaArcBehavior behavior = holder.getTeslaArcBehavior(); if(behavior.shouldRender()) { - VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld(); - builder.replaceBufferSource(RenderHandler.LATE_DELAYED_RENDER.getTarget()) - .setRenderType(TESLA_ARC) - .setColorRaw(1f, 1f, 1f); - TeslaArcs arcs = behavior.getArcs(); - for(TrailPointBuilder trail : arcs.getTrails()) + for(TeslaArcBuilder trail : arcs.getTrails()) { - List points = trail.getTrailPoints(); + List points = trail.points(); if(points.size() < 2) { continue; } - int ticks = points.getFirst().getTimeActive(); - builder.setAlpha(0.9f * (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1)); + int ticks = points.getFirst().timeActive(); int halfPoints = points.size() / 2; if(ticks == 0 || ticks == 1) { @@ -93,7 +83,11 @@ private static void renderArcs(MachineBlockEntity machine, float partialTick, Po matrices.pushPose(); - builder.renderTrail(matrices, points, (i) -> (1 - i) * arcs.widthScale()); + var consumer = buffer.getBuffer(EIClientRenderTypes.TESLA_ARC); + TeslaArcRenderer.renderArc( + matrices, consumer, points, (i) -> (1 - i) * arcs.widthScale(), + 1f, 1f, 1f, 0.9f * (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1) + ); matrices.popPose(); } @@ -124,7 +118,19 @@ private static void renderPlasma(MachineBlockEntity machine, float partialTick, var model = getModel(behavior.getModelLocation()); float textureScale = behavior.getTextureScale(); float speed = behavior.getSpeed(); - model.render(matrices, buffer, (texture) -> EIClientRenderTypes.TESLA_PLASMA.apply(textureScale, speed), light, overlay, partialTick, new BakedModelRenderable.Context(ModelData.EMPTY)); + model.render( + matrices, buffer, + (texture) -> EIClientRenderTypes.TESLA_PLASMA.apply(textureScale, speed), + light, overlay, partialTick, + new BakedModelRenderable.Context( + null, + new Direction[1], + RandomSource.create(), + 1835364215L, + ModelData.EMPTY, + new Vector4f(1, 1, 1, 0.8f) + ) + ); matrices.popPose(); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartSingleBlockRenderer.java similarity index 93% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockRenderer.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartSingleBlockRenderer.java index fe2e3818..4c158391 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/TeslaPartSingleBlockRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartSingleBlockRenderer.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.client.tesla; +package net.swedz.extended_industrialization.client.ber.tesla; import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcBuilder.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcBuilder.java new file mode 100644 index 00000000..129733ba --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcBuilder.java @@ -0,0 +1,79 @@ +package net.swedz.extended_industrialization.client.ber.tesla.arc; + +import com.google.common.collect.Lists; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector4f; + +import java.util.List; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +/** + * Taken from Lodestone's TrailPointBuilder + *

+ * Source: https://github.com/LodestarMC/Lodestone/ + */ +public final class TeslaArcBuilder +{ + private final List points = Lists.newArrayList(); + + public final Supplier length; + + private TeslaArcBuilder(Supplier length) + { + this.length = length; + } + + public static TeslaArcBuilder create(int length) + { + return create(() -> length); + } + + public static TeslaArcBuilder create(Supplier length) + { + return new TeslaArcBuilder(length); + } + + public List points() + { + return points; + } + + public List points(float lerp) + { + List lerpedTeslaArcPoints = Lists.newArrayList(); + final int size = points.size(); + if(size > 1) + { + for(int i = 0; i < size - 2; i++) + { + lerpedTeslaArcPoints.add(points.get(i).lerp(points.get(i + 1), lerp)); + } + } + return lerpedTeslaArcPoints; + } + + public TeslaArcBuilder add(Vec3 point) + { + return this.add(new TeslaArcPoint(point, 0)); + } + + public TeslaArcBuilder add(TeslaArcPoint point) + { + points.add(point); + return this; + } + + public TeslaArcBuilder tick() + { + int trailLength = this.length.get(); + points.forEach(TeslaArcPoint::tick); + points.removeIf((point) -> point.timeActive() > trailLength); + return this; + } + + public List build() + { + return points.stream().map(TeslaArcPoint::matrixPosition).collect(Collectors.toList()); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcPoint.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcPoint.java new file mode 100644 index 00000000..291d7dbd --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcPoint.java @@ -0,0 +1,54 @@ +package net.swedz.extended_industrialization.client.ber.tesla.arc; + +import net.minecraft.world.phys.Vec3; +import org.joml.Vector4f; + +/** + * Taken from Lodestone's TrailPoint + *

+ * Source: https://github.com/LodestarMC/Lodestone/ + */ +public final class TeslaArcPoint +{ + private final Vec3 position; + + private int timeActive; + + public TeslaArcPoint(Vec3 position, int timeActive) + { + this.position = position; + this.timeActive = timeActive; + } + + public TeslaArcPoint(Vec3 position) + { + this(position, 0); + } + + public Vector4f matrixPosition() + { + Vec3 position = this.position(); + return new Vector4f((float) position.x, (float) position.y, (float) position.z, 1.0f); + } + + public Vec3 position() + { + return position; + } + + public int timeActive() + { + return timeActive; + } + + public TeslaArcPoint lerp(TeslaArcPoint trailPoint, float delta) + { + Vec3 position = this.position(); + return new TeslaArcPoint(position.lerp(trailPoint.position, delta), timeActive); + } + + public void tick() + { + timeActive++; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderPoint.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderPoint.java new file mode 100644 index 00000000..fe2c626d --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderPoint.java @@ -0,0 +1,67 @@ +package net.swedz.extended_industrialization.client.ber.tesla.arc; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.world.phys.Vec2; +import org.joml.Vector4f; + +/** + * Taken from Lodestone's TrailRenderPoint + *

+ * Source: https://github.com/LodestarMC/Lodestone/ + */ +public final class TeslaArcRenderPoint +{ + public final float xp, xn, yp, yn, z; + + public TeslaArcRenderPoint(float xp, float xn, float yp, float yn, float z) + { + this.xp = xp; + this.xn = xn; + this.yp = yp; + this.yn = yn; + this.z = z; + } + + public TeslaArcRenderPoint(Vector4f pos, Vec2 perp) + { + this(pos.x() + perp.x, pos.x() - perp.x, pos.y() + perp.y, pos.y() - perp.y, pos.z()); + } + + public void renderStart(VertexConsumer consumer, + float u0, float v0, float u1, float v1, + float r, float g, float b, float a) + { + consumer.addVertex(xp, yp, z) + .setUv(u0, v0) + .setColor(r, g, b, a) + .setLight(0xF000F0); + + consumer.addVertex(xn, yn, z) + .setUv(u1, v0) + .setColor(r, g, b, a) + .setLight(0xF000F0); + } + + public void renderEnd(VertexConsumer consumer, + float u0, float v0, float u1, float v1, + float r, float g, float b, float a) + { + consumer.addVertex(xn, yn, z) + .setUv(u1, v1) + .setColor(r, g, b, a) + .setLight(0xF000F0); + + consumer.addVertex(xp, yp, z) + .setUv(u0, v1) + .setColor(r, g, b, a) + .setLight(0xF000F0); + } + + public void renderMid(VertexConsumer consumer, + float u0, float v0, float u1, float v1, + float r, float g, float b, float a) + { + this.renderEnd(consumer, u0, v0, u1, v1, r, g, b, a); + this.renderStart(consumer, u0, v0, u1, v1, r, g, b, a); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderer.java new file mode 100644 index 00000000..e9c9ea60 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderer.java @@ -0,0 +1,107 @@ +package net.swedz.extended_industrialization.client.ber.tesla.arc; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec2; +import org.joml.Vector4f; + +import java.util.List; +import java.util.function.Function; + +/** + * Taken from Lodestone's VFXBuilders#WorldVFXBuilder + *

+ * Source: https://github.com/LodestarMC/Lodestone/ + */ +public final class TeslaArcRenderer +{ + public static void renderArc(PoseStack matrices, VertexConsumer consumer, + List points, Function widthFunction, + float r, float g, float b, float a) + { + var pose = matrices.last().pose(); + + if(points.size() < 2) + { + return; + } + + List positions = points.stream() + .map(TeslaArcPoint::matrixPosition) + .peek((point) -> point.mul(pose)) + .toList(); + int count = points.size() - 1; + float increment = 1f / count; + + TeslaArcRenderPoint[] renderPoints = new TeslaArcRenderPoint[points.size()]; + for(int i = 1; i < count; i++) + { + float width = widthFunction.apply(increment * i); + Vector4f previous = positions.get(i - 1); + Vector4f current = positions.get(i); + Vector4f next = positions.get(i + 1); + renderPoints[i] = new TeslaArcRenderPoint(current, perpendicularPoints(previous, next, width)); + } + renderPoints[0] = new TeslaArcRenderPoint( + positions.get(0), + perpendicularPoints(positions.get(0), positions.get(1), widthFunction.apply(0f)) + ); + renderPoints[count] = new TeslaArcRenderPoint( + positions.get(count), + perpendicularPoints(positions.get(count - 1), positions.get(count), widthFunction.apply(1f)) + ); + + renderPoints[0].renderStart(consumer, 0, 0, 1, Mth.lerp(increment, 0, 1), r, g, b, a); + for(int i = 1; i < count; i++) + { + float current = Mth.lerp(i * increment, 0, 1); + renderPoints[i].renderMid(consumer, 0, current, 1, current, r, g, b, a); + } + renderPoints[count].renderEnd(consumer, 0, Mth.lerp((count) * increment, 0, 1), 1, 1, r, g, b, a); + } + + private static Vec2 perpendicularPoints(Vector4f start, Vector4f end, float width) + { + float x = -start.x(); + float y = -start.y(); + if(Math.abs(start.z()) > 0) + { + float ratio = end.z() / start.z(); + x = end.x() + x * ratio; + y = end.y() + y * ratio; + } + else if(Math.abs(end.z()) <= 0) + { + x += end.x(); + y += end.y(); + } + if(start.z() > 0) + { + x = -x; + y = -y; + } + if(x * x + y * y > 0F) + { + float normalize = width * 0.5F / distance(x, y); + x *= normalize; + y *= normalize; + } + return new Vec2(-y, x); + } + + private static float distSqr(float... a) + { + float d = 0.0F; + for(float f : a) + { + d += f * f; + } + return d; + } + + private static float distance(float... a) + { + return Mth.sqrt(distSqr(a)); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehavior.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehavior.java similarity index 55% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehavior.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehavior.java index 9e092fc5..8791e039 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehavior.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehavior.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.client.tesla.generator; +package net.swedz.extended_industrialization.client.ber.tesla.behavior; public interface TeslaArcBehavior { diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehaviorHolder.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java similarity index 54% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehaviorHolder.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java index 5f31c320..b7370a1f 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcBehaviorHolder.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.client.tesla.generator; +package net.swedz.extended_industrialization.client.ber.tesla.behavior; public interface TeslaArcBehaviorHolder { diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java similarity index 91% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java index 58c90618..f6eeb765 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java @@ -1,11 +1,11 @@ -package net.swedz.extended_industrialization.client.tesla.generator; +package net.swedz.extended_industrialization.client.ber.tesla.behavior; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import net.minecraft.core.Direction; import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; import net.swedz.tesseract.neoforge.api.Assert; -import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; import java.util.Arrays; import java.util.Collections; @@ -34,7 +34,7 @@ public final class TeslaArcs private final Map> offsetGenerators; - private final List trails = Lists.newArrayList(); + private final List trails = Lists.newArrayList(); public TeslaArcs(float widthScale, int arcDuration, int arcs, @@ -136,7 +136,7 @@ public int sectionSplits() return sectionSplits; } - public List getTrails() + public List getTrails() { return Collections.unmodifiableList(trails); } @@ -149,7 +149,7 @@ private float randomOffset(Direction.Axis axis) private void createArc() { - TrailPointBuilder trail = TrailPointBuilder.create(arcDuration); + TeslaArcBuilder builder = TeslaArcBuilder.create(arcDuration); int length = RANDOM.nextInt(minLength, maxLength + 1); Vec3 origin = originSupplier.get(); double x = origin.x(); @@ -166,21 +166,21 @@ private void createArc() float offsetZ = Math.abs(dirZ) * RANDOM.nextFloat(); for(int j = 0; j < sectionSplits; j++) { - trail.addTrailPoint(new Vec3(x, y, z)); + builder.add(new Vec3(x, y, z)); x += (sectionLength * offsetX * dirX) / sectionSplits; y += (sectionLength * offsetY * dirY) / sectionSplits; z += (sectionLength * offsetZ * dirZ) / sectionSplits; } } - trails.add(trail); + trails.add(builder); } public void tick() { trails.removeIf((trail) -> { - trail.tickTrailPoints(); - return trail.getTrailPoints().isEmpty(); + trail.tick(); + return trail.points().isEmpty(); }); if(trails.size() < arcs) diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehavior.java similarity index 80% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehavior.java index dfd99a92..d546984e 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehavior.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehavior.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.client.tesla.generator; +package net.swedz.extended_industrialization.client.ber.tesla.behavior; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehaviorHolder.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java similarity index 56% rename from src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehaviorHolder.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java index 2613b75b..9c8de81f 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaBehaviorHolder.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.client.tesla.generator; +package net.swedz.extended_industrialization.client.ber.tesla.behavior; public interface TeslaPlasmaBehaviorHolder { diff --git a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaShapeAdder.java b/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaShapeAdder.java deleted file mode 100644 index 1474cc98..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/tesla/generator/TeslaPlasmaShapeAdder.java +++ /dev/null @@ -1,11 +0,0 @@ -package net.swedz.extended_industrialization.client.tesla.generator; - -import net.minecraft.core.Direction; -import net.minecraft.world.phys.AABB; - -import java.util.Set; - -public interface TeslaPlasmaShapeAdder -{ - void add(AABB box, Set ignoreFaces); -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 70fb8360..5c9d8521 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -25,11 +25,11 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index ff592ac7..8759fffb 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -31,11 +31,11 @@ import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIConfig; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehavior; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcBehaviorHolder; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaArcs; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java index 42592581..273ceab5 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java @@ -21,8 +21,8 @@ import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index 84fba054..82fda482 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -28,8 +28,8 @@ import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.tesla.generator.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; diff --git a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.fsh b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.fsh new file mode 100644 index 00000000..115ca366 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.fsh @@ -0,0 +1,25 @@ +#version 150 + +#moj_import + +uniform sampler2D Sampler0; + +uniform vec4 ColorModulator; + +in vec2 texCoord0; +in vec4 vertexColor; + +out vec4 fragColor; + +void main() +{ + vec4 plasmaTexture = texture(Sampler0, texCoord0) * vertexColor; + if (plasmaTexture.a > 0) + { + fragColor = plasmaTexture; + } + else + { + discard; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.json b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.json new file mode 100644 index 00000000..199943cb --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.json @@ -0,0 +1,12 @@ +{ + "vertex": "extended_industrialization:tesla_arc", + "fragment": "extended_industrialization:tesla_arc", + "samplers": [ + { "name": "Sampler0" } + ], + "uniforms": [ + { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "TextureMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.vsh b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.vsh new file mode 100644 index 00000000..24dfd978 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_arc.vsh @@ -0,0 +1,21 @@ +#version 150 + +#moj_import + +in vec3 Position; +in vec4 Color; +in vec2 UV0; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform mat4 TextureMat; + +out vec2 texCoord0; +out vec4 vertexColor; + +void main() +{ + gl_Position = ProjMat * ModelViewMat * vec4(Position, 1); + texCoord0 = (TextureMat * vec4(UV0, 0, 1)).xy; + vertexColor = Color; +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.fsh b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.fsh index 9e67cb2d..39ebe40e 100644 --- a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.fsh +++ b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.fsh @@ -8,6 +8,7 @@ uniform float PlasmaScale; uniform float PlasmaSpeed; in vec2 texCoord0; +in vec4 vertexColor; out vec4 fragColor; @@ -22,10 +23,10 @@ vec2 transformUV(vec2 uv) void main() { - vec4 plasmaTexture = texture(Sampler0, transformUV(texCoord0)); + vec4 plasmaTexture = texture(Sampler0, transformUV(texCoord0)) * vertexColor; if (plasmaTexture.a > 0) { - fragColor = vec4(plasmaTexture.rgb, 0.8); + fragColor = plasmaTexture; } else { diff --git a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.vsh b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.vsh index 818ee636..24dfd978 100644 --- a/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.vsh +++ b/src/main/resources/assets/extended_industrialization/shaders/core/tesla_plasma.vsh @@ -3,6 +3,7 @@ #moj_import in vec3 Position; +in vec4 Color; in vec2 UV0; uniform mat4 ModelViewMat; @@ -10,9 +11,11 @@ uniform mat4 ProjMat; uniform mat4 TextureMat; out vec2 texCoord0; +out vec4 vertexColor; void main() { gl_Position = ProjMat * ModelViewMat * vec4(Position, 1); texCoord0 = (TextureMat * vec4(UV0, 0, 1)).xy; + vertexColor = Color; } \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/textures/vfx/tesla_arc.png b/src/main/resources/assets/extended_industrialization/textures/vfx/tesla_arc.png index 79d72613832c50cb919d479b93c74ac9589787cd..c8a3f96c7adb4f0f91c15b5557a9af0ef86d0f43 100644 GIT binary patch delta 60 zcmZ3%*v&X0%v8bC#WBRfKlu+o3y%ncnuf2LglWPR1_2=XfHxt5fg$@8i_BD)7t0uc Nz|+;wWt~$(69D Date: Fri, 10 Jan 2025 00:03:58 -0500 Subject: [PATCH 126/159] Fix merging errors --- .../provider/recipes/CommonRecipesServerDatagenProvider.java | 3 --- .../recipes/MachineItemRecipesServerDatagenProvider.java | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java index f8e3a725..19e3d8a7 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/CommonRecipesServerDatagenProvider.java @@ -3,9 +3,6 @@ import aztech.modern_industrialization.MIFluids; import aztech.modern_industrialization.MIItem; import aztech.modern_industrialization.machines.init.MIMachineRecipeTypes; -import aztech.modern_industrialization.machines.recipe.MachineRecipeBuilder; -import aztech.modern_industrialization.materials.MIMaterials; -import aztech.modern_industrialization.materials.part.MIParts; import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.world.item.Items; import net.minecraft.world.level.ItemLike; diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java index 09c2dad1..c2dd8f23 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java @@ -11,10 +11,10 @@ import net.neoforged.neoforge.data.event.GatherDataEvent; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EITags; +import net.swedz.extended_industrialization.material.EIMaterials; import net.swedz.tesseract.neoforge.compat.mi.recipe.MIMachineRecipeBuilder; import net.swedz.tesseract.neoforge.compat.vanilla.recipe.ShapedRecipeBuilder; import net.swedz.tesseract.neoforge.compat.vanilla.recipe.ShapelessRecipeBuilder; -import net.swedz.extended_industrialization.material.EIMaterials; import java.util.function.Consumer; From 701ff654ba9385d813616ecb74523d18aea77869 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 10 Jan 2025 00:39:25 -0500 Subject: [PATCH 127/159] Use new cube overlay rendering --- .../client/ber/tesla/TeslaPartRenderer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java index e593a27b..398ebafb 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java @@ -27,6 +27,7 @@ import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.tesseract.neoforge.api.WorldPos; +import net.swedz.tesseract.neoforge.helper.CubeOverlayRenderHelper; import org.joml.Vector4f; import java.util.List; @@ -46,7 +47,7 @@ private static void renderHighlight(MachineBlockEntity machine, float partialTic matrices.pushPose(); matrices.translate(-0.005, -0.005, -0.005); matrices.scale(1.01f, 1.01f, 1.01f); - RenderHelper.drawOverlay(matrices, buffer, 111f / 256, 111f / 256, 1f, RenderHelper.FULL_LIGHT, overlay); + CubeOverlayRenderHelper.render(matrices, buffer, 111f / 256, 111f / 256, 1f, overlay); matrices.popPose(); } }); From dd5ba1cfb74b07d3dde288a45c65ddd0c9d90ffa Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 10 Jan 2025 02:45:54 -0500 Subject: [PATCH 128/159] Start work on lethal tesla coil --- .../blockstates/lethal_tesla_coil.json | 7 + .../lang/en_us.json | 6 +- .../models/block/lethal_tesla_coil.json | 15 + .../models/item/lethal_tesla_coil.json | 3 + .../loot_table/blocks/lethal_tesla_coil.json | 21 ++ .../tags/block/mineable/pickaxe.json | 1 + .../tags/block/needs_stone_tool.json | 1 + .../swedz/extended_industrialization/EI.java | 3 +- .../extended_industrialization/EIClient.java | 4 +- .../extended_industrialization/EIConfig.java | 9 +- ...herRegistries.java => EICreativeTabs.java} | 19 +- .../EIDamageTypes.java | 25 ++ .../EIMachines.java | 8 + .../EIRecipeTypes.java | 29 ++ .../extended_industrialization/EIText.java | 2 + .../behavior/TeslaArcBehaviorHolder.java | 4 +- .../behavior/TeslaPlasmaBehaviorHolder.java | 4 +- .../compat/mi/EIMIHookRegistry.java | 6 +- .../provider/LanguageDatagenProvider.java | 2 + .../LethalTeslaCoilMachineBlockEntity.java | 268 ++++++++++++++++++ .../blockentity/tesla/TeslaBlock.java | 5 + .../component/tesla/TeslaNetworkPart.java | 3 +- .../recipe/RainbowableDyeRecipe.java | 4 +- .../lethal_tesla_coil/overlay_front.png | Bin 0 -> 402 bytes .../overlay_front_active.png | Bin 0 -> 402 bytes .../lethal_tesla_coil/overlay_side.png | Bin 0 -> 319 bytes .../lethal_tesla_coil/overlay_side_active.png | Bin 0 -> 486 bytes .../overlay_side_active.png.mcmeta | 5 + .../lethal_tesla_coil/overlay_top.png | Bin 0 -> 312 bytes .../lethal_tesla_coil/overlay_top_active.png | Bin 0 -> 312 bytes .../damage_type/tesla.json | 5 + 31 files changed, 429 insertions(+), 30 deletions(-) create mode 100644 src/generated/resources/assets/extended_industrialization/blockstates/lethal_tesla_coil.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/block/lethal_tesla_coil.json create mode 100644 src/generated/resources/assets/extended_industrialization/models/item/lethal_tesla_coil.json create mode 100644 src/generated/resources/data/extended_industrialization/loot_table/blocks/lethal_tesla_coil.json rename src/main/java/net/swedz/extended_industrialization/{EIOtherRegistries.java => EICreativeTabs.java} (56%) create mode 100644 src/main/java/net/swedz/extended_industrialization/EIDamageTypes.java create mode 100644 src/main/java/net/swedz/extended_industrialization/EIRecipeTypes.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaBlock.java create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_front.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_front_active.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_side.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_side_active.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_side_active.png.mcmeta create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_top.png create mode 100644 src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_top_active.png create mode 100644 src/main/resources/data/extended_industrialization/damage_type/tesla.json diff --git a/src/generated/resources/assets/extended_industrialization/blockstates/lethal_tesla_coil.json b/src/generated/resources/assets/extended_industrialization/blockstates/lethal_tesla_coil.json new file mode 100644 index 00000000..fb2c9830 --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/blockstates/lethal_tesla_coil.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extended_industrialization:block/lethal_tesla_coil" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 171e951c..6f27d638 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -27,6 +27,7 @@ "block.extended_industrialization.large_electric_macerator": "Large Electric Macerator", "block.extended_industrialization.large_steam_furnace": "Large Steam Furnace", "block.extended_industrialization.large_steam_macerator": "Large Steam Macerator", + "block.extended_industrialization.lethal_tesla_coil": "Lethal Tesla Coil", "block.extended_industrialization.lv_solar_panel": "LV Solar Panel", "block.extended_industrialization.lv_tesla_receiver_hatch": "LV Tesla Receiver Hatch", "block.extended_industrialization.machine_chainer": "Machine Chainer", @@ -50,12 +51,13 @@ "block.extended_industrialization.steel_plated_bricks": "Steel Plated Bricks", "block.extended_industrialization.steel_solar_boiler": "Steel Solar Boiler", "block.extended_industrialization.steel_waste_collector": "Steel Waste Collector", - "block.extended_industrialization.superconductor_tesla_receiver_hatch": "Superconductor Tesla Receiver Hatch", + "block.extended_industrialization.superconductor_tesla_receiver_hatch": "SV Tesla Receiver Hatch", "block.extended_industrialization.superconductor_tesla_winding": "Superconductor Tesla Winding", "block.extended_industrialization.tesla_coil": "Tesla Coil", "block.extended_industrialization.tesla_receiver": "Tesla Receiver", "block.extended_industrialization.tesla_tower": "Tesla Tower", "block.extended_industrialization.universal_transformer": "Universal Transformer", + "death.attack.extended_industrialization.tesla": "%1$s was electrocuted to death", "item.extended_industrialization.blazing_essence_bucket": "Blazing Essence Bucket", "item.extended_industrialization.canned_food": "Canned Food", "item.extended_industrialization.composted_manure_bucket": "Composted Manure Bucket", @@ -240,6 +242,8 @@ "text.extended_industrialization.tesla_handheld_linked": "Linked to %s", "text.extended_industrialization.tesla_handheld_selected": "Selected transmitter for receiving.", "text.extended_industrialization.tesla_interdimensional_upgrade_help": "Removes the range limitation on a Tesla Tower and allows it to transmit energy across dimensions.", + "text.extended_industrialization.tesla_lethal_coil_help_1": "Deals damage to entities within %s blocks while powered.", + "text.extended_industrialization.tesla_lethal_coil_help_2": "Amount of damage dealt is determined by the voltage of hull provided.", "text.extended_industrialization.tesla_network_receiver_linked": "Linked to %s", "text.extended_industrialization.tesla_network_receiver_mismatching_voltage": "Cannot receive %s power", "text.extended_industrialization.tesla_network_receiver_no_link": "Not linked to any transmitter", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/lethal_tesla_coil.json b/src/generated/resources/assets/extended_industrialization/models/block/lethal_tesla_coil.json new file mode 100644 index 00000000..323b755c --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/block/lethal_tesla_coil.json @@ -0,0 +1,15 @@ +{ + "casing": "lv", + "default_overlays": { + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", + "front": "extended_industrialization:block/machines/lethal_tesla_coil/overlay_front", + "front_active": "extended_industrialization:block/machines/lethal_tesla_coil/overlay_front_active", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "output": "modern_industrialization:block/overlays/output", + "side": "extended_industrialization:block/machines/lethal_tesla_coil/overlay_side", + "side_active": "extended_industrialization:block/machines/lethal_tesla_coil/overlay_side_active", + "top": "extended_industrialization:block/machines/lethal_tesla_coil/overlay_top", + "top_active": "extended_industrialization:block/machines/lethal_tesla_coil/overlay_top_active" + }, + "loader": "modern_industrialization:machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/item/lethal_tesla_coil.json b/src/generated/resources/assets/extended_industrialization/models/item/lethal_tesla_coil.json new file mode 100644 index 00000000..cbcad7ef --- /dev/null +++ b/src/generated/resources/assets/extended_industrialization/models/item/lethal_tesla_coil.json @@ -0,0 +1,3 @@ +{ + "parent": "extended_industrialization:block/lethal_tesla_coil" +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/loot_table/blocks/lethal_tesla_coil.json b/src/generated/resources/data/extended_industrialization/loot_table/blocks/lethal_tesla_coil.json new file mode 100644 index 00000000..72c4a1b3 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/loot_table/blocks/lethal_tesla_coil.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "extended_industrialization:lethal_tesla_coil" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "extended_industrialization:blocks/lethal_tesla_coil" +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 4d53e323..3aaca8c4 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -24,6 +24,7 @@ "extended_industrialization:large_electric_macerator", "extended_industrialization:large_steam_furnace", "extended_industrialization:large_steam_macerator", + "extended_industrialization:lethal_tesla_coil", "extended_industrialization:lv_solar_panel", "extended_industrialization:lv_tesla_receiver_hatch", "extended_industrialization:machine_chainer", diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index 4d53e323..3aaca8c4 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -24,6 +24,7 @@ "extended_industrialization:large_electric_macerator", "extended_industrialization:large_steam_furnace", "extended_industrialization:large_steam_macerator", + "extended_industrialization:lethal_tesla_coil", "extended_industrialization:lv_solar_panel", "extended_industrialization:lv_tesla_receiver_hatch", "extended_industrialization:machine_chainer", diff --git a/src/main/java/net/swedz/extended_industrialization/EI.java b/src/main/java/net/swedz/extended_industrialization/EI.java index 6e90b659..0870634b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EI.java +++ b/src/main/java/net/swedz/extended_industrialization/EI.java @@ -67,7 +67,8 @@ public EI(IEventBus bus, ModContainer container) EIBlocks.init(bus); EIFluids.init(bus); EIMaterialRegistry.init(); - EIOtherRegistries.init(bus); + EICreativeTabs.init(bus); + EIRecipeTypes.init(bus); EIModularSlotPanelSlots.init(); bus.register(new DatagenDelegator()); diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 66827b6e..df38d1c9 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -45,7 +45,7 @@ import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.tooltip.SteamChainsawTooltipComponent; import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaBlock; import net.swedz.extended_industrialization.network.packet.ModifyElectricToolSpeedPacket; import net.swedz.tesseract.neoforge.item.DynamicDyedItem; import net.swedz.tesseract.neoforge.registry.holder.ItemHolder; @@ -131,7 +131,7 @@ private static void registerBlockEntityRenderers(FMLClientSetupEvent event) BlockEntityRendererProvider provider = switch (blockEntity) { case MachineChainerMachineBlockEntity be -> MachineChainerHighlightRenderer::new; - case TeslaNetworkPart __ -> switch (blockEntity) + case TeslaBlock __ -> switch (blockEntity) { case MultiblockMachineBlockEntity be -> TeslaPartMultiblockRenderer::new; default -> TeslaPartSingleBlockRenderer::new; diff --git a/src/main/java/net/swedz/extended_industrialization/EIConfig.java b/src/main/java/net/swedz/extended_industrialization/EIConfig.java index 65df334a..6c7b185d 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIConfig.java +++ b/src/main/java/net/swedz/extended_industrialization/EIConfig.java @@ -7,6 +7,7 @@ public final class EIConfig private static final ModConfigSpec.Builder BUILDER; private static final ModConfigSpec.IntValue TESLA_COIL_RANGE; + private static final ModConfigSpec.IntValue LETHAL_TESLA_COIL_RANGE; private static final ModConfigSpec.IntValue MACHINE_CHAINER_MAX_CONNECTIONS; private static final ModConfigSpec.BooleanValue ALLOW_UPGRADES_IN_PROCESSING_ARRAY; private static final ModConfigSpec.IntValue FARMER_FERTILIZER_MAX_RANDOM_TICKS; @@ -26,7 +27,11 @@ public final class EIConfig TESLA_COIL_RANGE = BUILDER .comment("The range for the tesla coil to transmit energy within") - .defineInRange("tesla_coil_range", 32, 0, Integer.MAX_VALUE); + .defineInRange("tesla_coil_range", 32, 1, Integer.MAX_VALUE); + + LETHAL_TESLA_COIL_RANGE = BUILDER + .comment("The range for the lethal tesla coil to damage entities within") + .defineInRange("lethal_tesla_coil_range", 3, 1, Integer.MAX_VALUE); MACHINE_CHAINER_MAX_CONNECTIONS = BUILDER .comment("The maximum amount of connections a machine chainer can have") @@ -75,6 +80,7 @@ public final class EIConfig } public static int teslaCoilRange; + public static int lethalTeslaCoilRange; public static int machineChainerMaxConnections; public static boolean allowUpgradesInProcessingArray; public static int farmerFertilizerMaxRandomTicks; @@ -89,6 +95,7 @@ public final class EIConfig public static void loadConfig() { teslaCoilRange = TESLA_COIL_RANGE.get(); + lethalTeslaCoilRange = LETHAL_TESLA_COIL_RANGE.get(); machineChainerMaxConnections = MACHINE_CHAINER_MAX_CONNECTIONS.get(); allowUpgradesInProcessingArray = ALLOW_UPGRADES_IN_PROCESSING_ARRAY.get(); farmerFertilizerMaxRandomTicks = FARMER_FERTILIZER_MAX_RANDOM_TICKS.get(); diff --git a/src/main/java/net/swedz/extended_industrialization/EIOtherRegistries.java b/src/main/java/net/swedz/extended_industrialization/EICreativeTabs.java similarity index 56% rename from src/main/java/net/swedz/extended_industrialization/EIOtherRegistries.java rename to src/main/java/net/swedz/extended_industrialization/EICreativeTabs.java index 228f5587..0c102ccb 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIOtherRegistries.java +++ b/src/main/java/net/swedz/extended_industrialization/EICreativeTabs.java @@ -4,29 +4,16 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.RecipeType; -import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredRegister; -import net.swedz.extended_industrialization.recipe.RainbowableDyeRecipe; import net.swedz.tesseract.neoforge.registry.holder.ItemHolder; import java.util.Comparator; import java.util.function.Supplier; -public final class EIOtherRegistries +public final class EICreativeTabs { - public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(Registries.RECIPE_SERIALIZER, EI.ID); - - public static final Supplier> RAINBOWABLE_DYE_SERIALIZER = RECIPE_SERIALIZERS.register( - "crafting_special_rainbowable_dye", - () -> new SimpleCraftingRecipeSerializer<>(RainbowableDyeRecipe::new) - ); - - public static final DeferredRegister> RECIPE_TYPES = DeferredRegister.create(Registries.RECIPE_TYPE, EI.ID); - - public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, EI.ID); + private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, EI.ID); public static final Supplier CREATIVE_TAB = CREATIVE_MODE_TABS.register(EI.ID, () -> CreativeModeTab.builder() .title(Component.translatable("itemGroup.%s.%s".formatted(EI.ID, EI.ID))) @@ -48,8 +35,6 @@ public final class EIOtherRegistries public static void init(IEventBus bus) { - RECIPE_SERIALIZERS.register(bus); - RECIPE_TYPES.register(bus); CREATIVE_MODE_TABS.register(bus); } } diff --git a/src/main/java/net/swedz/extended_industrialization/EIDamageTypes.java b/src/main/java/net/swedz/extended_industrialization/EIDamageTypes.java new file mode 100644 index 00000000..d33f181b --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/EIDamageTypes.java @@ -0,0 +1,25 @@ +package net.swedz.extended_industrialization; + +import net.minecraft.core.Holder; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; + +public final class EIDamageTypes +{ + private static final ResourceKey TESLA = ResourceKey.create(Registries.DAMAGE_TYPE, EI.id("tesla")); + + private static Holder tesla(RegistryAccess registry) + { + return registry.lookupOrThrow(Registries.DAMAGE_TYPE).getOrThrow(TESLA); + } + + public static DamageSource tesla(Level level, Vec3 origin) + { + return new DamageSource(tesla(level.registryAccess()), origin); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/EIMachines.java b/src/main/java/net/swedz/extended_industrialization/EIMachines.java index d479e952..52e95e70 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIMachines.java +++ b/src/main/java/net/swedz/extended_industrialization/EIMachines.java @@ -37,6 +37,7 @@ import net.swedz.extended_industrialization.machines.blockentity.multiblock.farmer.ElectricFarmerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.farmer.SteamFarmerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; +import net.swedz.extended_industrialization.machines.blockentity.tesla.LethalTeslaCoilMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaReceiverHatchBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaReceiverMachineBlockEntity; @@ -432,5 +433,12 @@ public static void singleBlockSpecial(SingleBlockSpecialMachinesMIHookContext ho (bep) -> new TeslaReceiverHatchBlockEntity(bep, tier) ); } + + hook.register( + "Lethal Tesla Coil", "lethal_tesla_coil", "lethal_tesla_coil", + CableTier.LV.casing, true, true, true, true, + LethalTeslaCoilMachineBlockEntity::new, + LethalTeslaCoilMachineBlockEntity::registerEnergyApi + ); } } diff --git a/src/main/java/net/swedz/extended_industrialization/EIRecipeTypes.java b/src/main/java/net/swedz/extended_industrialization/EIRecipeTypes.java new file mode 100644 index 00000000..a3203eec --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/EIRecipeTypes.java @@ -0,0 +1,29 @@ +package net.swedz.extended_industrialization; + +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.swedz.extended_industrialization.recipe.RainbowableDyeRecipe; + +import java.util.function.Supplier; + +public final class EIRecipeTypes +{ + public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(Registries.RECIPE_SERIALIZER, EI.ID); + + public static final Supplier> RAINBOWABLE_DYE_SERIALIZER = RECIPE_SERIALIZERS.register( + "crafting_special_rainbowable_dye", + () -> new SimpleCraftingRecipeSerializer<>(RainbowableDyeRecipe::new) + ); + + public static final DeferredRegister> RECIPE_TYPES = DeferredRegister.create(Registries.RECIPE_TYPE, EI.ID); + + public static void init(IEventBus bus) + { + RECIPE_SERIALIZERS.register(bus); + RECIPE_TYPES.register(bus); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 60459ceb..64b7872d 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -125,6 +125,8 @@ public enum EIText implements MICompatibleTranslatableTextEnum TESLA_HANDHELD_LINKED("Linked to %s"), TESLA_HANDHELD_SELECTED("Selected transmitter for receiving."), TESLA_INTERDIMENSIONAL_UPGRADE_HELP("Removes the range limitation on a Tesla Tower and allows it to transmit energy across dimensions."), + TESLA_LETHAL_COIL_HELP_1("Deals damage to entities within %s blocks while powered."), + TESLA_LETHAL_COIL_HELP_2("Amount of damage dealt is determined by the voltage of hull provided."), TESLA_NETWORK_RECEIVER_LINKED("Linked to %s"), TESLA_NETWORK_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), TESLA_NETWORK_RECEIVER_NO_LINK("Not linked to any transmitter"), diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java index b7370a1f..a467c9fc 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java @@ -1,6 +1,8 @@ package net.swedz.extended_industrialization.client.ber.tesla.behavior; -public interface TeslaArcBehaviorHolder +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaBlock; + +public interface TeslaArcBehaviorHolder extends TeslaBlock { TeslaArcBehavior getTeslaArcBehavior(); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java index 9c8de81f..401ce617 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java @@ -1,6 +1,8 @@ package net.swedz.extended_industrialization.client.ber.tesla.behavior; -public interface TeslaPlasmaBehaviorHolder +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaBlock; + +public interface TeslaPlasmaBehaviorHolder extends TeslaBlock { TeslaPlasmaBehavior getTeslaPlasmaBehavior(); } diff --git a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookRegistry.java b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookRegistry.java index d1a112ed..80963acc 100644 --- a/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookRegistry.java +++ b/src/main/java/net/swedz/extended_industrialization/compat/mi/EIMIHookRegistry.java @@ -8,7 +8,7 @@ import net.neoforged.neoforge.registries.DeferredRegister; import net.swedz.extended_industrialization.EIBlocks; import net.swedz.extended_industrialization.EIItems; -import net.swedz.extended_industrialization.EIOtherRegistries; +import net.swedz.extended_industrialization.EIRecipeTypes; import net.swedz.extended_industrialization.EISortOrder; import net.swedz.tesseract.neoforge.compat.mi.hook.MIHookEntrypoint; import net.swedz.tesseract.neoforge.compat.mi.hook.MIHookRegistry; @@ -40,13 +40,13 @@ public DeferredRegister.Items itemRegistry() @Override public DeferredRegister> recipeSerializerRegistry() { - return EIOtherRegistries.RECIPE_SERIALIZERS; + return EIRecipeTypes.RECIPE_SERIALIZERS; } @Override public DeferredRegister> recipeTypeRegistry() { - return EIOtherRegistries.RECIPE_TYPES; + return EIRecipeTypes.RECIPE_TYPES; } @Override diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java index a7e34b11..b2d121a9 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/client/provider/LanguageDatagenProvider.java @@ -58,5 +58,7 @@ protected void addTranslations() this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, EI.ID, "aluminum_tesla_winding"), "Aluminum"); this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, EI.ID, "annealed_copper_tesla_winding"), "Annealed Copper"); this.add("teslatower_tier.%s.%s.%s".formatted(EI.ID, EI.ID, "superconductor_tesla_winding"), "Superconductor"); + + this.add(EI.id("tesla").toLanguageKey("death.attack"), "%1$s was electrocuted to death"); } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java new file mode 100644 index 00000000..20aee65a --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -0,0 +1,268 @@ +package net.swedz.extended_industrialization.machines.blockentity.tesla; + +import aztech.modern_industrialization.api.energy.EnergyApi; +import aztech.modern_industrialization.api.energy.MIEnergyStorage; +import aztech.modern_industrialization.api.machine.component.EnergyAccess; +import aztech.modern_industrialization.api.machine.holder.EnergyComponentHolder; +import aztech.modern_industrialization.inventory.MIInventory; +import aztech.modern_industrialization.machines.BEP; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.components.CasingComponent; +import aztech.modern_industrialization.machines.components.EnergyComponent; +import aztech.modern_industrialization.machines.components.IsActiveComponent; +import aztech.modern_industrialization.machines.components.OrientationComponent; +import aztech.modern_industrialization.machines.components.RedstoneControlComponent; +import aztech.modern_industrialization.machines.gui.MachineGuiParameters; +import aztech.modern_industrialization.machines.guicomponents.EnergyBar; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import aztech.modern_industrialization.util.Simulation; +import aztech.modern_industrialization.util.Tickable; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIClientConfig; +import net.swedz.extended_industrialization.EIConfig; +import net.swedz.extended_industrialization.EIDamageTypes; +import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; +import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; +import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; + +import java.util.List; +import java.util.Set; + +import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; + +public final class LethalTeslaCoilMachineBlockEntity extends MachineBlockEntity implements Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder +{ + private final IsActiveComponent isActive; + + private final RedstoneControlComponent redstoneControl; + private final CasingComponent casing; + + private final EnergyComponent energy; + private final MIEnergyStorage insertable; + + private final TeslaArcs arcs; + + public LethalTeslaCoilMachineBlockEntity(BEP bep) + { + super( + bep, + new MachineGuiParameters.Builder(EI.id("lethal_tesla_coil"), false).build(), + new OrientationComponent.Params(false, false, false) + ); + + isActive = new IsActiveComponent(); + + redstoneControl = new RedstoneControlComponent(); + casing = new CasingComponent(); + + energy = new EnergyComponent(this, () -> 30 * 20 * casing.getCableTier().eu); + insertable = energy.buildInsertable(casing::canInsertEu); + + arcs = new TeslaArcs( + 0.25f, 3, 3, 1, 3, 2, 5, + () -> + { + double radius = 0.35; + boolean side = TeslaArcs.RANDOM.nextBoolean(); + double x = (side ? radius : radius * TeslaArcs.RANDOM.nextDouble()) * (TeslaArcs.RANDOM.nextBoolean() ? 1 : -1); + double z = (!side ? radius : radius * TeslaArcs.RANDOM.nextDouble()) * (TeslaArcs.RANDOM.nextBoolean() ? 1 : -1); + return Vec3.upFromBottomCenterOf(Vec3i.ZERO, 1).add(x, -0.2, z); + }, + Set.of(Direction.UP, Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST) + ); + + this.registerComponents(isActive, redstoneControl, casing, energy); + + this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); + + this.registerGuiComponent(new ModularSlotPanel.Server(this, 0) + .withRedstoneModule(redstoneControl) + .withCasings(casing)); + } + + @Override + public TeslaArcBehavior getTeslaArcBehavior() + { + return new TeslaArcBehavior() + { + @Override + public boolean shouldRender() + { + return isActive.isActive; + } + + @Override + public TeslaArcs getArcs() + { + return arcs; + } + }; + } + + @Override + public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + { + return new TeslaPlasmaBehavior() + { + @Override + public boolean shouldRender() + { + return isActive.isActive; + } + + @Override + public Vec3 getOffset() + { + return new Vec3(-0.05f / 2f, -0.05f / 2f, -0.05f / 2f); + } + + @Override + public ResourceLocation getModelLocation() + { + return EI.id("tesla_plasma/tesla_coil"); + } + + @Override + public float getModelScale() + { + return 1.05f; + } + + @Override + public float getSpeed() + { + return 100f; + } + + @Override + public float getTextureScale() + { + return 32f; + } + }; + } + + @Override + protected MachineModelClientData getMachineModelData() + { + MachineModelClientData data = new MachineModelClientData(casing.getCasing()); + data.isActive = isActive.isActive; + orientation.writeModelData(data); + return data; + } + + @Override + public MIInventory getInventory() + { + return MIInventory.EMPTY; + } + + @Override + public EnergyAccess getEnergyComponent() + { + return energy; + } + + private AABB getDamageArea() + { + int range = EIConfig.lethalTeslaCoilRange; + var center = worldPosition.getCenter(); + return new AABB( + center.subtract(range, range, range), + center.add(range, range, range) + ); + } + + private float getDamageAmount() + { + // TODO scale damage based on voltage + return 4; + } + + private long tick; + + @Override + public void tick() + { + if(level.isClientSide()) + { + if(EIClientConfig.renderTeslaAnimations) + { + arcs.tick(); + } + return; + } + + boolean active = false; + + if(redstoneControl.doAllowNormalOperation(this)) + { + active = energy.consumeEu(1, Simulation.ACT) > 0; + if(active && tick++ % 10L == 0) + { + var source = EIDamageTypes.tesla(level, worldPosition.getCenter()); + float damage = this.getDamageAmount(); + var entities = level.getEntities(null, this.getDamageArea()); + for(var entity : entities) + { + // TODO scale eu cost based on voltage + if(energy.consumeEu(1, Simulation.ACT) > 0) + { + entity.hurt(source, damage); + } + else + { + break; + } + } + } + } + + isActive.updateActive(active, this); + } + + @Override + protected ItemInteractionResult useItemOn(Player player, InteractionHand hand, Direction face) + { + ItemInteractionResult result = super.useItemOn(player, hand, face); + if(!result.consumesAction()) + { + result = redstoneControl.onUse(this, player, hand); + } + if(!result.consumesAction()) + { + result = casing.onUse(this, player, hand); + } + return result; + } + + @Override + public List getTooltips() + { + return List.of( + line(EIText.TESLA_LETHAL_COIL_HELP_1).arg(EIConfig.lethalTeslaCoilRange), + line(EIText.TESLA_LETHAL_COIL_HELP_2) + ); + } + + public static void registerEnergyApi(BlockEntityType bet) + { + CapabilitiesListeners.register(EI.ID, (event) -> + event.registerBlockEntity(EnergyApi.SIDED, bet, (be, direction) -> ((LethalTeslaCoilMachineBlockEntity) be).insertable)); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaBlock.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaBlock.java new file mode 100644 index 00000000..2d076deb --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaBlock.java @@ -0,0 +1,5 @@ +package net.swedz.extended_industrialization.machines.blockentity.tesla; + +public interface TeslaBlock +{ +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java index 60398fa1..e34f6f60 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java @@ -1,11 +1,12 @@ package net.swedz.extended_industrialization.machines.component.tesla; import aztech.modern_industrialization.api.energy.CableTier; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaBlock; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; -public interface TeslaNetworkPart +public interface TeslaNetworkPart extends TeslaBlock { boolean hasNetwork(); diff --git a/src/main/java/net/swedz/extended_industrialization/recipe/RainbowableDyeRecipe.java b/src/main/java/net/swedz/extended_industrialization/recipe/RainbowableDyeRecipe.java index 8c0bb39d..7505d8e0 100644 --- a/src/main/java/net/swedz/extended_industrialization/recipe/RainbowableDyeRecipe.java +++ b/src/main/java/net/swedz/extended_industrialization/recipe/RainbowableDyeRecipe.java @@ -14,7 +14,7 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.Level; import net.swedz.extended_industrialization.EIComponents; -import net.swedz.extended_industrialization.EIOtherRegistries; +import net.swedz.extended_industrialization.EIRecipeTypes; import net.swedz.extended_industrialization.EITags; import net.swedz.extended_industrialization.component.RainbowDataComponent; @@ -81,7 +81,7 @@ public boolean canCraftInDimensions(int width, int height) @Override public RecipeSerializer getSerializer() { - return EIOtherRegistries.RAINBOWABLE_DYE_SERIALIZER.get(); + return EIRecipeTypes.RAINBOWABLE_DYE_SERIALIZER.get(); } private record Match(ItemStack dyeableItem, List dyeItems) diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_front.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa4a1a4e34f3518dc2f6dd6343051cada9fc5e8 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXgSw}SV~B-+GEd){|NkHVE@u;X@Zbr{@rl{b4UunOb?E>BNJdcl86rv>H~j zo@|a~cr@WPSAm4XO$i3eoC|;XnR|eyUhx-UkXBGtKmOs(MP)XAetwb5_x4mCE_ilE z(oH}*k}pywuVLOav9>e`0YO2=%gd&1OQ`z&>}vt@i~~vm37MHEHxxhjo59PIer_IX zcl@q0-Zc`^4blvku3Wgl@RX5J+2#D^@bwZ)jvV=?yqiOE!HxqrZbRBMc t$W$Vwe!#<{!UQO=bHbr1Ck`+$u-%+-_0FQ%I>2yb@O1TaS?83{1ORX8mR0}& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_front_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..337379df0bc455a3069e76b6de782817d7c3c830 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXgSw}SV~B-+GEd){|NkHVE@u;X@Zbr{@rl{b4UunOb?E>BNJdcl86rv>H~j zo@|a~cr@WPSAm4XO$i3eoC|;XnR_N}+LUl?vwQymla&ld8Tk46MXv9u{M`2N%uM4R z1+z^un=Bsx|1VIOGb_=-#f8OZcGRt=mv3iZKg^rJ)a`JvPu5zZ?A;B{Yj0k^K3(wb zP2`3jOS7*Z=-SA*gHge^$AN>HmzOu;*Ui=8JV8lG|0l+_@C3vpW4Ud>+umzlH$XH?EF{ePHf#HUkrKN!I u++&;%E^;tem@Lp}*(q?C;SvKgGectTWbGp-BjkbM$l&Sf=d#Wzp$Pyq=9jnt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_side.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_side.png new file mode 100644 index 0000000000000000000000000000000000000000..241f6c837bb1a2c3cfdcd404c77551dfd7f19fbb GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DX@QSC4V~B-+GEd){|NkHVE@u;X@Zbr{@rl{b4UunOb?E>BNJdcl86rv>H~j zo@|a~cr@WPSAm4XO$i3eoC|;XnR|eyUhx-ckbdy+A!FK}%Fk^N&&)LLNpLi2@Z}Zm zXkZNXj@IBdcL;AzIb2b0~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_side_active.png b/src/main/resources/assets/extended_industrialization/textures/block/machines/lethal_tesla_coil/overlay_side_active.png new file mode 100644 index 0000000000000000000000000000000000000000..27db94e11426726acc75c159f93f080647c4124a GIT binary patch literal 486 zcmV@P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0eeYAK~z{r?U=Dn z!!QtrV}iX_W2 zWiApp%?5l}_7BDwg`pZRLH_)NQ5dRm381Xu&MuC4Ky!V0fukjr3i8(Qxof!S#U;4r1Zi3O0FZTj;V;PsAsUL{l zDER@^wC+YP0i7R5tsh8h07O5Ce!%hbe(=4|2U0hRen8KDj#@uhr5n3j10ecAmFNe} z=++PD+0Rky2d&OVuGcA|AJAUs_yc}GeKYz&^aG$#}EtuWS+h?|Ia%xGDs&p7w34oh)J%F zQG;8!=I4*bhZmN8z{7O@eci#XM202PSx>bw zPuT3hkY>QHu0Df}al(w~3XvP71`UY}9v7#5o!b+j$Mu0z=Qu|}g+v3xrjtjQHZX2r zP-b7Sqd~^t1KWXQMv?s+e(-l@9hkLe;$ji82MNp$Qi)6pD%{v#Y-Hvth-gZ3G8dI* zW1QnD>9trTIY+`$^KcG3e2(ME1;29<0;z;N*~f@eKl978PplX?2q{6Fu&$RM5YT%6o#Pw@6%q{$n@%2K+Q7Jh zL79EQjs_Wn4{QgL8AbMQ_`%iHk+V9wab3NF_2YsBmL{v5}dpAfhSB$y`*L zjd6~rq}O7VU7=x#)pUXO@geCy2 Cw`+s| literal 0 HcmV?d00001 diff --git a/src/main/resources/data/extended_industrialization/damage_type/tesla.json b/src/main/resources/data/extended_industrialization/damage_type/tesla.json new file mode 100644 index 00000000..1bf96d66 --- /dev/null +++ b/src/main/resources/data/extended_industrialization/damage_type/tesla.json @@ -0,0 +1,5 @@ +{ + "message_id": "extended_industrialization.tesla", + "scaling": "never", + "exhaustion": 0.1 +} \ No newline at end of file From fe137c8f7949eacfde618e661b2cb4da17b31880 Mon Sep 17 00:00:00 2001 From: Swedz Date: Fri, 10 Jan 2025 04:49:50 -0500 Subject: [PATCH 129/159] Merge '1.21.1' into 'tesla-tower' --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c1d31ebd..81225177 100644 --- a/build.gradle +++ b/build.gradle @@ -96,7 +96,7 @@ dependencies { compileOnly "dev.emi:emi-neoforge:${emi_version}" } - implementation "net.swedz:tesseract-neoforge:${tesseract_version}" + implementation "net.swedz:tesseract-api-neoforge:${tesseract_version}" if (project.runtime_include_mi_tweaks.toBoolean()) { localImplementation "net.swedz:mi-tweaks:${mi_tweaks_version}" From f19a8dfe944e897c5c1e14255fbb20e66127e457 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 11 Jan 2025 06:54:28 -0500 Subject: [PATCH 130/159] Follow config changes --- .../extended_industrialization/EIConfig.java | 36 ++++++++++++++----- .../LethalTeslaCoilMachineBlockEntity.java | 5 ++- .../tesla/TeslaCoilMachineBlockEntity.java | 5 ++- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EIConfig.java b/src/main/java/net/swedz/extended_industrialization/EIConfig.java index 217ca8ab..b2a4347b 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIConfig.java +++ b/src/main/java/net/swedz/extended_industrialization/EIConfig.java @@ -7,14 +7,6 @@ public interface EIConfig { - @ConfigKey("local_wireless_charging_station_range") - @ConfigComment("The range for the local wireless charging station machine") - @Range.Integer(min = 1, max = Integer.MAX_VALUE) - default int localWirelessChargingStationRange() - { - return 32; - } - @ConfigKey("machine_chainer_max_connections") @ConfigComment("The maximum amount of connections a machine chainer can have") @Range.Integer(min = 1, max = 128) @@ -38,6 +30,29 @@ default int farmerFertilizerMaxRandomTicks() return 80; } + @ConfigKey("tesla_coil_range") + @ConfigComment("The range for the tesla coil to transmit energy within") + @Range.Integer(min = 1, max = Integer.MAX_VALUE) + default int teslaCoilRange() + { + return 32; + } + + @ConfigKey("lethal_tesla_coil") + @SubSection + LethalTeslaCoil lethalTeslaCoil(); + + interface LethalTeslaCoil + { + @ConfigKey("range") + @ConfigComment("The range for the lethal tesla coil to damage entities within") + @Range.Integer(min = 1, max = Integer.MAX_VALUE) + default int range() + { + return 3; + } + } + @ConfigKey("batching_machines") @SubSection BatchingMachines batchingMachines(); @@ -100,4 +115,9 @@ default double processingArrayEU() return 1; } } + + final class CableTierLethalities + { + + } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index 20aee65a..0690589e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -29,7 +29,6 @@ import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; -import net.swedz.extended_industrialization.EIConfig; import net.swedz.extended_industrialization.EIDamageTypes; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; @@ -180,7 +179,7 @@ public EnergyAccess getEnergyComponent() private AABB getDamageArea() { - int range = EIConfig.lethalTeslaCoilRange; + int range = EI.config().lethalTeslaCoil().range(); var center = worldPosition.getCenter(); return new AABB( center.subtract(range, range, range), @@ -255,7 +254,7 @@ protected ItemInteractionResult useItemOn(Player player, InteractionHand hand, D public List getTooltips() { return List.of( - line(EIText.TESLA_LETHAL_COIL_HELP_1).arg(EIConfig.lethalTeslaCoilRange), + line(EIText.TESLA_LETHAL_COIL_HELP_1).arg(EI.config().lethalTeslaCoil().range()), line(EIText.TESLA_LETHAL_COIL_HELP_2) ); } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 8759fffb..41aca2f2 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -29,7 +29,6 @@ import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIClientConfig; -import net.swedz.extended_industrialization.EIConfig; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; @@ -89,7 +88,7 @@ public TeslaCoilMachineBlockEntity(BEP bep) { CableTier tier = casing.getCableTier(); long maxTransfer = tier.getMaxTransfer(); - return TeslaTransferLimits.of(tier, maxTransfer, EIConfig.teslaCoilRange, tier.eu / 16); + return TeslaTransferLimits.of(tier, maxTransfer, EI.config().teslaCoilRange(), tier.eu / 16); } ); @@ -317,7 +316,7 @@ protected ItemInteractionResult useItemOn(Player player, InteractionHand hand, D public List getTooltips() { return List.of( - line(EIText.TESLA_COIL_HELP_1).arg(EIConfig.teslaCoilRange), + line(EIText.TESLA_COIL_HELP_1).arg(EI.config().teslaCoilRange()), line(EIText.TESLA_COIL_HELP_2) ); } From 5ad6a094c63d19bee846f8f7a952bad1db015f35 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 11 Jan 2025 07:26:04 -0500 Subject: [PATCH 131/159] Use config values to determine damage of cable tier in lethal coil --- .../swedz/extended_industrialization/EI.java | 7 +++- .../extended_industrialization/EIConfig.java | 42 +++++++++++++++++-- .../LethalTeslaCoilMachineBlockEntity.java | 28 ++++++------- 3 files changed, 58 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EI.java b/src/main/java/net/swedz/extended_industrialization/EI.java index e5203015..38969912 100644 --- a/src/main/java/net/swedz/extended_industrialization/EI.java +++ b/src/main/java/net/swedz/extended_industrialization/EI.java @@ -100,8 +100,11 @@ public static EIConfig config() private static void setupConfig(IEventBus bus, ModContainer container) { - CONFIG = new ConfigManager() - .includeDefaultValueComments() + var manager = new ConfigManager() + .includeDefaultValueComments(); + manager.codecs() + .register(EIConfig.CableTierDamages.class, EIConfig.CableTierDamages.CODEC); + CONFIG = manager .build(EIConfig.class) .register(container, ModConfig.Type.STARTUP) .load() diff --git a/src/main/java/net/swedz/extended_industrialization/EIConfig.java b/src/main/java/net/swedz/extended_industrialization/EIConfig.java index b2a4347b..aaff047f 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIConfig.java +++ b/src/main/java/net/swedz/extended_industrialization/EIConfig.java @@ -1,10 +1,16 @@ package net.swedz.extended_industrialization; +import aztech.modern_industrialization.api.energy.CableTier; +import com.mojang.serialization.Codec; +import net.swedz.tesseract.neoforge.api.Assert; import net.swedz.tesseract.neoforge.config.annotation.ConfigComment; import net.swedz.tesseract.neoforge.config.annotation.ConfigKey; import net.swedz.tesseract.neoforge.config.annotation.Range; import net.swedz.tesseract.neoforge.config.annotation.SubSection; +import java.util.Collections; +import java.util.Map; + public interface EIConfig { @ConfigKey("machine_chainer_max_connections") @@ -49,7 +55,20 @@ interface LethalTeslaCoil @Range.Integer(min = 1, max = Integer.MAX_VALUE) default int range() { - return 3; + return 2; + } + + @ConfigKey("damage") + @ConfigComment({ + "The amount of damage dealt by the lethal tesla coil for a cable tier", + "If no value is specified for a cable tier, the cable tier's EU value is divided by 16 to determine the damage dealt", + "Range: >= 0.1" + }) + default CableTierDamages damage() + { + return new CableTierDamages(Map.of( + CableTier.SUPERCONDUCTOR, (double) Integer.MAX_VALUE + )); } } @@ -116,8 +135,25 @@ default double processingArrayEU() } } - final class CableTierLethalities + final class CableTierDamages { - + public static final Codec CODEC = Codec.unboundedMap( + Codec.STRING.xmap(CableTier::getTier, (tier) -> tier.name), + Codec.doubleRange(0.1D, Integer.MAX_VALUE) + ).xmap(CableTierDamages::new, (value) -> value.damages); + + private final Map damages; + + private CableTierDamages(Map damages) + { + this.damages = Collections.unmodifiableMap(damages); + } + + public double get(CableTier cableTier) + { + Assert.notNull(cableTier); + + return damages.getOrDefault(cableTier, cableTier.eu / 16D); + } } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index 0690589e..e04013d4 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -187,10 +187,14 @@ private AABB getDamageArea() ); } + private long getEnergyCost() + { + return casing.getCableTier().eu / 8L; + } + private float getDamageAmount() { - // TODO scale damage based on voltage - return 4; + return (float) EI.config().lethalTeslaCoil().damage().get(casing.getCableTier()); } private long tick; @@ -211,23 +215,19 @@ public void tick() if(redstoneControl.doAllowNormalOperation(this)) { - active = energy.consumeEu(1, Simulation.ACT) > 0; - if(active && tick++ % 10L == 0) + float damage = this.getDamageAmount(); + if(damage > 0) { - var source = EIDamageTypes.tesla(level, worldPosition.getCenter()); - float damage = this.getDamageAmount(); - var entities = level.getEntities(null, this.getDamageArea()); - for(var entity : entities) + long energyCost = this.getEnergyCost(); + active = energy.consumeEu(energyCost, Simulation.ACT) == energyCost; + if(active && tick++ % (2 * 20L) == 0) { - // TODO scale eu cost based on voltage - if(energy.consumeEu(1, Simulation.ACT) > 0) + var source = EIDamageTypes.tesla(level, worldPosition.getCenter()); + var entities = level.getEntities(null, this.getDamageArea()); + for(var entity : entities) { entity.hurt(source, damage); } - else - { - break; - } } } } From d4a98c02088773702d4c10be3388957ec42373c7 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 11 Jan 2025 07:39:25 -0500 Subject: [PATCH 132/159] Only damage non-player living entities --- .../tesla/LethalTeslaCoilMachineBlockEntity.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index e04013d4..699187d8 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -23,6 +23,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.AABB; @@ -223,7 +225,11 @@ public void tick() if(active && tick++ % (2 * 20L) == 0) { var source = EIDamageTypes.tesla(level, worldPosition.getCenter()); - var entities = level.getEntities(null, this.getDamageArea()); + var entities = level.getEntities( + (Entity) null, + this.getDamageArea(), + (entity) -> entity.isAlive() && entity instanceof LivingEntity && !(entity instanceof Player) + ); for(var entity : entities) { entity.hurt(source, damage); From 2d5fc04aafb02f1862c79e85efa8733e31189834 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 11 Jan 2025 07:39:47 -0500 Subject: [PATCH 133/159] Only consume energy when dealing damage --- .../tesla/LethalTeslaCoilMachineBlockEntity.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index 699187d8..08ffd0fd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -48,6 +48,8 @@ public final class LethalTeslaCoilMachineBlockEntity extends MachineBlockEntity implements Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder { + private static final long DAMAGE_INTERVAL = 20L; + private final IsActiveComponent isActive; private final RedstoneControlComponent redstoneControl; @@ -221,9 +223,10 @@ public void tick() if(damage > 0) { long energyCost = this.getEnergyCost(); - active = energy.consumeEu(energyCost, Simulation.ACT) == energyCost; - if(active && tick++ % (2 * 20L) == 0) + active = energy.consumeEu(energyCost, Simulation.SIMULATE) == energyCost; + if(active && tick++ % DAMAGE_INTERVAL == 0) { + energy.consumeEu(energyCost, Simulation.ACT); var source = EIDamageTypes.tesla(level, worldPosition.getCenter()); var entities = level.getEntities( (Entity) null, From d1fa451b4f0a1e14f07b9abb16a8202ba94de0cf Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 11 Jan 2025 07:45:05 -0500 Subject: [PATCH 134/159] Center energy bar --- .../blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index 08ffd0fd..e330f002 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -91,7 +91,7 @@ public LethalTeslaCoilMachineBlockEntity(BEP bep) this.registerComponents(isActive, redstoneControl, casing, energy); - this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); + this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(81, 34), energy::getEu, energy::getCapacity)); this.registerGuiComponent(new ModularSlotPanel.Server(this, 0) .withRedstoneModule(redstoneControl) From df38f5f86c55685b5a1a2806d4b97c97132f4329 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 11 Jan 2025 21:49:54 -0500 Subject: [PATCH 135/159] Clean up codec internals --- .../item/teslalinkable/SelectedTeslaNetwork.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java index 09b85fd1..ab725eca 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/SelectedTeslaNetwork.java @@ -4,19 +4,25 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.level.block.Block; import net.swedz.tesseract.neoforge.api.WorldPos; +import net.swedz.tesseract.neoforge.helper.CodecHelper; public record SelectedTeslaNetwork(WorldPos key, Block block) { public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance .group( WorldPos.CODEC.fieldOf("key").forGetter(SelectedTeslaNetwork::key), - BuiltInRegistries.BLOCK.byNameCodec().fieldOf("block").forGetter(SelectedTeslaNetwork::block) + CodecHelper.forRegistry(BuiltInRegistries.BLOCK).fieldOf("block").forGetter(SelectedTeslaNetwork::block) ) .apply(instance, SelectedTeslaNetwork::new)); - public static final StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + WorldPos.STREAM_CODEC, + SelectedTeslaNetwork::key, + CodecHelper.forRegistryStream(BuiltInRegistries.BLOCK), + SelectedTeslaNetwork::block, + SelectedTeslaNetwork::new + ); } From 02dddac01787cb69c18521a9a41bc5cffb47c33f Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 11 Jan 2025 22:35:13 -0500 Subject: [PATCH 136/159] Clean up codec internals --- .../java/net/swedz/extended_industrialization/EIConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EIConfig.java b/src/main/java/net/swedz/extended_industrialization/EIConfig.java index aaff047f..c53a7fee 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIConfig.java +++ b/src/main/java/net/swedz/extended_industrialization/EIConfig.java @@ -3,6 +3,7 @@ import aztech.modern_industrialization.api.energy.CableTier; import com.mojang.serialization.Codec; import net.swedz.tesseract.neoforge.api.Assert; +import net.swedz.tesseract.neoforge.compat.mi.serialization.MICodecs; import net.swedz.tesseract.neoforge.config.annotation.ConfigComment; import net.swedz.tesseract.neoforge.config.annotation.ConfigKey; import net.swedz.tesseract.neoforge.config.annotation.Range; @@ -138,7 +139,7 @@ default double processingArrayEU() final class CableTierDamages { public static final Codec CODEC = Codec.unboundedMap( - Codec.STRING.xmap(CableTier::getTier, (tier) -> tier.name), + MICodecs.CABLE_TIER, Codec.doubleRange(0.1D, Integer.MAX_VALUE) ).xmap(CableTierDamages::new, (value) -> value.damages); From 096e3365bf48367228b035ca052eaef89e7f1420 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sat, 11 Jan 2025 22:45:04 -0500 Subject: [PATCH 137/159] Clamp damage dealt between 0 and int max --- .../blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index e330f002..a0db7851 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -21,6 +21,7 @@ import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.Entity; @@ -198,7 +199,7 @@ private long getEnergyCost() private float getDamageAmount() { - return (float) EI.config().lethalTeslaCoil().damage().get(casing.getCableTier()); + return (float) Mth.clamp(EI.config().lethalTeslaCoil().damage().get(casing.getCableTier()), 0, Integer.MAX_VALUE); } private long tick; From ef156c6d46ecb1e5d5e1bc45d2cddaa6f76440a8 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sun, 12 Jan 2025 00:49:22 -0500 Subject: [PATCH 138/159] Add recipe for lethal tesla coil --- .../machines/lethal_tesla_coil/assembler.json | 33 +++++++++++++++++++ .../machines/lethal_tesla_coil/craft.json | 30 +++++++++++++++++ ...chineItemRecipesServerDatagenProvider.java | 14 ++++++++ 3 files changed, 77 insertions(+) create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/lethal_tesla_coil/assembler.json create mode 100644 src/generated/resources/data/extended_industrialization/recipe/machines/lethal_tesla_coil/craft.json diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/lethal_tesla_coil/assembler.json b/src/generated/resources/data/extended_industrialization/recipe/machines/lethal_tesla_coil/assembler.json new file mode 100644 index 00000000..e1e7278e --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/lethal_tesla_coil/assembler.json @@ -0,0 +1,33 @@ +{ + "type": "modern_industrialization:assembler", + "duration": 200, + "eu": 8, + "item_inputs": [ + { + "amount": 1, + "item": "modern_industrialization:sodium_battery" + }, + { + "amount": 4, + "item": "modern_industrialization:aluminum_cable" + }, + { + "amount": 2, + "item": "modern_industrialization:electronic_circuit" + }, + { + "amount": 1, + "item": "modern_industrialization:advanced_machine_hull" + }, + { + "amount": 1, + "item": "extended_industrialization:silver_tesla_top_load" + } + ], + "item_outputs": [ + { + "amount": 1, + "item": "extended_industrialization:lethal_tesla_coil" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/extended_industrialization/recipe/machines/lethal_tesla_coil/craft.json b/src/generated/resources/data/extended_industrialization/recipe/machines/lethal_tesla_coil/craft.json new file mode 100644 index 00000000..4bac6972 --- /dev/null +++ b/src/generated/resources/data/extended_industrialization/recipe/machines/lethal_tesla_coil/craft.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "modern_industrialization:sodium_battery" + }, + "C": { + "item": "modern_industrialization:aluminum_cable" + }, + "E": { + "item": "modern_industrialization:electronic_circuit" + }, + "H": { + "item": "modern_industrialization:advanced_machine_hull" + }, + "L": { + "item": "extended_industrialization:silver_tesla_top_load" + } + }, + "pattern": [ + "CLC", + "CHC", + "EBE" + ], + "result": { + "count": 1, + "id": "extended_industrialization:lethal_tesla_coil" + } +} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java index c2dd8f23..9132b232 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/recipes/MachineItemRecipesServerDatagenProvider.java @@ -612,6 +612,20 @@ private static void tesla(RecipeOutput output) output ); addInterchangeableMachinesRecipes("tesla_coil", "tesla_receiver", output); + addBasicCraftingMachineRecipes( + "lethal_tesla_coil", + (builder) -> builder + .define('L', EIMaterials.SILVER.get(EIMaterials.Parts.TESLA_TOP_LOAD)) + .define('E', MIItem.ELECTRONIC_CIRCUIT) + .define('H', "modern_industrialization:advanced_machine_hull") + .define('B', "modern_industrialization:sodium_battery") + .define('C', "modern_industrialization:aluminum_cable") + .pattern("CLC") + .pattern("CHC") + .pattern("EBE"), + true, + output + ); String[] casings = {"basic", "advanced", "turbo", "highly_advanced", "quantum"}; String[] cables = {"tin", "electrum", "aluminum", "annealed_copper", "superconductor"}; From 5f9786a8367322e178815b3ea8e191e4df7aa4e1 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sun, 12 Jan 2025 01:48:04 -0500 Subject: [PATCH 139/159] Add tooltips to lethal tesla coil for damage and energy values --- .../lang/en_us.json | 4 +- .../extended_industrialization/EIText.java | 4 +- .../EITooltips.java | 27 +++++++++++- .../LethalTeslaCoilMachineBlockEntity.java | 44 ++++++++++++------- 4 files changed, 59 insertions(+), 20 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 6f27d638..136b8865 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -135,6 +135,7 @@ "text.extended_industrialization.command_tesla_network_dump_result_4": "* Receiver Count: %d / %d (linked / loaded)", "text.extended_industrialization.command_tesla_network_dump_result_no_transmitter": "Not loaded", "text.extended_industrialization.command_tesla_network_dump_result_yes_transmitter": "%s\n * Ticking: %s\n * Voltage: %s", + "text.extended_industrialization.damage": "%d ❤", "text.extended_industrialization.deactivated": "Deactivated", "text.extended_industrialization.dyeable_and_trimmable_help": "- Can be dyed and trimmed!", "text.extended_industrialization.dyeable_help": "- Can be dyed!", @@ -243,7 +244,8 @@ "text.extended_industrialization.tesla_handheld_selected": "Selected transmitter for receiving.", "text.extended_industrialization.tesla_interdimensional_upgrade_help": "Removes the range limitation on a Tesla Tower and allows it to transmit energy across dimensions.", "text.extended_industrialization.tesla_lethal_coil_help_1": "Deals damage to entities within %s blocks while powered.", - "text.extended_industrialization.tesla_lethal_coil_help_2": "Amount of damage dealt is determined by the voltage of hull provided.", + "text.extended_industrialization.tesla_lethal_coil_values": "Voltage determines the amount of damage dealt and energy required:", + "text.extended_industrialization.tesla_lethal_coil_voltage_value": " - %s: %s for %s", "text.extended_industrialization.tesla_network_receiver_linked": "Linked to %s", "text.extended_industrialization.tesla_network_receiver_mismatching_voltage": "Cannot receive %s power", "text.extended_industrialization.tesla_network_receiver_no_link": "Not linked to any transmitter", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index 64b7872d..b1fcbf6d 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -18,6 +18,7 @@ public enum EIText implements MICompatibleTranslatableTextEnum COMMAND_TESLA_NETWORK_DUMP_RESULT_4("* Receiver Count: %d / %d (linked / loaded)"), COMMAND_TESLA_NETWORK_DUMP_RESULT_NO_TRANSMITTER("Not loaded"), COMMAND_TESLA_NETWORK_DUMP_RESULT_YES_TRANSMITTER("%s\n * Ticking: %s\n * Voltage: %s"), + DAMAGE("%d \u2764"), DEACTIVATED("Deactivated"), DYEABLE_AND_TRIMMABLE_HELP("- Can be dyed and trimmed!"), DYEABLE_HELP("- Can be dyed!"), @@ -126,7 +127,8 @@ public enum EIText implements MICompatibleTranslatableTextEnum TESLA_HANDHELD_SELECTED("Selected transmitter for receiving."), TESLA_INTERDIMENSIONAL_UPGRADE_HELP("Removes the range limitation on a Tesla Tower and allows it to transmit energy across dimensions."), TESLA_LETHAL_COIL_HELP_1("Deals damage to entities within %s blocks while powered."), - TESLA_LETHAL_COIL_HELP_2("Amount of damage dealt is determined by the voltage of hull provided."), + TESLA_LETHAL_COIL_VALUES("Voltage determines the amount of damage dealt and energy required:"), + TESLA_LETHAL_COIL_VOLTAGE_VALUE(" - %s: %s for %s"), TESLA_NETWORK_RECEIVER_LINKED("Linked to %s"), TESLA_NETWORK_RECEIVER_MISMATCHING_VOLTAGE("Cannot receive %s power"), TESLA_NETWORK_RECEIVER_NO_LINK("Not linked to any transmitter"), diff --git a/src/main/java/net/swedz/extended_industrialization/EITooltips.java b/src/main/java/net/swedz/extended_industrialization/EITooltips.java index 11bd0749..a6ee52a5 100644 --- a/src/main/java/net/swedz/extended_industrialization/EITooltips.java +++ b/src/main/java/net/swedz/extended_industrialization/EITooltips.java @@ -17,6 +17,7 @@ import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerBlockEntity; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; import net.swedz.tesseract.neoforge.api.WorldPos; +import net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine; import net.swedz.tesseract.neoforge.tooltip.BiParser; import net.swedz.tesseract.neoforge.tooltip.Parser; import net.swedz.tesseract.neoforge.tooltip.TooltipAttachment; @@ -43,14 +44,36 @@ public final class EITooltips }; public static final Parser NUMBERED_LIST_BULLET_PARSER = (number) -> - Component.literal("%d)".formatted(number)).withStyle(NUMBER_TEXT); + Component.literal("%d)".formatted(number)).withStyle(HIGHLIGHT_STYLE); public static final Parser ACTIVATED_BOOLEAN_PARSER = (value) -> value ? EIText.ACTIVATED.text().withStyle(ChatFormatting.GREEN) : EIText.DEACTIVATED.text().withStyle(ChatFormatting.RED); public static final Parser TESLA_NETWORK_KEY_PARSER = (key) -> Parser.GLOBAL_POS.withStyle(DEFAULT_STYLE).parse(GlobalPos.of(key.dimension(), key.pos())); - public static final Parser KEYBIND_PARSER = Parser.KEYBIND.withStyle(NUMBER_TEXT); + public static final Parser KEYBIND_PARSER = Parser.KEYBIND.withStyle(HIGHLIGHT_STYLE); + + public static final Parser DAMAGE_PARSER = (damage) -> + { + MICompatibleTextLine line; + if(damage == Integer.MAX_VALUE) + { + line = EIText.DAMAGE.arg(Component.literal("\u221E").withStyle(HIGHLIGHT_STYLE)); + } + else + { + damage /= 2; + if(damage % 1 == 0) + { + line = EIText.DAMAGE.arg(damage.intValue()); + } + else + { + line = EIText.DAMAGE.arg(damage, 1, Parser.FLOAT); + } + } + return line.withStyle(HIGHLIGHT_STYLE); + }; public static final TooltipAttachment ENERGY_STORED_ITEM = TooltipAttachment.singleLineOptional( (stack, item) -> BuiltInRegistries.ITEM.getKey(item).getNamespace().equals(EI.ID), diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index a0db7851..8d8ab9fe 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -1,5 +1,7 @@ package net.swedz.extended_industrialization.machines.blockentity.tesla; +import aztech.modern_industrialization.MITooltips; +import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.EnergyApi; import aztech.modern_industrialization.api.energy.MIEnergyStorage; import aztech.modern_industrialization.api.machine.component.EnergyAccess; @@ -17,6 +19,7 @@ import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.util.Simulation; import aztech.modern_industrialization.util.Tickable; +import com.google.common.collect.Lists; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; @@ -34,6 +37,7 @@ import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIDamageTypes; import net.swedz.extended_industrialization.EIText; +import net.swedz.extended_industrialization.EITooltips; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; @@ -41,6 +45,7 @@ import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; +import net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser; import java.util.List; import java.util.Set; @@ -51,6 +56,16 @@ public final class LethalTeslaCoilMachineBlockEntity extends MachineBlockEntity { private static final long DAMAGE_INTERVAL = 20L; + public static long getEnergyCost(CableTier tier) + { + return tier.eu / 8L; + } + + public static float getDamageAmount(CableTier tier) + { + return (float) Mth.clamp(EI.config().lethalTeslaCoil().damage().get(tier), 0, Integer.MAX_VALUE); + } + private final IsActiveComponent isActive; private final RedstoneControlComponent redstoneControl; @@ -192,16 +207,6 @@ private AABB getDamageArea() ); } - private long getEnergyCost() - { - return casing.getCableTier().eu / 8L; - } - - private float getDamageAmount() - { - return (float) Mth.clamp(EI.config().lethalTeslaCoil().damage().get(casing.getCableTier()), 0, Integer.MAX_VALUE); - } - private long tick; @Override @@ -220,10 +225,10 @@ public void tick() if(redstoneControl.doAllowNormalOperation(this)) { - float damage = this.getDamageAmount(); + float damage = getDamageAmount(casing.getCableTier()); if(damage > 0) { - long energyCost = this.getEnergyCost(); + long energyCost = getEnergyCost(casing.getCableTier()); active = energy.consumeEu(energyCost, Simulation.SIMULATE) == energyCost; if(active && tick++ % DAMAGE_INTERVAL == 0) { @@ -263,10 +268,17 @@ protected ItemInteractionResult useItemOn(Player player, InteractionHand hand, D @Override public List getTooltips() { - return List.of( - line(EIText.TESLA_LETHAL_COIL_HELP_1).arg(EI.config().lethalTeslaCoil().range()), - line(EIText.TESLA_LETHAL_COIL_HELP_2) - ); + List lines = Lists.newArrayList(); + lines.add(line(EIText.TESLA_LETHAL_COIL_HELP_1).arg(EI.config().lethalTeslaCoil().range())); + lines.add(line(EIText.TESLA_LETHAL_COIL_VALUES)); + for(CableTier tier : CableTier.allTiers()) + { + lines.add(line(EIText.TESLA_LETHAL_COIL_VOLTAGE_VALUE) + .arg(tier, MIParser.CABLE_TIER_SHORT.withStyle(MITooltips.HIGHLIGHT_STYLE)) + .arg(getDamageAmount(tier), EITooltips.DAMAGE_PARSER) + .arg(getEnergyCost(tier), MITooltips.EU_PARSER)); + } + return lines; } public static void registerEnergyApi(BlockEntityType bet) From 9a5fec9aad44eea3a3ef044120c9b47c8dda3107 Mon Sep 17 00:00:00 2001 From: Swedz Date: Sun, 12 Jan 2025 01:52:24 -0500 Subject: [PATCH 140/159] Add more info to the tesla receiver hatch tooltip --- .../blockentity/tesla/TeslaReceiverHatchBlockEntity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java index 273ceab5..848ff288 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java @@ -242,6 +242,9 @@ public void tick() @Override public List getTooltips() { - return List.of(line(EIText.TESLA_RECEIVER_HELP_1)); + return List.of( + line(EIText.TESLA_RECEIVER_HELP_1), + line(EIText.TESLA_RECEIVER_HELP_2) + ); } } From 9d5752f7e3ea82822006a353ff26667cd187211a Mon Sep 17 00:00:00 2001 From: Swedz Date: Sun, 12 Jan 2025 06:58:33 -0500 Subject: [PATCH 141/159] Better lethal tesla coil animations :D --- .../client/ber/tesla/behavior/TeslaArcs.java | 71 +++++++++++++++--- .../teslatower/TeslaTowerBlockEntity.java | 1 + .../LethalTeslaCoilMachineBlockEntity.java | 16 +++- .../tesla/TeslaCoilMachineBlockEntity.java | 1 + .../network/EIPackets.java | 2 + .../packet/EntitiesElectrocutedPacket.java | 75 +++++++++++++++++++ 6 files changed, 152 insertions(+), 14 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java index f6eeb765..bba30f3f 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java @@ -2,6 +2,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; @@ -22,13 +23,16 @@ public final class TeslaArcs public static final Random RANDOM = new Random(); - private final float widthScale; - private final int arcDuration; - private final int arcs; - private final int minLength; - private final int maxLength; - private final float maxSectionLength; - private final int sectionSplits; + private final BlockPos worldPosition; + + private final boolean constantArcs; + private final float widthScale; + private final int arcDuration; + private final int arcs; + private final int minLength; + private final int maxLength; + private final float maxSectionLength; + private final int sectionSplits; private final Supplier originSupplier; @@ -36,13 +40,15 @@ public final class TeslaArcs private final List trails = Lists.newArrayList(); - public TeslaArcs(float widthScale, + public TeslaArcs(BlockPos worldPosition, boolean constantArcs, + float widthScale, int arcDuration, int arcs, int minLength, int maxLength, float maxSectionLength, int sectionSplits, Supplier originSupplier, Set allowedDirections) { + Assert.notNull(worldPosition); Assert.that(widthScale > 0); Assert.that(arcDuration > 0); Assert.that(arcs > 0); @@ -54,6 +60,8 @@ public TeslaArcs(float widthScale, Assert.notNull(allowedDirections); Assert.that(!allowedDirections.isEmpty()); + this.worldPosition = worldPosition; + this.constantArcs = constantArcs; this.widthScale = widthScale; this.arcDuration = arcDuration; this.arcs = arcs; @@ -65,13 +73,14 @@ public TeslaArcs(float widthScale, this.offsetGenerators = this.buildOffsetGenerators(allowedDirections); } - public TeslaArcs(float widthScale, + public TeslaArcs(BlockPos worldPosition, boolean constantArcs, + float widthScale, int arcDuration, int arcs, int minLength, int maxLength, float maxSectionLength, int sectionSplits, Supplier originSupplier) { - this(widthScale, arcDuration, arcs, minLength, maxLength, maxSectionLength, sectionSplits, originSupplier, ALL_DIRECTIONS); + this(worldPosition, constantArcs, widthScale, arcDuration, arcs, minLength, maxLength, maxSectionLength, sectionSplits, originSupplier, ALL_DIRECTIONS); } private Map> buildOffsetGenerators(Set allowedDirections) @@ -175,6 +184,46 @@ private void createArc() trails.add(builder); } + public void createArc(Vec3 target) + { + TeslaArcBuilder builder = TeslaArcBuilder.create(arcDuration); + int segments = RANDOM.nextInt(minLength, maxLength + 1); + Vec3 origin = originSupplier.get(); + Vec3 worldOrigin = origin.add(worldPosition.getX(), worldPosition.getY(), worldPosition.getZ()); + Vec3 direction = target.subtract(worldOrigin).normalize(); + double distance = worldOrigin.distanceTo(target); + double segmentLength = distance / segments; + for(int i = 0; i < segments; i++) + { + Vec3 directPos = direction.scale(segmentLength * i).add(origin); + Vec3 offset = direction.scale(segmentLength); + Vec3 tangent = i == segments - 1 ? Vec3.ZERO : randomTangent(direction).scale(0.25); + double offsetX = offset.x() + tangent.x(); + double offsetY = offset.y() + tangent.y(); + double offsetZ = offset.z() + tangent.z(); + double x = directPos.x(); + double y = directPos.y(); + double z = directPos.z(); + for(int j = 0; j < sectionSplits; j++) + { + builder.add(new Vec3(x, y, z)); + x += offsetX / sectionSplits; + y += offsetY / sectionSplits; + z += offsetZ / sectionSplits; + } + } + trails.add(builder); + } + + private static Vec3 randomTangent(Vec3 vector) + { + var normal = vector.normalize(); + var tangent = normal.cross(new Vec3(-normal.z(), normal.x(), normal.y())); + var bitangent = normal.cross(tangent); + var angle = RANDOM.nextDouble(-Math.PI, Math.PI); + return tangent.scale(Math.sin(angle)).add(bitangent.scale(Math.cos(angle))); + } + public void tick() { trails.removeIf((trail) -> @@ -183,7 +232,7 @@ public void tick() return trail.points().isEmpty(); }); - if(trails.size() < arcs) + if(constantArcs && trails.size() < arcs) { int maxCreate = arcs - trails.size(); int create = Math.max(Math.min(arcs / 2, maxCreate), 1); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 5c9d8521..d373ac73 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -84,6 +84,7 @@ public TeslaTowerBlockEntity(BEP bep) ); arcs = new TeslaArcs( + worldPosition, true, 1f, 3, 6, 4, 8, 15, 10, () -> Vec3.atCenterOf(this.getTopLoadPositionRelative()) ); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index 8d8ab9fe..02395f92 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -20,10 +20,12 @@ import aztech.modern_industrialization.util.Simulation; import aztech.modern_industrialization.util.Tickable; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.IntArrayList; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; @@ -43,6 +45,7 @@ import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.network.packet.EntitiesElectrocutedPacket; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; import net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser; @@ -93,7 +96,8 @@ public LethalTeslaCoilMachineBlockEntity(BEP bep) insertable = energy.buildInsertable(casing::canInsertEu); arcs = new TeslaArcs( - 0.25f, 3, 3, 1, 3, 2, 5, + worldPosition, false, + 0.25f, 3, 3, 2, 3, 2, 5, () -> { double radius = 0.35; @@ -239,9 +243,15 @@ public void tick() this.getDamageArea(), (entity) -> entity.isAlive() && entity instanceof LivingEntity && !(entity instanceof Player) ); - for(var entity : entities) + if(!entities.isEmpty()) { - entity.hurt(source, damage); + var entityIds = new IntArrayList(); + for(var entity : entities) + { + entity.hurt(source, damage); + entityIds.add(entity.getId()); + } + new EntitiesElectrocutedPacket(worldPosition, entityIds).broadcastToClients((ServerLevel) level, worldPosition, 32); } } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 41aca2f2..eed1abc7 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -93,6 +93,7 @@ public TeslaCoilMachineBlockEntity(BEP bep) ); arcs = new TeslaArcs( + worldPosition, true, 0.25f, 3, 3, 1, 3, 2, 5, () -> { diff --git a/src/main/java/net/swedz/extended_industrialization/network/EIPackets.java b/src/main/java/net/swedz/extended_industrialization/network/EIPackets.java index 3d65904c..6edac169 100644 --- a/src/main/java/net/swedz/extended_industrialization/network/EIPackets.java +++ b/src/main/java/net/swedz/extended_industrialization/network/EIPackets.java @@ -5,6 +5,7 @@ import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.network.packet.EntitiesElectrocutedPacket; import net.swedz.extended_industrialization.network.packet.FarmerFertilizeBlockPacket; import net.swedz.extended_industrialization.network.packet.ModifyElectricToolSpeedPacket; import net.swedz.extended_industrialization.network.packet.ToggleToggleableItemPacket; @@ -26,6 +27,7 @@ public static void init(RegisterPayloadHandlersEvent event) static { + create("entities_electrocuted", EntitiesElectrocutedPacket.class, EntitiesElectrocutedPacket.STREAM_CODEC); create("farmer_fertilize_block", FarmerFertilizeBlockPacket.class, FarmerFertilizeBlockPacket.STREAM_CODEC); create("modify_electric_tool_speed", ModifyElectricToolSpeedPacket.class, ModifyElectricToolSpeedPacket.STREAM_CODEC); create("toggle_nano_suit_ability", ToggleToggleableItemPacket.class, ToggleToggleableItemPacket.STREAM_CODEC); diff --git a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java new file mode 100644 index 00000000..b878a815 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java @@ -0,0 +1,75 @@ +package net.swedz.extended_industrialization.network.packet; + +import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; +import net.swedz.extended_industrialization.network.EICustomPacket; +import net.swedz.tesseract.neoforge.packet.PacketContext; + +public record EntitiesElectrocutedPacket(BlockPos origin, IntList entityIds) implements EICustomPacket +{ + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, + EntitiesElectrocutedPacket::origin, + ByteBufCodecs.VAR_INT.apply(ByteBufCodecs.list()).map(IntArrayList::new, Lists::newArrayList), + EntitiesElectrocutedPacket::entityIds, + EntitiesElectrocutedPacket::new + ); + + @Override + public void handle(PacketContext context) + { + context.assertClientbound(); + + var level = context.getPlayer().level(); + + if(entityIds.isEmpty() || + !(level.getBlockEntity(origin) instanceof TeslaArcBehaviorHolder blockEntity)) + { + return; + } + + var arcs = blockEntity.getTeslaArcBehavior().getArcs(); + + for(int entityId : entityIds) + { + var entity = level.getEntity(entityId); + if(entity != null) + { + Vec3 pos = entity.getBoundingBox().getCenter(); + for(int i = 0; i < 12; i++) + { + spark(level, pos); + } + arcs.createArc(pos); + } + } + + level.playLocalSound(origin, SoundEvents.FIREWORK_ROCKET_TWINKLE, SoundSource.BLOCKS, 1, 2, false); + } + + private static float sparkSpeed(LevelAccessor level) + { + var random = level.getRandom(); + return random.nextFloat() * 0.3f * (random.nextBoolean() ? -1 : 1); + } + + private static void spark(LevelAccessor level, Vec3 pos) + { + level.addParticle( + ParticleTypes.FIREWORK, + pos.x, pos.y, pos.z, + sparkSpeed(level), sparkSpeed(level), sparkSpeed(level) + ); + } +} From e1b0e44d404b3b77756c109db21cb24b1abf91f6 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 13 Jan 2025 05:18:38 -0500 Subject: [PATCH 142/159] Make tesla plasma and arc rendering fully resource pack driven --- .../extended_industrialization/EIClient.java | 14 +- .../client/ber/tesla/TeslaPartRenderer.java | 194 +++++++---- .../client/ber/tesla/arc/TeslaArcBuilder.java | 18 +- .../ber/tesla/behavior/TeslaArcBehavior.java | 8 - .../behavior/TeslaArcBehaviorHolder.java | 8 - .../ber/tesla/behavior/TeslaArcInstance.java | 126 +++++++ .../client/ber/tesla/behavior/TeslaArcs.java | 245 -------------- .../ber/tesla/behavior/TeslaBehavior.java | 10 + .../tesla/behavior/TeslaPlasmaBehavior.java | 19 -- .../behavior/TeslaPlasmaBehaviorHolder.java | 8 - .../client/model/tesla/TeslaBakedModel.java | 82 +++++ .../client/model/tesla/TeslaUnbakedModel.java | 311 ++++++++++++++++++ .../teslatower/TeslaTowerBlockEntity.java | 83 +---- .../LethalTeslaCoilMachineBlockEntity.java | 93 +----- .../blockentity/tesla/TeslaBlock.java | 5 - .../tesla/TeslaCoilMachineBlockEntity.java | 93 +----- .../tesla/TeslaReceiverHatchBlockEntity.java | 56 +--- .../TeslaReceiverMachineBlockEntity.java | 56 +--- .../component/tesla/TeslaNetworkPart.java | 3 +- .../packet/EntitiesElectrocutedPacket.java | 13 +- .../proxy/EIClientProxy.java | 38 +++ .../proxy/EIProxy.java | 18 + .../models/tesla/lethal_tesla_coil.json | 111 +++++++ .../models/tesla/tesla_coil.json | 137 ++++++++ .../models/tesla/tesla_hatch.json | 81 +++++ .../models/tesla/tesla_receiver.json | 59 ++++ .../models/tesla/tesla_tower.json | 130 ++++++++ .../models/tesla_plasma/tesla_coil.json | 49 --- .../models/tesla_plasma/tesla_hatch.json | 71 ---- .../models/tesla_plasma/tesla_tower.json | 77 ----- 30 files changed, 1314 insertions(+), 902 deletions(-) delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehavior.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaBehavior.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehavior.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaBakedModel.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaBlock.java create mode 100644 src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java create mode 100644 src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java create mode 100644 src/main/resources/assets/extended_industrialization/models/tesla/lethal_tesla_coil.json create mode 100644 src/main/resources/assets/extended_industrialization/models/tesla/tesla_coil.json create mode 100644 src/main/resources/assets/extended_industrialization/models/tesla/tesla_hatch.json create mode 100644 src/main/resources/assets/extended_industrialization/models/tesla/tesla_receiver.json create mode 100644 src/main/resources/assets/extended_industrialization/models/tesla/tesla_tower.json delete mode 100644 src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_coil.json delete mode 100644 src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_hatch.json delete mode 100644 src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_tower.json diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index df38d1c9..5055ea68 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -40,12 +40,13 @@ import net.swedz.extended_industrialization.client.ber.chainer.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.ber.tesla.TeslaPartMultiblockRenderer; import net.swedz.extended_industrialization.client.ber.tesla.TeslaPartSingleBlockRenderer; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.client.model.chainer.MachineChainerUnbakedModel; +import net.swedz.extended_industrialization.client.model.tesla.TeslaUnbakedModel; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.tooltip.SteamChainsawTooltipComponent; import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaBlock; import net.swedz.extended_industrialization.network.packet.ModifyElectricToolSpeedPacket; import net.swedz.tesseract.neoforge.item.DynamicDyedItem; import net.swedz.tesseract.neoforge.registry.holder.ItemHolder; @@ -116,6 +117,7 @@ private static void onRegisterColorItems(RegisterColorHandlersEvent.Item event) private static void registerModelLoaders(ModelEvent.RegisterGeometryLoaders event) { event.register(MachineChainerUnbakedModel.LOADER_ID, MachineChainerUnbakedModel.LOADER); + event.register(TeslaUnbakedModel.LOADER_ID, TeslaUnbakedModel.LOADER); } @SubscribeEvent @@ -131,7 +133,7 @@ private static void registerBlockEntityRenderers(FMLClientSetupEvent event) BlockEntityRendererProvider provider = switch (blockEntity) { case MachineChainerMachineBlockEntity be -> MachineChainerHighlightRenderer::new; - case TeslaBlock __ -> switch (blockEntity) + case TeslaBehavior __ -> switch (blockEntity) { case MultiblockMachineBlockEntity be -> TeslaPartMultiblockRenderer::new; default -> TeslaPartSingleBlockRenderer::new; @@ -160,8 +162,10 @@ private static void registerGuiLayers(RegisterGuiLayersEvent event) @SubscribeEvent private static void registerAdditionalModels(ModelEvent.RegisterAdditional event) { - event.register(ModelResourceLocation.standalone(EI.id("tesla_plasma/tesla_coil"))); - event.register(ModelResourceLocation.standalone(EI.id("tesla_plasma/tesla_hatch"))); - event.register(ModelResourceLocation.standalone(EI.id("tesla_plasma/tesla_tower"))); + event.register(ModelResourceLocation.standalone(EI.id("tesla/lethal_tesla_coil"))); + event.register(ModelResourceLocation.standalone(EI.id("tesla/tesla_coil"))); + event.register(ModelResourceLocation.standalone(EI.id("tesla/tesla_hatch"))); + event.register(ModelResourceLocation.standalone(EI.id("tesla/tesla_receiver"))); + event.register(ModelResourceLocation.standalone(EI.id("tesla/tesla_tower"))); } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java index 398ebafb..831d9f52 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java @@ -1,10 +1,14 @@ package net.swedz.extended_industrialization.client.ber.tesla; import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.util.RenderHelper; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -20,11 +24,9 @@ import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcPoint; import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcRenderer; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcInstance; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; +import net.swedz.extended_industrialization.client.model.tesla.TeslaBakedModel; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.helper.CubeOverlayRenderHelper; @@ -32,8 +34,10 @@ import java.util.List; import java.util.Optional; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; -final class TeslaPartRenderer +public final class TeslaPartRenderer { private static void renderHighlight(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { @@ -60,77 +64,101 @@ private static Optional getHeldNetworkKey() player.getOffhandItem().has(EIComponents.SELECTED_TESLA_NETWORK) ? Optional.of(player.getOffhandItem().get(EIComponents.SELECTED_TESLA_NETWORK).key()) : Optional.empty(); } - private static void renderArcs(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + private static final Cache TESLA_ARCS = CacheBuilder.newBuilder() + .expireAfterAccess(1, TimeUnit.SECONDS) + .build(); + + public static TeslaArcInstance getArcInstance(BlockPos pos) { - if(machine instanceof TeslaArcBehaviorHolder holder) + var level = Minecraft.getInstance().level; + if(level.getBlockEntity(pos) instanceof MachineBlockEntity machine && + machine instanceof TeslaBehavior behavior) { - TeslaArcBehavior behavior = holder.getTeslaArcBehavior(); - if(behavior.shouldRender()) + try { - TeslaArcs arcs = behavior.getArcs(); - for(TeslaArcBuilder trail : arcs.getTrails()) + var tesla = getTeslaModel(behavior.getTeslaModelLocation()); + if(tesla.arcs() != null) { - List points = trail.points(); - if(points.size() < 2) - { - continue; - } - int ticks = points.getFirst().timeActive(); - int halfPoints = points.size() / 2; - if(ticks == 0 || ticks == 1) - { - points = points.subList(0, (int) (halfPoints * partialTick) + (ticks == 1 ? halfPoints : 0)); - } - - matrices.pushPose(); - - var consumer = buffer.getBuffer(EIClientRenderTypes.TESLA_ARC); - TeslaArcRenderer.renderArc( - matrices, consumer, points, (i) -> (1 - i) * arcs.widthScale(), - 1f, 1f, 1f, 0.9f * (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1) + return TESLA_ARCS.get( + pos, + () -> new TeslaArcInstance( + pos, + () -> machine.orientation.facingDirection, + () -> getTeslaModel(behavior.getTeslaModelLocation()) + ) ); - - matrices.popPose(); } } + catch (ExecutionException ex) + { + throw new RuntimeException(ex); + } } + return null; } - private static BakedModelRenderable getModel(ResourceLocation location) + private static TeslaBakedModel getTeslaModel(ResourceLocation location) { - return BakedModelRenderable.of(ModelResourceLocation.standalone(location)); + var modelManager = Minecraft.getInstance().getModelManager(); + if(modelManager.getModel(ModelResourceLocation.standalone(location)) instanceof TeslaBakedModel model) + { + return model; + } + throw new IllegalArgumentException("Model \"%s\" is not a tesla model".formatted(location)); } - private static void renderPlasma(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + private static void renderArcBounds(MachineBlockEntity machine, TeslaBakedModel tesla, PoseStack matrices, MultiBufferSource buffer) { - if(machine instanceof TeslaPlasmaBehaviorHolder holder) + var arcs = tesla.arcs(); + if(arcs != null && arcs.hasRandomBounds() && Minecraft.getInstance().getEntityRenderDispatcher().shouldRenderHitBoxes()) { - TeslaPlasmaBehavior behavior = holder.getTeslaPlasmaBehavior(); - if(behavior.shouldRender()) + matrices.pushPose(); + + VertexConsumer consumer = buffer.getBuffer(RenderType.lines()); + + Vec3 position = machine.getBlockPos().getCenter(); + Direction direction = machine.orientation.facingDirection; + + var box = arcs.worldIncludeBounds(position, direction).move(position.scale(-1)).move(0.5, 0.5, 0.5); + LevelRenderer.renderLineBox(matrices, consumer, box, 0.75f, 1, 0.75f, 1); + + box = arcs.worldExcludeBounds(position, direction).move(position.scale(-1)).move(0.5, 0.5, 0.5); + LevelRenderer.renderLineBox(matrices, consumer, box, 1, 0.75f, 0.75f, 1); + + matrices.popPose(); + } + } + + private static void renderArcs(MachineBlockEntity machine, TeslaBakedModel tesla, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + var arcs = tesla.arcs(); + if(arcs != null) + { + var arcInstance = getArcInstance(machine.getBlockPos()); + if(arcInstance == null) { - matrices.pushPose(); - - Vec3 offset = behavior.getOffset(); - matrices.translate(offset.x(), offset.y(), offset.z()); + return; + } + for(TeslaArcBuilder trail : arcInstance.getTrails()) + { + List points = trail.points(); + if(points.size() < 2) + { + continue; + } + int ticks = points.getFirst().timeActive(); + int halfPoints = points.size() / 2; + if(ticks == 0 || ticks == 1) + { + points = points.subList(0, (int) (halfPoints * partialTick) + (ticks == 1 ? halfPoints : 0)); + } - float modelScale = behavior.getModelScale(); - matrices.scale(modelScale, modelScale, modelScale); + matrices.pushPose(); - var model = getModel(behavior.getModelLocation()); - float textureScale = behavior.getTextureScale(); - float speed = behavior.getSpeed(); - model.render( - matrices, buffer, - (texture) -> EIClientRenderTypes.TESLA_PLASMA.apply(textureScale, speed), - light, overlay, partialTick, - new BakedModelRenderable.Context( - null, - new Direction[1], - RandomSource.create(), - 1835364215L, - ModelData.EMPTY, - new Vector4f(1, 1, 1, 0.8f) - ) + var consumer = buffer.getBuffer(EIClientRenderTypes.TESLA_ARC); + TeslaArcRenderer.renderArc( + matrices, consumer, points, (i) -> (1 - i) * arcs.widthScale(), + 1f, 1f, 1f, 0.9f * (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1) ); matrices.popPose(); @@ -138,13 +166,53 @@ private static void renderPlasma(MachineBlockEntity machine, float partialTick, } } + private static void renderPlasma(MachineBlockEntity machine, TeslaBakedModel tesla, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + var plasma = tesla.plasma(); + if(plasma != null) + { + matrices.pushPose(); + + Vec3 worldPosition = machine.getBlockPos().getCenter(); + Vec3 worldOffset = plasma.worldOffset(worldPosition, machine.orientation.facingDirection); + Vec3 offset = worldOffset.subtract(worldPosition).add(0.5, 0.5, 0.5); + matrices.translate(offset.x(), offset.y(), offset.z()); + + float modelScale = plasma.scale(); + matrices.scale(modelScale, modelScale, modelScale); + + float textureScale = plasma.textureScale(); + float speed = plasma.speed(); + BakedModelRenderable.of(tesla).render( + matrices, buffer, + (texture) -> EIClientRenderTypes.TESLA_PLASMA.apply(textureScale, speed), + light, overlay, partialTick, + new BakedModelRenderable.Context( + null, + new Direction[1], + RandomSource.create(), + 1835364215L, + ModelData.EMPTY, + new Vector4f(1, 1, 1, 0.8f) + ) + ); + + matrices.popPose(); + } + } + static void render(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { renderHighlight(machine, partialTick, matrices, buffer, light, overlay); - if(EIClientConfig.renderTeslaAnimations) + if(EIClientConfig.renderTeslaAnimations && machine instanceof TeslaBehavior behavior) { - renderArcs(machine, partialTick, matrices, buffer, light, overlay); - renderPlasma(machine, partialTick, matrices, buffer, light, overlay); + var tesla = getTeslaModel(behavior.getTeslaModelLocation()); + renderArcBounds(machine, tesla, matrices, buffer); + if(behavior.shouldTeslaRender()) + { + renderArcs(machine, tesla, partialTick, matrices, buffer, light, overlay); + renderPlasma(machine, tesla, partialTick, matrices, buffer, light, overlay); + } } } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcBuilder.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcBuilder.java index 129733ba..677e2959 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcBuilder.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcBuilder.java @@ -17,21 +17,21 @@ public final class TeslaArcBuilder { private final List points = Lists.newArrayList(); - public final Supplier length; + public final Supplier duration; - private TeslaArcBuilder(Supplier length) + private TeslaArcBuilder(Supplier duration) { - this.length = length; + this.duration = duration; } - public static TeslaArcBuilder create(int length) + public static TeslaArcBuilder create(int duration) { - return create(() -> length); + return create(() -> duration); } - public static TeslaArcBuilder create(Supplier length) + public static TeslaArcBuilder create(Supplier duration) { - return new TeslaArcBuilder(length); + return new TeslaArcBuilder(duration); } public List points() @@ -66,9 +66,9 @@ public TeslaArcBuilder add(TeslaArcPoint point) public TeslaArcBuilder tick() { - int trailLength = this.length.get(); + int trailDuration = duration.get(); points.forEach(TeslaArcPoint::tick); - points.removeIf((point) -> point.timeActive() > trailLength); + points.removeIf((point) -> point.timeActive() > trailDuration); return this; } diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehavior.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehavior.java deleted file mode 100644 index 8791e039..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehavior.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.swedz.extended_industrialization.client.ber.tesla.behavior; - -public interface TeslaArcBehavior -{ - boolean shouldRender(); - - TeslaArcs getArcs(); -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java deleted file mode 100644 index a467c9fc..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcBehaviorHolder.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.swedz.extended_industrialization.client.ber.tesla.behavior; - -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaBlock; - -public interface TeslaArcBehaviorHolder extends TeslaBlock -{ - TeslaArcBehavior getTeslaArcBehavior(); -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java new file mode 100644 index 00000000..dcf3bdc7 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java @@ -0,0 +1,126 @@ +package net.swedz.extended_industrialization.client.ber.tesla.behavior; + +import com.google.common.collect.Lists; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; +import net.swedz.extended_industrialization.client.model.tesla.TeslaBakedModel; +import net.swedz.tesseract.neoforge.api.Assert; + +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.function.Supplier; + +public final class TeslaArcInstance +{ + public static final Random RANDOM = new Random(); + + private final Vec3 worldPosition; + private final Supplier facingDirection; + private final Supplier tesla; + + private final List trails = Lists.newArrayList(); + + public TeslaArcInstance(BlockPos worldPosition, Supplier facingDirection, Supplier tesla) + { + Assert.notNull(worldPosition); + Assert.notNull(facingDirection); + Assert.notNull(tesla); + + this.worldPosition = worldPosition.getCenter(); + this.facingDirection = facingDirection; + this.tesla = tesla; + } + + private TeslaBakedModel tesla() + { + return tesla.get(); + } + + public Vec3 closestOrigin(Vec3 target) + { + Vec3 closest = null; + double closestDistance = 0; + for(Vec3 origin : this.tesla().arcs().worldOrigins(worldPosition, facingDirection.get())) + { + double distance = origin.distanceTo(target); + if(closest == null || distance < closestDistance) + { + closest = origin; + closestDistance = distance; + } + } + return closest; + } + + public List getTrails() + { + return Collections.unmodifiableList(trails); + } + + private void createArc(Vec3 worldOrigin, Vec3 target, int duration, int segments, int segmentSplits) + { + TeslaArcBuilder builder = TeslaArcBuilder.create(duration); + Vec3 origin = worldOrigin.subtract(worldPosition).add(0.5, 0.5, 0.5); + Vec3 direction = target.subtract(worldOrigin).normalize(); + double distance = worldOrigin.distanceTo(target); + double segmentLength = distance / segments; + Vec3 offset = direction.scale(segmentLength); + for(int i = 0; i < segments; i++) + { + Vec3 direct = direction.scale(segmentLength * i).add(origin); + Vec3 tangent = i == segments - 1 ? Vec3.ZERO : randomTangent(RANDOM, direction).scale(this.tesla().arcs().randomVariance(RANDOM)); + tangent = tangent.add(offset); + double x = direct.x(); + double y = direct.y(); + double z = direct.z(); + for(int j = 0; j < segmentSplits; j++) + { + builder.add(new Vec3(x, y, z)); + x += tangent.x() / segmentSplits; + y += tangent.y() / segmentSplits; + z += tangent.z() / segmentSplits; + } + } + trails.add(builder); + } + + public void createArc(Vec3 origin, Vec3 target) + { + var arcs = this.tesla().arcs(); + this.createArc(origin, target, arcs.duration(), RANDOM.nextInt(arcs.minSegments(), arcs.maxSegments() + 1), arcs.segmentSplits()); + } + + private static Vec3 randomTangent(Random random, Vec3 vector) + { + var normal = vector.normalize(); + var tangent = normal.cross(new Vec3(-normal.z(), normal.x(), normal.y())); + var bitangent = normal.cross(tangent); + var angle = random.nextDouble(-Math.PI, Math.PI); + return tangent.scale(Math.sin(angle)).add(bitangent.scale(Math.cos(angle))); + } + + public void tick() + { + trails.removeIf((trail) -> + { + trail.tick(); + return trail.points().isEmpty(); + }); + + var tesla = this.tesla(); + var arcs = tesla.arcs(); + if(arcs != null && arcs.hasRandomBounds() && trails.size() < arcs.count()) + { + int maxCreate = arcs.count() - trails.size(); + int create = Math.max(Math.min(arcs.count() / 2, maxCreate), 1); + for(int i = 0; i < create; i++) + { + Vec3 target = tesla.arcs().worldRandomPointInBounds(RANDOM, worldPosition, facingDirection.get()); + this.createArc(this.closestOrigin(target), target); + } + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java deleted file mode 100644 index bba30f3f..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcs.java +++ /dev/null @@ -1,245 +0,0 @@ -package net.swedz.extended_industrialization.client.ber.tesla.behavior; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.phys.Vec3; -import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; -import net.swedz.tesseract.neoforge.api.Assert; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -public final class TeslaArcs -{ - private static final Set ALL_DIRECTIONS = Arrays.stream(Direction.values()).collect(Collectors.toUnmodifiableSet()); - - public static final Random RANDOM = new Random(); - - private final BlockPos worldPosition; - - private final boolean constantArcs; - private final float widthScale; - private final int arcDuration; - private final int arcs; - private final int minLength; - private final int maxLength; - private final float maxSectionLength; - private final int sectionSplits; - - private final Supplier originSupplier; - - private final Map> offsetGenerators; - - private final List trails = Lists.newArrayList(); - - public TeslaArcs(BlockPos worldPosition, boolean constantArcs, - float widthScale, - int arcDuration, int arcs, - int minLength, int maxLength, - float maxSectionLength, int sectionSplits, - Supplier originSupplier, - Set allowedDirections) - { - Assert.notNull(worldPosition); - Assert.that(widthScale > 0); - Assert.that(arcDuration > 0); - Assert.that(arcs > 0); - Assert.that(minLength > 0); - Assert.that(maxLength > 0 && maxLength >= minLength); - Assert.that(maxSectionLength > 0); - Assert.that(sectionSplits > 0); - Assert.notNull(originSupplier); - Assert.notNull(allowedDirections); - Assert.that(!allowedDirections.isEmpty()); - - this.worldPosition = worldPosition; - this.constantArcs = constantArcs; - this.widthScale = widthScale; - this.arcDuration = arcDuration; - this.arcs = arcs; - this.minLength = minLength; - this.maxLength = maxLength; - this.maxSectionLength = maxSectionLength; - this.sectionSplits = sectionSplits; - this.originSupplier = originSupplier; - this.offsetGenerators = this.buildOffsetGenerators(allowedDirections); - } - - public TeslaArcs(BlockPos worldPosition, boolean constantArcs, - float widthScale, - int arcDuration, int arcs, - int minLength, int maxLength, - float maxSectionLength, int sectionSplits, - Supplier originSupplier) - { - this(worldPosition, constantArcs, widthScale, arcDuration, arcs, minLength, maxLength, maxSectionLength, sectionSplits, originSupplier, ALL_DIRECTIONS); - } - - private Map> buildOffsetGenerators(Set allowedDirections) - { - Map> generators = Maps.newHashMap(); - - for(Direction.Axis axis : Direction.Axis.values()) - { - Direction positive = Direction.get(Direction.AxisDirection.POSITIVE, axis); - boolean allowPositive = allowedDirections.contains(positive); - Direction negative = Direction.get(Direction.AxisDirection.NEGATIVE, axis); - boolean allowNegative = allowedDirections.contains(negative); - if(allowPositive && allowNegative) - { - generators.put(axis, () -> RANDOM.nextFloat(2) - 1); - } - else if(allowPositive) - { - generators.put(axis, RANDOM::nextFloat); - } - else if(allowNegative) - { - generators.put(axis, () -> RANDOM.nextFloat() - 1); - } - } - - return Collections.unmodifiableMap(generators); - } - - public float widthScale() - { - return widthScale; - } - - public int duration() - { - return arcDuration; - } - - public int count() - { - return arcs; - } - - public int minLength() - { - return minLength; - } - - public int maxLength() - { - return maxLength; - } - - public float maxSectionLength() - { - return maxSectionLength; - } - - public int sectionSplits() - { - return sectionSplits; - } - - public List getTrails() - { - return Collections.unmodifiableList(trails); - } - - private float randomOffset(Direction.Axis axis) - { - Supplier generator = offsetGenerators.get(axis); - return generator != null ? generator.get() : 0; - } - - private void createArc() - { - TeslaArcBuilder builder = TeslaArcBuilder.create(arcDuration); - int length = RANDOM.nextInt(minLength, maxLength + 1); - Vec3 origin = originSupplier.get(); - double x = origin.x(); - double y = origin.y(); - double z = origin.z(); - float dirX = this.randomOffset(Direction.Axis.X); - float dirY = this.randomOffset(Direction.Axis.Y); - float dirZ = this.randomOffset(Direction.Axis.Z); - for(int i = 0; i < length; i++) - { - float sectionLength = maxSectionLength / (i + 1); - float offsetX = Math.abs(dirX) * RANDOM.nextFloat(); - float offsetY = Math.abs(dirY) * RANDOM.nextFloat(); - float offsetZ = Math.abs(dirZ) * RANDOM.nextFloat(); - for(int j = 0; j < sectionSplits; j++) - { - builder.add(new Vec3(x, y, z)); - x += (sectionLength * offsetX * dirX) / sectionSplits; - y += (sectionLength * offsetY * dirY) / sectionSplits; - z += (sectionLength * offsetZ * dirZ) / sectionSplits; - } - } - trails.add(builder); - } - - public void createArc(Vec3 target) - { - TeslaArcBuilder builder = TeslaArcBuilder.create(arcDuration); - int segments = RANDOM.nextInt(minLength, maxLength + 1); - Vec3 origin = originSupplier.get(); - Vec3 worldOrigin = origin.add(worldPosition.getX(), worldPosition.getY(), worldPosition.getZ()); - Vec3 direction = target.subtract(worldOrigin).normalize(); - double distance = worldOrigin.distanceTo(target); - double segmentLength = distance / segments; - for(int i = 0; i < segments; i++) - { - Vec3 directPos = direction.scale(segmentLength * i).add(origin); - Vec3 offset = direction.scale(segmentLength); - Vec3 tangent = i == segments - 1 ? Vec3.ZERO : randomTangent(direction).scale(0.25); - double offsetX = offset.x() + tangent.x(); - double offsetY = offset.y() + tangent.y(); - double offsetZ = offset.z() + tangent.z(); - double x = directPos.x(); - double y = directPos.y(); - double z = directPos.z(); - for(int j = 0; j < sectionSplits; j++) - { - builder.add(new Vec3(x, y, z)); - x += offsetX / sectionSplits; - y += offsetY / sectionSplits; - z += offsetZ / sectionSplits; - } - } - trails.add(builder); - } - - private static Vec3 randomTangent(Vec3 vector) - { - var normal = vector.normalize(); - var tangent = normal.cross(new Vec3(-normal.z(), normal.x(), normal.y())); - var bitangent = normal.cross(tangent); - var angle = RANDOM.nextDouble(-Math.PI, Math.PI); - return tangent.scale(Math.sin(angle)).add(bitangent.scale(Math.cos(angle))); - } - - public void tick() - { - trails.removeIf((trail) -> - { - trail.tick(); - return trail.points().isEmpty(); - }); - - if(constantArcs && trails.size() < arcs) - { - int maxCreate = arcs - trails.size(); - int create = Math.max(Math.min(arcs / 2, maxCreate), 1); - for(int i = 0; i < create; i++) - { - this.createArc(); - } - } - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaBehavior.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaBehavior.java new file mode 100644 index 00000000..e5203860 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaBehavior.java @@ -0,0 +1,10 @@ +package net.swedz.extended_industrialization.client.ber.tesla.behavior; + +import net.minecraft.resources.ResourceLocation; + +public interface TeslaBehavior +{ + boolean shouldTeslaRender(); + + ResourceLocation getTeslaModelLocation(); +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehavior.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehavior.java deleted file mode 100644 index d546984e..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehavior.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.swedz.extended_industrialization.client.ber.tesla.behavior; - -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.phys.Vec3; - -public interface TeslaPlasmaBehavior -{ - boolean shouldRender(); - - Vec3 getOffset(); - - ResourceLocation getModelLocation(); - - float getModelScale(); - - float getSpeed(); - - float getTextureScale(); -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java deleted file mode 100644 index 401ce617..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaPlasmaBehaviorHolder.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.swedz.extended_industrialization.client.ber.tesla.behavior; - -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaBlock; - -public interface TeslaPlasmaBehaviorHolder extends TeslaBlock -{ - TeslaPlasmaBehavior getTeslaPlasmaBehavior(); -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaBakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaBakedModel.java new file mode 100644 index 00000000..8a9b1eb7 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaBakedModel.java @@ -0,0 +1,82 @@ +package net.swedz.extended_industrialization.client.model.tesla; + +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.IDynamicBakedModel; +import net.neoforged.neoforge.client.model.data.ModelData; + +import java.util.List; +import java.util.Map; + +public final class TeslaBakedModel implements IDynamicBakedModel +{ + private final List unculledFaces; + private final Map> culledFaces; + private final TeslaUnbakedModel.Plasma plasma; + private final TeslaUnbakedModel.Arcs arcs; + + TeslaBakedModel(List unculledFaces, Map> culledFaces, TeslaUnbakedModel.Plasma plasma, TeslaUnbakedModel.Arcs arcs) + { + this.unculledFaces = unculledFaces; + this.culledFaces = culledFaces; + this.plasma = plasma; + this.arcs = arcs; + } + + public TeslaUnbakedModel.Plasma plasma() + { + return plasma; + } + + public TeslaUnbakedModel.Arcs arcs() + { + return arcs; + } + + @Override + public List getQuads(BlockState state, Direction direction, RandomSource random, ModelData data, RenderType renderType) + { + return direction == null ? unculledFaces : culledFaces.get(direction); + } + + @Override + public boolean useAmbientOcclusion() + { + return false; + } + + @Override + public boolean isGui3d() + { + return false; + } + + @Override + public boolean usesBlockLight() + { + return false; + } + + @Override + public boolean isCustomRenderer() + { + return false; + } + + @Override + public TextureAtlasSprite getParticleIcon() + { + return null; + } + + @Override + public ItemOverrides getOverrides() + { + return ItemOverrides.EMPTY; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java new file mode 100644 index 00000000..c5b52de7 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java @@ -0,0 +1,311 @@ +package net.swedz.extended_industrialization.client.model.tesla; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.BlockElement; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.client.resources.model.ModelBaker; +import net.minecraft.client.resources.model.ModelState; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.client.model.IModelBuilder; +import net.neoforged.neoforge.client.model.QuadTransformers; +import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; +import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; +import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; +import net.neoforged.neoforge.client.model.geometry.UnbakedGeometryHelper; +import net.swedz.extended_industrialization.EI; +import net.swedz.tesseract.neoforge.api.Assert; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + +public final class TeslaUnbakedModel implements IUnbakedGeometry +{ + public static final ResourceLocation LOADER_ID = EI.id("tesla"); + public static final IGeometryLoader LOADER = (json, context) -> + { + Plasma plasma = json.has("plasma") ? Plasma.deserialize(json.getAsJsonObject("plasma"), context) : null; + Arcs arcs = json.has("arcs") ? Arcs.deserialize(json.getAsJsonObject("arcs"), context) : null; + return new TeslaUnbakedModel(plasma, arcs); + }; + + public record Plasma( + List elements, + Vec3 offset, + float scale, float speed, float textureScale + ) + { + private static Plasma deserialize(JsonObject json, JsonDeserializationContext context) + { + Assert.that(json.has("elements"), "A tesla model's plasma must have an \"elements\" member.", JsonParseException::new); + List elements = Lists.newArrayList(); + for(JsonElement element : GsonHelper.getAsJsonArray(json, "elements")) + { + elements.add(context.deserialize(element, BlockElement.class)); + } + + Assert.that(json.has("offset"), "A tesla model's plasma must have an \"offset\" member.", JsonParseException::new); + Vec3 offset = context.deserialize(json.get("offset"), Vec3.class); + + Assert.that(json.has("scale"), "A tesla model's plasma must have a \"scale\" member.", JsonParseException::new); + float scale = json.get("scale").getAsFloat(); + + Assert.that(json.has("speed"), "A tesla model's plasma must have a \"speed\" member.", JsonParseException::new); + float speed = json.get("speed").getAsFloat(); + + Assert.that(json.has("texture_scale"), "A tesla model's plasma must have a \"texture_scale\" member.", JsonParseException::new); + float textureScale = json.get("texture_scale").getAsFloat(); + + return new Plasma(elements, offset, scale, speed, textureScale); + } + + public Vec3 worldOffset(Vec3 machinePosition, Direction machineDirection) + { + return convertToWorld(machinePosition, machineDirection, offset); + } + } + + public record ArcBounds(Vec3 min, Vec3 max) + { + private static ArcBounds deserialize(JsonObject json, JsonDeserializationContext context) + { + Assert.that(json.has("min") && json.has("max"), "A tesla model's arc bounds must have both a \"min\" and \"max\" member.", JsonParseException::new); + Vec3 min = context.deserialize(json.get("min"), Vec3.class); + Vec3 max = context.deserialize(json.get("max"), Vec3.class); + return new ArcBounds(min, max); + } + + public AABB toAABB() + { + return new AABB(min, max); + } + } + + public record Arcs( + Optional randomBoundsInclude, + Optional randomBoundsExclude, + List origins, + float widthScale, + float minVariance, float maxVariance, + int duration, int count, + int minSegments, int maxSegments, int segmentSplits + ) + { + private static Arcs deserialize(JsonObject json, JsonDeserializationContext context) + { + Optional randomBoundsInclude = Optional.empty(); + Optional randomBoundsExclude = Optional.empty(); + if(json.has("random_bounds")) + { + JsonObject randomBoundsJson = json.getAsJsonObject("random_bounds"); + Assert.that( + randomBoundsJson.has("include") && randomBoundsJson.has("exclude"), + "A tesla model's arc random bounds must have both an \"include\" and \"exclude\" member.", JsonParseException::new + ); + randomBoundsInclude = Optional.of(ArcBounds.deserialize(randomBoundsJson.getAsJsonObject("include"), context)); + randomBoundsExclude = Optional.of(ArcBounds.deserialize(randomBoundsJson.getAsJsonObject("exclude"), context)); + } + + Assert.that(json.has("origins"), "A tesla model's arcs must have an \"origins\" member.", JsonParseException::new); + List origins = Lists.newArrayList(); + for(JsonElement element : GsonHelper.getAsJsonArray(json, "origins")) + { + origins.add(context.deserialize(element, Vec3.class)); + } + + Assert.that(json.has("width_scale"), "A tesla model's arcs must have a \"width_scale\" member.", JsonParseException::new); + float widthScale = json.get("width_scale").getAsFloat(); + + Assert.that(json.has("min_variance"), "A tesla model's arcs must have a \"min_variance\" member.", JsonParseException::new); + float minVariance = json.get("min_variance").getAsFloat(); + Assert.that(json.has("max_variance"), "A tesla model's arcs must have a \"max_variance\" member.", JsonParseException::new); + float maxVariance = json.get("max_variance").getAsFloat(); + + Assert.that(json.has("duration"), "A tesla model's arcs must have a \"duration\" member.", JsonParseException::new); + int duration = json.get("duration").getAsInt(); + + Assert.that(json.has("count"), "A tesla model's arcs must have a \"count\" member.", JsonParseException::new); + int count = json.get("count").getAsInt(); + + Assert.that(json.has("min_segments"), "A tesla model's arcs must have a \"min_segments\" member.", JsonParseException::new); + int minSegments = json.get("min_segments").getAsInt(); + + Assert.that(json.has("max_segments"), "A tesla model's arcs must have a \"max_segments\" member.", JsonParseException::new); + int maxSegments = json.get("max_segments").getAsInt(); + + Assert.that(json.has("segment_splits"), "A tesla model's arcs must have a \"segment_splits\" member.", JsonParseException::new); + int segmentSplits = json.get("segment_splits").getAsInt(); + + return new Arcs(randomBoundsInclude, randomBoundsExclude, origins, widthScale, minVariance, maxVariance, duration, count, minSegments, maxSegments, segmentSplits); + } + + public Arcs + { + Assert.that(randomBoundsInclude.isPresent() == randomBoundsExclude.isPresent()); + } + + public boolean hasRandomBounds() + { + return randomBoundsInclude.isPresent(); + } + + public AABB worldIncludeBounds(Vec3 machinePosition, Direction machineDirection) + { + return convertToWorld(machinePosition, machineDirection, randomBoundsInclude.orElseThrow().toAABB()); + } + + public AABB worldExcludeBounds(Vec3 machinePosition, Direction machineDirection) + { + return convertToWorld(machinePosition, machineDirection, randomBoundsExclude.orElseThrow().toAABB()); + } + + // TODO this is not a very elegant solution ... should be fixed up + public Vec3 worldRandomPointInBounds(Random random, Vec3 machinePosition, Direction machineDirection) + { + Assert.that(this.hasRandomBounds()); + + AABB include = this.worldIncludeBounds(machinePosition, machineDirection); + AABB exclude = this.worldExcludeBounds(machinePosition, machineDirection); + + while(true) + { + double randomX = random.nextDouble(include.minX, include.maxX); + double randomY = random.nextDouble(include.minY, include.maxY); + double randomZ = random.nextDouble(include.minZ, include.maxZ); + var randomPos = new Vec3(randomX, randomY, randomZ); + if(!exclude.contains(randomPos)) + { + return randomPos; + } + } + } + + public List worldOrigins(Vec3 machinePosition, Direction machineDirection) + { + List converted = Lists.newArrayList(); + for(Vec3 origin : origins) + { + converted.add(convertToWorld(machinePosition, machineDirection, origin)); + } + return Collections.unmodifiableList(converted); + } + + public float randomVariance(Random random) + { + return minVariance == maxVariance ? minVariance : random.nextFloat(minVariance, maxVariance); + } + } + + private static Vec3 convertToWorld(Vec3 machinePosition, Direction machineDirection, Vec3 position) + { + Vec3 rotatedPos = switch (machineDirection) + { + case NORTH -> new Vec3(-position.x(), position.y(), position.z()); + case SOUTH -> new Vec3(position.x(), position.y(), -position.z()); + case EAST -> new Vec3(-position.z(), position.y(), -position.x()); + case WEST -> new Vec3(position.z(), position.y(), position.x()); + default -> + throw new IllegalArgumentException("Unsupported machine direction: %s".formatted(machineDirection.toString())); + }; + return rotatedPos.add(machinePosition); + } + + private static AABB convertToWorld(Vec3 machinePosition, Direction machineDirection, AABB box) + { + var min = convertToWorld(machinePosition, machineDirection, box.getMinPosition()); + var max = convertToWorld(machinePosition, machineDirection, box.getMaxPosition()); + return new AABB(min, max); + } + + private final Plasma plasma; + private final Arcs arcs; + + private TeslaUnbakedModel(Plasma plasma, Arcs arcs) + { + this.plasma = plasma; + this.arcs = arcs; + } + + private void addQuads(IGeometryBakingContext context, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelState) + { + var postTransform = QuadTransformers.empty(); + var rootTransform = context.getRootTransform(); + if(!rootTransform.isIdentity()) + { + postTransform = UnbakedGeometryHelper.applyRootTransform(modelState, rootTransform); + } + + for(BlockElement element : plasma.elements()) + { + for(Direction direction : element.faces.keySet()) + { + var face = element.faces.get(direction); + var sprite = spriteGetter.apply(context.getMaterial(face.texture())); + var quad = BlockModel.bakeFace(element, face, sprite, direction, modelState); + postTransform.processInPlace(quad); + + if(face.cullForDirection() == null) + { + modelBuilder.addUnculledFace(quad); + } + else + { + modelBuilder.addCulledFace(modelState.getRotation().rotateTransform(face.cullForDirection()), quad); + } + } + } + } + + @Override + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, + ModelState modelState, ItemOverrides overrides) + { + List unculledFaces = Lists.newArrayList(); + Map> culledFaces = Maps.newEnumMap(Direction.class); + for(Direction direction : Direction.values()) + { + culledFaces.put(direction, Lists.newArrayList()); + } + IModelBuilder builder = new IModelBuilder() + { + @Override + public IModelBuilder addCulledFace(Direction facing, BakedQuad quad) + { + culledFaces.get(facing).add(quad); + return this; + } + + @Override + public IModelBuilder addUnculledFace(BakedQuad quad) + { + unculledFaces.add(quad); + return this; + } + + @Override + public BakedModel build() + { + return new TeslaBakedModel(unculledFaces, culledFaces, plasma, arcs); + } + }; + this.addQuads(context, builder, baker, spriteGetter, modelState); + return builder.build(); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index d373ac73..52570aee 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -21,26 +21,22 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; import net.swedz.extended_industrialization.machines.guicomponent.EIModularSlotPanelSlots; +import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.modularmultiblock.ModularMultiblockGui; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; import net.swedz.tesseract.neoforge.compat.mi.machine.blockentity.multiblock.BasicMultiblockMachineBlockEntity; import net.swedz.tesseract.neoforge.compat.mi.machine.multiblock.matcher.SameCableTierShapeMatcher; +import net.swedz.tesseract.neoforge.proxy.Proxies; import java.util.List; import java.util.Map; @@ -50,7 +46,7 @@ import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.line; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser.*; -public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder +public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEntity implements EnergyListComponentHolder, TeslaTransmitter.Delegate, TeslaBehavior { private final RedstoneControlComponent redstoneControl; private final TeslaTowerUpgradeComponent upgrade; @@ -59,8 +55,6 @@ public final class TeslaTowerBlockEntity extends BasicMultiblockMachineBlockEnti private final TeslaTransmitterComponent transmitter; - private final TeslaArcs arcs; - private boolean hasMismatchingHatches; private CableTier cableTier; private long lastEnergyTransmitted; @@ -83,12 +77,6 @@ public TeslaTowerBlockEntity(BEP bep) () -> new WorldPos(level, this.getTopLoadPosition()) ); - arcs = new TeslaArcs( - worldPosition, true, - 1f, 3, 6, 4, 8, 15, 10, - () -> Vec3.atCenterOf(this.getTopLoadPositionRelative()) - ); - this.registerComponents(redstoneControl, upgrade, transmitter); this.registerGuiComponent(new ModularMultiblockGui.Server(0, ModularMultiblockGui.HEIGHT, (content) -> @@ -153,65 +141,15 @@ public BlockPos getTopLoadPositionRelative() } @Override - public TeslaArcBehavior getTeslaArcBehavior() + public boolean shouldTeslaRender() { - return new TeslaArcBehavior() - { - @Override - public boolean shouldRender() - { - return isActive.isActive; - } - - @Override - public TeslaArcs getArcs() - { - return arcs; - } - }; + return isActive.isActive; } @Override - public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + public ResourceLocation getTeslaModelLocation() { - return new TeslaPlasmaBehavior() - { - @Override - public boolean shouldRender() - { - return isActive.isActive; - } - - @Override - public Vec3 getOffset() - { - return Vec3.atCenterOf(TeslaTowerBlockEntity.this.getTopLoadPositionRelative()); - } - - @Override - public ResourceLocation getModelLocation() - { - return EI.id("tesla_plasma/tesla_tower"); - } - - @Override - public float getModelScale() - { - return 5.25f; - } - - @Override - public float getSpeed() - { - return 60f; - } - - @Override - public float getTextureScale() - { - return 48f; - } - }; + return EI.id("tesla/tesla_tower"); } @Override @@ -308,10 +246,7 @@ public void tick() if(level.isClientSide()) { - if(EIClientConfig.renderTeslaAnimations) - { - arcs.tick(); - } + Proxies.get(EIProxy.class).tickTesla(worldPosition); return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index 02395f92..f503e4dc 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -22,7 +22,6 @@ import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.ints.IntArrayList; import net.minecraft.core.Direction; -import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -34,28 +33,23 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIDamageTypes; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.EITooltips; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.network.packet.EntitiesElectrocutedPacket; +import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; import net.swedz.tesseract.neoforge.compat.mi.tooltip.MIParser; +import net.swedz.tesseract.neoforge.proxy.Proxies; import java.util.List; -import java.util.Set; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; -public final class LethalTeslaCoilMachineBlockEntity extends MachineBlockEntity implements Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder +public final class LethalTeslaCoilMachineBlockEntity extends MachineBlockEntity implements Tickable, EnergyComponentHolder, TeslaBehavior { private static final long DAMAGE_INTERVAL = 20L; @@ -77,8 +71,6 @@ public static float getDamageAmount(CableTier tier) private final EnergyComponent energy; private final MIEnergyStorage insertable; - private final TeslaArcs arcs; - public LethalTeslaCoilMachineBlockEntity(BEP bep) { super( @@ -95,20 +87,6 @@ public LethalTeslaCoilMachineBlockEntity(BEP bep) energy = new EnergyComponent(this, () -> 30 * 20 * casing.getCableTier().eu); insertable = energy.buildInsertable(casing::canInsertEu); - arcs = new TeslaArcs( - worldPosition, false, - 0.25f, 3, 3, 2, 3, 2, 5, - () -> - { - double radius = 0.35; - boolean side = TeslaArcs.RANDOM.nextBoolean(); - double x = (side ? radius : radius * TeslaArcs.RANDOM.nextDouble()) * (TeslaArcs.RANDOM.nextBoolean() ? 1 : -1); - double z = (!side ? radius : radius * TeslaArcs.RANDOM.nextDouble()) * (TeslaArcs.RANDOM.nextBoolean() ? 1 : -1); - return Vec3.upFromBottomCenterOf(Vec3i.ZERO, 1).add(x, -0.2, z); - }, - Set.of(Direction.UP, Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST) - ); - this.registerComponents(isActive, redstoneControl, casing, energy); this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(81, 34), energy::getEu, energy::getCapacity)); @@ -119,65 +97,15 @@ public LethalTeslaCoilMachineBlockEntity(BEP bep) } @Override - public TeslaArcBehavior getTeslaArcBehavior() + public boolean shouldTeslaRender() { - return new TeslaArcBehavior() - { - @Override - public boolean shouldRender() - { - return isActive.isActive; - } - - @Override - public TeslaArcs getArcs() - { - return arcs; - } - }; + return isActive.isActive; } @Override - public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + public ResourceLocation getTeslaModelLocation() { - return new TeslaPlasmaBehavior() - { - @Override - public boolean shouldRender() - { - return isActive.isActive; - } - - @Override - public Vec3 getOffset() - { - return new Vec3(-0.05f / 2f, -0.05f / 2f, -0.05f / 2f); - } - - @Override - public ResourceLocation getModelLocation() - { - return EI.id("tesla_plasma/tesla_coil"); - } - - @Override - public float getModelScale() - { - return 1.05f; - } - - @Override - public float getSpeed() - { - return 100f; - } - - @Override - public float getTextureScale() - { - return 32f; - } - }; + return EI.id("tesla/lethal_tesla_coil"); } @Override @@ -218,10 +146,7 @@ public void tick() { if(level.isClientSide()) { - if(EIClientConfig.renderTeslaAnimations) - { - arcs.tick(); - } + Proxies.get(EIProxy.class).tickTesla(worldPosition); return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaBlock.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaBlock.java deleted file mode 100644 index 2d076deb..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaBlock.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.swedz.extended_industrialization.machines.blockentity.tesla; - -public interface TeslaBlock -{ -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index eed1abc7..d4b7b8fc 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -18,7 +18,6 @@ import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.util.Tickable; import net.minecraft.core.Direction; -import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; @@ -26,30 +25,25 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.EIClientConfig; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcs; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; +import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; +import net.swedz.tesseract.neoforge.proxy.Proxies; import java.util.List; import java.util.Optional; -import java.util.Set; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; -public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaArcBehaviorHolder, TeslaPlasmaBehaviorHolder +public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implements TeslaTransmitter.Delegate, Tickable, EnergyComponentHolder, TeslaBehavior { private final IsActiveComponent isActive; @@ -61,8 +55,6 @@ public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implem private final TeslaTransmitterComponent transmitter; - private final TeslaArcs arcs; - private long lastEnergyTransmitted; public TeslaCoilMachineBlockEntity(BEP bep) @@ -92,20 +84,6 @@ public TeslaCoilMachineBlockEntity(BEP bep) } ); - arcs = new TeslaArcs( - worldPosition, true, - 0.25f, 3, 3, 1, 3, 2, 5, - () -> - { - double radius = 0.35; - boolean side = TeslaArcs.RANDOM.nextBoolean(); - double x = (side ? radius : radius * TeslaArcs.RANDOM.nextDouble()) * (TeslaArcs.RANDOM.nextBoolean() ? 1 : -1); - double z = (!side ? radius : radius * TeslaArcs.RANDOM.nextDouble()) * (TeslaArcs.RANDOM.nextBoolean() ? 1 : -1); - return Vec3.upFromBottomCenterOf(Vec3i.ZERO, 1).add(x, -0.2, z); - }, - Set.of(Direction.UP, Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST) - ); - this.registerComponents(isActive, redstoneControl, casing, energy, transmitter); this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); @@ -147,65 +125,15 @@ private void onCasingUpdate(CableTier from, CableTier to) } @Override - public TeslaArcBehavior getTeslaArcBehavior() + public boolean shouldTeslaRender() { - return new TeslaArcBehavior() - { - @Override - public boolean shouldRender() - { - return isActive.isActive; - } - - @Override - public TeslaArcs getArcs() - { - return arcs; - } - }; + return isActive.isActive; } @Override - public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + public ResourceLocation getTeslaModelLocation() { - return new TeslaPlasmaBehavior() - { - @Override - public boolean shouldRender() - { - return isActive.isActive; - } - - @Override - public Vec3 getOffset() - { - return new Vec3(-0.05f / 2f, -0.05f / 2f, -0.05f / 2f); - } - - @Override - public ResourceLocation getModelLocation() - { - return EI.id("tesla_plasma/tesla_coil"); - } - - @Override - public float getModelScale() - { - return 1.05f; - } - - @Override - public float getSpeed() - { - return 100f; - } - - @Override - public float getTextureScale() - { - return 32f; - } - }; + return EI.id("tesla/tesla_coil"); } @Override @@ -268,10 +196,7 @@ public void tick() { if(level.isClientSide()) { - if(EIClientConfig.renderTeslaAnimations) - { - arcs.tick(); - } + Proxies.get(EIProxy.class).tickTesla(worldPosition); return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java index 848ff288..f5e87488 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java @@ -18,23 +18,23 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; +import net.swedz.extended_industrialization.proxy.EIProxy; +import net.swedz.tesseract.neoforge.proxy.Proxies; import java.util.List; import java.util.Optional; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; -public final class TeslaReceiverHatchBlockEntity extends HatchBlockEntity implements EnergyComponentHolder, CableTierHolder, TeslaReceiver.Delegate, TeslaPlasmaBehaviorHolder +public final class TeslaReceiverHatchBlockEntity extends HatchBlockEntity implements EnergyComponentHolder, CableTierHolder, TeslaReceiver.Delegate, TeslaBehavior { private final CableTier tier; @@ -100,46 +100,15 @@ private void onCasingUpdate(CableTier from, CableTier to) } @Override - public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + public boolean shouldTeslaRender() { - return new TeslaPlasmaBehavior() - { - @Override - public boolean shouldRender() - { - return isActive.isActive; - } - - @Override - public Vec3 getOffset() - { - return new Vec3(-0.05f / 2f, -0.05f / 2f, -0.05f / 2f); - } - - @Override - public ResourceLocation getModelLocation() - { - return EI.id("tesla_plasma/tesla_hatch"); - } - - @Override - public float getModelScale() - { - return 1.05f; - } - - @Override - public float getSpeed() - { - return 100f; - } - - @Override - public float getTextureScale() - { - return 48f; - } - }; + return isActive.isActive; + } + + @Override + public ResourceLocation getTeslaModelLocation() + { + return EI.id("tesla/tesla_hatch"); } @Override @@ -225,6 +194,7 @@ public void tick() if(level.isClientSide()) { + Proxies.get(EIProxy.class).tickTesla(worldPosition); return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index 82fda482..1c41de6e 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -25,24 +25,24 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehavior; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaPlasmaBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; +import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; +import net.swedz.tesseract.neoforge.proxy.Proxies; import java.util.List; import java.util.Optional; import static net.swedz.tesseract.neoforge.compat.mi.tooltip.MICompatibleTextLine.*; -public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable, TeslaPlasmaBehaviorHolder +public final class TeslaReceiverMachineBlockEntity extends MachineBlockEntity implements TeslaReceiver.Delegate, Tickable, TeslaBehavior { private final IsActiveComponent isActive; @@ -121,46 +121,15 @@ private void onCasingUpdate(CableTier from, CableTier to) } @Override - public TeslaPlasmaBehavior getTeslaPlasmaBehavior() + public boolean shouldTeslaRender() { - return new TeslaPlasmaBehavior() - { - @Override - public boolean shouldRender() - { - return isActive.isActive; - } - - @Override - public Vec3 getOffset() - { - return new Vec3(-0.05f / 2f, -0.05f / 2f, -0.05f / 2f); - } - - @Override - public ResourceLocation getModelLocation() - { - return EI.id("tesla_plasma/tesla_coil"); - } - - @Override - public float getModelScale() - { - return 1.05f; - } - - @Override - public float getSpeed() - { - return 100f; - } - - @Override - public float getTextureScale() - { - return 32f; - } - }; + return isActive.isActive; + } + + @Override + public ResourceLocation getTeslaModelLocation() + { + return EI.id("tesla/tesla_receiver"); } @Override @@ -215,6 +184,7 @@ public void tick() { if(level.isClientSide()) { + Proxies.get(EIProxy.class).tickTesla(worldPosition); return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java index e34f6f60..60398fa1 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java @@ -1,12 +1,11 @@ package net.swedz.extended_industrialization.machines.component.tesla; import aztech.modern_industrialization.api.energy.CableTier; -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaBlock; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; -public interface TeslaNetworkPart extends TeslaBlock +public interface TeslaNetworkPart { boolean hasNetwork(); diff --git a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java index b878a815..a3f8a01a 100644 --- a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java +++ b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.network.packet; +import aztech.modern_industrialization.machines.MachineBlockEntity; import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; @@ -12,9 +13,11 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.phys.Vec3; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcBehaviorHolder; +import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.network.EICustomPacket; +import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.packet.PacketContext; +import net.swedz.tesseract.neoforge.proxy.Proxies; public record EntitiesElectrocutedPacket(BlockPos origin, IntList entityIds) implements EICustomPacket { @@ -32,15 +35,15 @@ public void handle(PacketContext context) context.assertClientbound(); var level = context.getPlayer().level(); + var blockEntity = level.getBlockEntity(origin); if(entityIds.isEmpty() || - !(level.getBlockEntity(origin) instanceof TeslaArcBehaviorHolder blockEntity)) + !(blockEntity instanceof MachineBlockEntity) || + !(blockEntity instanceof TeslaBehavior)) { return; } - var arcs = blockEntity.getTeslaArcBehavior().getArcs(); - for(int entityId : entityIds) { var entity = level.getEntity(entityId); @@ -51,7 +54,7 @@ public void handle(PacketContext context) { spark(level, pos); } - arcs.createArc(pos); + Proxies.get(EIProxy.class).createTeslaArc(origin, pos); } } diff --git a/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java b/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java new file mode 100644 index 00000000..c9e0e2f0 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java @@ -0,0 +1,38 @@ +package net.swedz.extended_industrialization.proxy; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.EIClientConfig; +import net.swedz.extended_industrialization.client.ber.tesla.TeslaPartRenderer; +import net.swedz.tesseract.neoforge.proxy.ProxyEntrypoint; +import net.swedz.tesseract.neoforge.proxy.ProxyEnvironment; + +@ProxyEntrypoint(environment = ProxyEnvironment.CLIENT) +public class EIClientProxy extends EIProxy +{ + @Override + public void tickTesla(BlockPos blockPos) + { + if(EIClientConfig.renderTeslaAnimations) + { + var arcInstance = TeslaPartRenderer.getArcInstance(blockPos); + if(arcInstance != null) + { + arcInstance.tick(); + } + } + } + + @Override + public void createTeslaArc(BlockPos blockPos, Vec3 target) + { + if(EIClientConfig.renderTeslaAnimations) + { + var arcInstance = TeslaPartRenderer.getArcInstance(blockPos); + if(arcInstance != null) + { + arcInstance.createArc(arcInstance.closestOrigin(target), target); + } + } + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java b/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java new file mode 100644 index 00000000..77c04137 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java @@ -0,0 +1,18 @@ +package net.swedz.extended_industrialization.proxy; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; +import net.swedz.tesseract.neoforge.proxy.Proxy; +import net.swedz.tesseract.neoforge.proxy.ProxyEntrypoint; + +@ProxyEntrypoint +public class EIProxy implements Proxy +{ + public void tickTesla(BlockPos blockPos) + { + } + + public void createTeslaArc(BlockPos blockPos, Vec3 target) + { + } +} diff --git a/src/main/resources/assets/extended_industrialization/models/tesla/lethal_tesla_coil.json b/src/main/resources/assets/extended_industrialization/models/tesla/lethal_tesla_coil.json new file mode 100644 index 00000000..d4c870a8 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/tesla/lethal_tesla_coil.json @@ -0,0 +1,111 @@ +{ + "loader": "extended_industrialization:tesla", + "plasma": { + "elements": [ + { + "name": "north", + "from": [-8, 3, -8], + "to": [8, 8, -3], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, -8]}, + "faces": { + "north": {"uv": [1.25, 0, 5.25, 2.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [5.25, 2.5, 6.5, 5], "rotation": 90, "texture": "#2"}, + "west": {"uv": [0, 2.5, 1.25, 5], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 2.5, 5.25, 5], "texture": "#2"} + } + }, + { + "name": "south", + "from": [-8, 3, 3], + "to": [8, 8, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, 3]}, + "faces": { + "east": {"uv": [5.25, 8, 6.5, 10.5], "rotation": 90, "texture": "#2"}, + "south": {"uv": [1.25, 10.5, 5.25, 13], "texture": "#2"}, + "west": {"uv": [0, 8, 1.25, 10.5], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 8, 5.25, 10.5], "texture": "#2"} + } + }, + { + "name": "west", + "from": [-8, 3, -3], + "to": [-3, 8, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, -3]}, + "faces": { + "west": {"uv": [0, 5, 1.25, 8], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 5, 2.5, 8], "texture": "#2"} + } + }, + { + "name": "east", + "from": [3, 3, -3], + "to": [8, 8, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 3, -3]}, + "faces": { + "east": {"uv": [5.25, 5, 6.5, 8], "rotation": 90, "texture": "#2"}, + "up": {"uv": [4, 5, 5.25, 8], "texture": "#2"} + } + } + ], + "offset": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1.05, + "speed": 100, + "texture_scale": 32 + }, + "arcs": { + "origins": [ + { + "x": 0.35, + "y": 0.3, + "z": 0.35 + }, + { + "x": -0.35, + "y": 0.3, + "z": 0.35 + }, + { + "x": -0.35, + "y": 0.3, + "z": -0.35 + }, + { + "x": 0.35, + "y": 0.3, + "z": -0.35 + }, + { + "x": 0.35, + "y": 0.3, + "z": 0 + }, + { + "x": -0.35, + "y": 0.3, + "z": 0 + }, + { + "x": 0, + "y": 0.3, + "z": 0.35 + }, + { + "x": 0, + "y": 0.3, + "z": -0.35 + } + ], + "width_scale": 0.25, + "min_variance": 0.2, + "max_variance": 0.3, + "duration": 3, + "count": 3, + "min_segments": 2, + "max_segments": 4, + "segment_splits": 5 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla/tesla_coil.json b/src/main/resources/assets/extended_industrialization/models/tesla/tesla_coil.json new file mode 100644 index 00000000..266f9af8 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/tesla/tesla_coil.json @@ -0,0 +1,137 @@ +{ + "loader": "extended_industrialization:tesla", + "plasma": { + "elements": [ + { + "name": "north", + "from": [-8, 3, -8], + "to": [8, 8, -3], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, -8]}, + "faces": { + "north": {"uv": [1.25, 0, 5.25, 2.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [5.25, 2.5, 6.5, 5], "rotation": 90, "texture": "#2"}, + "west": {"uv": [0, 2.5, 1.25, 5], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 2.5, 5.25, 5], "texture": "#2"} + } + }, + { + "name": "south", + "from": [-8, 3, 3], + "to": [8, 8, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, 3]}, + "faces": { + "east": {"uv": [5.25, 8, 6.5, 10.5], "rotation": 90, "texture": "#2"}, + "south": {"uv": [1.25, 10.5, 5.25, 13], "texture": "#2"}, + "west": {"uv": [0, 8, 1.25, 10.5], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 8, 5.25, 10.5], "texture": "#2"} + } + }, + { + "name": "west", + "from": [-8, 3, -3], + "to": [-3, 8, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, -3]}, + "faces": { + "west": {"uv": [0, 5, 1.25, 8], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 5, 2.5, 8], "texture": "#2"} + } + }, + { + "name": "east", + "from": [3, 3, -3], + "to": [8, 8, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 3, -3]}, + "faces": { + "east": {"uv": [5.25, 5, 6.5, 8], "rotation": 90, "texture": "#2"}, + "up": {"uv": [4, 5, 5.25, 8], "texture": "#2"} + } + } + ], + "offset": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1.05, + "speed": 100, + "texture_scale": 32 + }, + "arcs": { + "random_bounds": { + "include": { + "min": { + "x": -1.5, + "y": -0.5, + "z": -1.5 + }, + "max": { + "x": 1.5, + "y": 1.5, + "z": 1.5 + } + }, + "exclude": { + "min": { + "x": -1, + "y": -0.5, + "z": -1 + }, + "max": { + "x": 1, + "y": 1, + "z": 1 + } + } + }, + "origins": [ + { + "x": 0.35, + "y": 0.3, + "z": 0.35 + }, + { + "x": -0.35, + "y": 0.3, + "z": 0.35 + }, + { + "x": -0.35, + "y": 0.3, + "z": -0.35 + }, + { + "x": 0.35, + "y": 0.3, + "z": -0.35 + }, + { + "x": 0.35, + "y": 0.3, + "z": 0 + }, + { + "x": -0.35, + "y": 0.3, + "z": 0 + }, + { + "x": 0, + "y": 0.3, + "z": 0.35 + }, + { + "x": 0, + "y": 0.3, + "z": -0.35 + } + ], + "width_scale": 0.25, + "min_variance": 0.2, + "max_variance": 0.3, + "duration": 3, + "count": 3, + "min_segments": 1, + "max_segments": 2, + "segment_splits": 5 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla/tesla_hatch.json b/src/main/resources/assets/extended_industrialization/models/tesla/tesla_hatch.json new file mode 100644 index 00000000..3b4308b6 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/tesla/tesla_hatch.json @@ -0,0 +1,81 @@ +{ + "loader": "extended_industrialization:tesla", + "plasma": { + "elements": [ + { + "name": "north_south_middle", + "from": [-2, -3, -8], + "to": [2, 3, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [-2, -3, -8]}, + "color": 2, + "faces": { + "north": {"uv": [0.25, 3, 1.25, 6], "texture": "#missing"}, + "south": {"uv": [0.25, 3, 1.25, 6], "texture": "#missing"} + } + }, + { + "name": "north_south_left", + "from": [2, -2, -8], + "to": [3, 2, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [2, -2, -8]}, + "color": 2, + "faces": { + "north": {"uv": [0, 3.5, 0.25, 5.5], "texture": "#missing"}, + "south": {"uv": [1.25, 3.5, 1.5, 5.5], "texture": "#missing"} + } + }, + { + "name": "north_south_right", + "from": [-3, -2, -8], + "to": [-2, 2, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [-3, -2, -8]}, + "color": 2, + "faces": { + "north": {"uv": [1.25, 3.5, 1.5, 5.5], "texture": "#missing"}, + "south": {"uv": [0, 3.5, 0.25, 5.5], "texture": "#missing"} + } + }, + { + "name": "west_east_middle", + "from": [-8, -3, -2], + "to": [8, 3, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, -3, -2]}, + "color": 2, + "faces": { + "east": {"uv": [0.25, 0, 1.25, 3], "texture": "#missing"}, + "west": {"uv": [0.25, 0, 1.25, 3], "texture": "#missing"} + } + }, + { + "name": "west_east_left", + "from": [-8, -2, -3], + "to": [8, 2, -2], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, -2, -3]}, + "color": 2, + "faces": { + "east": {"uv": [1.25, 0.5, 1.5, 2.5], "texture": "#missing"}, + "west": {"uv": [0, 0.5, 0.25, 2.5], "texture": "#missing"} + } + }, + { + "name": "west_east_right", + "from": [-8, -2, 2], + "to": [8, 2, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, -2, 2]}, + "color": 2, + "faces": { + "east": {"uv": [0, 0.5, 0.25, 2.5], "texture": "#missing"}, + "west": {"uv": [1.25, 0.5, 1.5, 2.5], "texture": "#missing"} + } + } + ], + "offset": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1.05, + "speed": 100, + "texture_scale": 48 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla/tesla_receiver.json b/src/main/resources/assets/extended_industrialization/models/tesla/tesla_receiver.json new file mode 100644 index 00000000..fb2dc90b --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/tesla/tesla_receiver.json @@ -0,0 +1,59 @@ +{ + "loader": "extended_industrialization:tesla", + "plasma": { + "elements": [ + { + "name": "north", + "from": [-8, 3, -8], + "to": [8, 8, -3], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, -8]}, + "faces": { + "north": {"uv": [1.25, 0, 5.25, 2.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [5.25, 2.5, 6.5, 5], "rotation": 90, "texture": "#2"}, + "west": {"uv": [0, 2.5, 1.25, 5], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 2.5, 5.25, 5], "texture": "#2"} + } + }, + { + "name": "south", + "from": [-8, 3, 3], + "to": [8, 8, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, 3]}, + "faces": { + "east": {"uv": [5.25, 8, 6.5, 10.5], "rotation": 90, "texture": "#2"}, + "south": {"uv": [1.25, 10.5, 5.25, 13], "texture": "#2"}, + "west": {"uv": [0, 8, 1.25, 10.5], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 8, 5.25, 10.5], "texture": "#2"} + } + }, + { + "name": "west", + "from": [-8, 3, -3], + "to": [-3, 8, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, 3, -3]}, + "faces": { + "west": {"uv": [0, 5, 1.25, 8], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1.25, 5, 2.5, 8], "texture": "#2"} + } + }, + { + "name": "east", + "from": [3, 3, -3], + "to": [8, 8, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 3, -3]}, + "faces": { + "east": {"uv": [5.25, 5, 6.5, 8], "rotation": 90, "texture": "#2"}, + "up": {"uv": [4, 5, 5.25, 8], "texture": "#2"} + } + } + ], + "offset": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1.05, + "speed": 100, + "texture_scale": 32 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla/tesla_tower.json b/src/main/resources/assets/extended_industrialization/models/tesla/tesla_tower.json new file mode 100644 index 00000000..41894652 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/models/tesla/tesla_tower.json @@ -0,0 +1,130 @@ +{ + "loader": "extended_industrialization:tesla", + "plasma": { + "elements": [ + { + "name": "bottom", + "from": [-4.8, -8, -4.8], + "to": [4.8, -4.8, 4.8], + "faces": { + "north": {"uv": [4.5, 6, 6.75, 7.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [7.5, 6, 6.75, 1.5], "rotation": 90, "texture": "#0"}, + "south": {"uv": [4.5, 0, 6.75, 1.5], "texture": "#0"}, + "west": {"uv": [3.75, 1.5, 4.5, 6], "rotation": 90, "texture": "#0"}, + "down": {"uv": [4.5, 1.5, 6.775, 6.05], "texture": "#0"} + } + }, + { + "name": "top", + "from": [-4.8, 4.8, -4.8], + "to": [4.8, 8, 4.8], + "faces": { + "north": {"uv": [6.75, 1.5, 4.5, 0], "texture": "#0"}, + "east": {"uv": [6.75, 1.5, 7.5, 6], "rotation": 90, "texture": "#0"}, + "south": {"uv": [4.5, 6, 6.75, 7.5], "texture": "#0"}, + "west": {"uv": [4.5, 6, 3.75, 1.5], "rotation": 90, "texture": "#0"}, + "up": {"uv": [4.5, 1.5, 6.775, 6.05], "texture": "#0"} + } + }, + { + "name": "west", + "from": [-8, -4.8, -4.8], + "to": [-4.8, 4.8, 4.8], + "faces": { + "north": {"uv": [0, 9, 0.75, 13.5], "texture": "#0"}, + "south": {"uv": [3, 9, 3.75, 13.5], "texture": "#0"}, + "west": {"uv": [0.75, 9, 3, 13.5], "texture": "#0"}, + "up": {"uv": [0.75, 7.5, 3, 9], "rotation": 90, "texture": "#0"}, + "down": {"uv": [3, 15, 0.75, 13.5], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "east", + "from": [4.8, -4.8, -4.8], + "to": [8, 4.8, 4.8], + "faces": { + "north": {"uv": [10.5, 9, 11.25, 13.5], "texture": "#0"}, + "east": {"uv": [8.25, 9, 10.5, 13.5], "texture": "#0"}, + "south": {"uv": [7.5, 9, 8.25, 13.5], "texture": "#0"}, + "up": {"uv": [10.5, 9, 8.25, 7.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8.25, 13.5, 10.5, 15], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "north", + "from": [-4.8, -4.8, -8], + "to": [4.8, 4.8, -4.8], + "faces": { + "north": {"uv": [4.5, 9, 6.75, 13.5], "texture": "#0"}, + "east": {"uv": [7.5, 9, 6.75, 13.5], "texture": "#0"}, + "west": {"uv": [4.5, 9, 3.75, 13.5], "texture": "#0"}, + "up": {"uv": [6.75, 9, 4.5, 7.5], "texture": "#0"}, + "down": {"uv": [6.75, 15, 4.5, 13.5], "texture": "#0"} + } + }, + { + "name": "south", + "from": [-4.8, -4.8, 4.8], + "to": [4.8, 4.8, 8], + "faces": { + "east": {"uv": [14.25, 9, 15, 13.5], "texture": "#0"}, + "south": {"uv": [12, 9, 14.25, 13.5], "texture": "#0"}, + "west": {"uv": [11.25, 9, 12, 13.5], "texture": "#0"}, + "up": {"uv": [12, 7.5, 14.25, 9], "texture": "#0"}, + "down": {"uv": [12, 13.5, 14.25, 15], "texture": "#0"} + } + } + ], + "offset": { + "x": 0, + "y": 14, + "z": 3 + }, + "scale": 5.25, + "speed": 60, + "texture_scale": 48 + }, + "arcs": { + "random_bounds": { + "include": { + "min": { + "x": -10, + "y": 4, + "z": -7 + }, + "max": { + "x": 10, + "y": 24, + "z": 13 + } + }, + "exclude": { + "min": { + "x": -3, + "y": 11, + "z": 0 + }, + "max": { + "x": 3, + "y": 17, + "z": 6 + } + } + }, + "origins": [ + { + "x": 0, + "y": 14, + "z": 3 + } + ], + "width_scale": 1, + "min_variance": 0.5, + "max_variance": 1.5, + "duration": 3, + "count": 6, + "min_segments": 3, + "max_segments": 5, + "segment_splits": 10 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_coil.json b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_coil.json deleted file mode 100644 index eb531ae1..00000000 --- a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_coil.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "loader": "neoforge:elements", - "elements": [ - { - "name": "north", - "from": [0, 11, 0], - "to": [16, 16, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 11, 0]}, - "faces": { - "north": {"uv": [1.25, 0, 5.25, 2.5], "rotation": 180, "texture": "#ignored"}, - "east": {"uv": [5.25, 2.5, 6.5, 5], "rotation": 90, "texture": "#ignored"}, - "west": {"uv": [0, 2.5, 1.25, 5], "rotation": 270, "texture": "#ignored"}, - "up": {"uv": [1.25, 2.5, 5.25, 5], "texture": "#ignored"} - } - }, - { - "name": "south", - "from": [0, 11, 11], - "to": [16, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 11, 11]}, - "faces": { - "east": {"uv": [5.25, 8, 6.5, 10.5], "rotation": 90, "texture": "#ignored"}, - "south": {"uv": [1.25, 10.5, 5.25, 13], "texture": "#ignored"}, - "west": {"uv": [0, 8, 1.25, 10.5], "rotation": 270, "texture": "#ignored"}, - "up": {"uv": [1.25, 8, 5.25, 10.5], "texture": "#ignored"} - } - }, - { - "name": "west", - "from": [0, 11, 5], - "to": [5, 16, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 11, 5]}, - "faces": { - "west": {"uv": [0, 5, 1.25, 8], "rotation": 270, "texture": "#ignored"}, - "up": {"uv": [1.25, 5, 2.5, 8], "texture": "#ignored"} - } - }, - { - "name": "east", - "from": [11, 11, 5], - "to": [16, 16, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [11, 11, 5]}, - "faces": { - "east": {"uv": [5.25, 5, 6.5, 8], "rotation": 90, "texture": "#ignored"}, - "up": {"uv": [4, 5, 5.25, 8], "texture": "#ignored"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_hatch.json b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_hatch.json deleted file mode 100644 index ddc3e233..00000000 --- a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_hatch.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "loader": "neoforge:elements", - "elements": [ - { - "name": "north_south_middle", - "from": [6, 5, 0], - "to": [10, 11, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 5, 0]}, - "color": 2, - "faces": { - "north": {"uv": [0.25, 3, 1.25, 6], "texture": "#missing"}, - "south": {"uv": [0.25, 3, 1.25, 6], "texture": "#missing"} - } - }, - { - "name": "north_south_left", - "from": [10, 6, 0], - "to": [11, 10, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 6, 0]}, - "color": 2, - "faces": { - "north": {"uv": [0, 3.5, 0.25, 5.5], "texture": "#missing"}, - "south": {"uv": [1.25, 3.5, 1.5, 5.5], "texture": "#missing"} - } - }, - { - "name": "north_south_right", - "from": [5, 6, 0], - "to": [6, 10, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [5, 6, 0]}, - "color": 2, - "faces": { - "north": {"uv": [1.25, 3.5, 1.5, 5.5], "texture": "#missing"}, - "south": {"uv": [0, 3.5, 0.25, 5.5], "texture": "#missing"} - } - }, - { - "name": "west_east_middle", - "from": [0, 5, 6], - "to": [16, 11, 10], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 5, 6]}, - "color": 2, - "faces": { - "east": {"uv": [0.25, 0, 1.25, 3], "texture": "#missing"}, - "west": {"uv": [0.25, 0, 1.25, 3], "texture": "#missing"} - } - }, - { - "name": "west_east_left", - "from": [0, 6, 5], - "to": [16, 10, 6], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 5]}, - "color": 2, - "faces": { - "east": {"uv": [1.25, 0.5, 1.5, 2.5], "texture": "#missing"}, - "west": {"uv": [0, 0.5, 0.25, 2.5], "texture": "#missing"} - } - }, - { - "name": "west_east_right", - "from": [0, 6, 10], - "to": [16, 10, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 10]}, - "color": 2, - "faces": { - "east": {"uv": [0, 0.5, 0.25, 2.5], "texture": "#missing"}, - "west": {"uv": [1.25, 0.5, 1.5, 2.5], "texture": "#missing"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_tower.json b/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_tower.json deleted file mode 100644 index 1da21cdf..00000000 --- a/src/main/resources/assets/extended_industrialization/models/tesla_plasma/tesla_tower.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "loader": "neoforge:elements", - "elements": [ - { - "name": "bottom", - "from": [-4.8, -8, -4.8], - "to": [4.8, -4.8, 4.8], - "faces": { - "north": {"uv": [4.5, 6, 6.75, 7.5], "rotation": 180, "texture": "#0"}, - "east": {"uv": [7.5, 6, 6.75, 1.5], "rotation": 90, "texture": "#0"}, - "south": {"uv": [4.5, 0, 6.75, 1.5], "texture": "#0"}, - "west": {"uv": [3.75, 1.5, 4.5, 6], "rotation": 90, "texture": "#0"}, - "down": {"uv": [4.5, 1.5, 6.775, 6.05], "texture": "#0"} - } - }, - { - "name": "top", - "from": [-4.8, 4.8, -4.8], - "to": [4.8, 8, 4.8], - "faces": { - "north": {"uv": [6.75, 1.5, 4.5, 0], "texture": "#0"}, - "east": {"uv": [6.75, 1.5, 7.5, 6], "rotation": 90, "texture": "#0"}, - "south": {"uv": [4.5, 6, 6.75, 7.5], "texture": "#0"}, - "west": {"uv": [4.5, 6, 3.75, 1.5], "rotation": 90, "texture": "#0"}, - "up": {"uv": [4.5, 1.5, 6.775, 6.05], "texture": "#0"} - } - }, - { - "name": "west", - "from": [-8, -4.8, -4.8], - "to": [-4.8, 4.8, 4.8], - "faces": { - "north": {"uv": [0, 9, 0.75, 13.5], "texture": "#0"}, - "south": {"uv": [3, 9, 3.75, 13.5], "texture": "#0"}, - "west": {"uv": [0.75, 9, 3, 13.5], "texture": "#0"}, - "up": {"uv": [0.75, 7.5, 3, 9], "rotation": 90, "texture": "#0"}, - "down": {"uv": [3, 15, 0.75, 13.5], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "east", - "from": [4.8, -4.8, -4.8], - "to": [8, 4.8, 4.8], - "faces": { - "north": {"uv": [10.5, 9, 11.25, 13.5], "texture": "#0"}, - "east": {"uv": [8.25, 9, 10.5, 13.5], "texture": "#0"}, - "south": {"uv": [7.5, 9, 8.25, 13.5], "texture": "#0"}, - "up": {"uv": [10.5, 9, 8.25, 7.5], "rotation": 90, "texture": "#0"}, - "down": {"uv": [8.25, 13.5, 10.5, 15], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "north", - "from": [-4.8, -4.8, -8], - "to": [4.8, 4.8, -4.8], - "faces": { - "north": {"uv": [4.5, 9, 6.75, 13.5], "texture": "#0"}, - "east": {"uv": [7.5, 9, 6.75, 13.5], "texture": "#0"}, - "west": {"uv": [4.5, 9, 3.75, 13.5], "texture": "#0"}, - "up": {"uv": [6.75, 9, 4.5, 7.5], "texture": "#0"}, - "down": {"uv": [6.75, 15, 4.5, 13.5], "texture": "#0"} - } - }, - { - "name": "south", - "from": [-4.8, -4.8, 4.8], - "to": [4.8, 4.8, 8], - "faces": { - "east": {"uv": [14.25, 9, 15, 13.5], "texture": "#0"}, - "south": {"uv": [12, 9, 14.25, 13.5], "texture": "#0"}, - "west": {"uv": [11.25, 9, 12, 13.5], "texture": "#0"}, - "up": {"uv": [12, 7.5, 14.25, 9], "texture": "#0"}, - "down": {"uv": [12, 13.5, 14.25, 15], "texture": "#0"} - } - } - ] -} \ No newline at end of file From 0bf3d6109894bc081f4cc8915a61d180c83933b3 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 13 Jan 2025 06:00:47 -0500 Subject: [PATCH 143/159] Improve performance of tesla arc rendering by registering a buffer --- .../EIClientRenderTypes.java | 11 +++++++++++ .../client/ber/tesla/arc/TeslaArcRenderer.java | 12 ++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java b/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java index 2a01ba08..6d0c3d09 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClientRenderTypes.java @@ -5,12 +5,17 @@ import net.minecraft.Util; import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderType; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RegisterRenderBuffersEvent; import net.swedz.extended_industrialization.client.shader.TeslaPlasmaTextureStateShard; import java.util.function.BiFunction; import static net.minecraft.client.renderer.RenderStateShard.*; +@EventBusSubscriber(modid = EI.ID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public final class EIClientRenderTypes { public static final RenderType TESLA_ARC = RenderType.create( @@ -51,4 +56,10 @@ private static RenderType createTeslaPlasma(float scale, float speed) .createCompositeState(false) ); } + + @SubscribeEvent + private static void onRegisterRenderBuffers(RegisterRenderBuffersEvent event) + { + event.registerRenderBuffer(TESLA_ARC); + } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderer.java index e9c9ea60..efb07f7c 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/arc/TeslaArcRenderer.java @@ -1,5 +1,6 @@ package net.swedz.extended_industrialization.client.ber.tesla.arc; +import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.util.Mth; @@ -27,10 +28,13 @@ public static void renderArc(PoseStack matrices, VertexConsumer consumer, return; } - List positions = points.stream() - .map(TeslaArcPoint::matrixPosition) - .peek((point) -> point.mul(pose)) - .toList(); + List positions = Lists.newArrayList(); + for(TeslaArcPoint point : points) + { + var matrixPosition = point.matrixPosition(); + matrixPosition.mul(pose); + positions.add(matrixPosition); + } int count = points.size() - 1; float increment = 1f / count; From ac023da4238402d4598a40e219ec453de4c92f1a Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 13 Jan 2025 06:06:31 -0500 Subject: [PATCH 144/159] Use new config api for client config --- .../extended_industrialization/EIClient.java | 24 +++++++++++++-- .../EIClientConfig.java | 30 +++++-------------- .../client/ber/tesla/TeslaPartRenderer.java | 4 +-- .../proxy/EIClientProxy.java | 6 ++-- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 5055ea68..2e569327 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -26,7 +26,6 @@ import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; -import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.client.event.InputEvent; import net.neoforged.neoforge.client.event.ModelEvent; @@ -48,6 +47,8 @@ import net.swedz.extended_industrialization.item.tooltip.SteamChainsawTooltipComponent; import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; import net.swedz.extended_industrialization.network.packet.ModifyElectricToolSpeedPacket; +import net.swedz.tesseract.neoforge.api.Assert; +import net.swedz.tesseract.neoforge.config.ConfigManager; import net.swedz.tesseract.neoforge.item.DynamicDyedItem; import net.swedz.tesseract.neoforge.registry.holder.ItemHolder; @@ -57,8 +58,7 @@ public final class EIClient { public EIClient(IEventBus bus, ModContainer container) { - container.registerConfig(ModConfig.Type.CLIENT, EIClientConfig.SPEC); - bus.addListener(FMLCommonSetupEvent.class, (event) -> EIClientConfig.loadConfig()); + setupConfig(bus, container); EIKeybinds.init(bus); @@ -93,6 +93,24 @@ public EIClient(IEventBus bus, ModContainer container) }); } + private static EIClientConfig CONFIG; + + public static EIClientConfig config() + { + Assert.notNull(CONFIG, "Config not yet loaded"); + return CONFIG; + } + + private static void setupConfig(IEventBus bus, ModContainer container) + { + CONFIG = new ConfigManager() + .includeDefaultValueComments() + .build(EIClientConfig.class) + .register(container, ModConfig.Type.CLIENT) + .listenToLoad(bus) + .config(); + } + @SubscribeEvent private static void registerItemProperties(FMLClientSetupEvent event) { diff --git a/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java b/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java index 30a85a89..81d0462a 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java @@ -1,30 +1,14 @@ package net.swedz.extended_industrialization; -import net.neoforged.neoforge.common.ModConfigSpec; +import net.swedz.tesseract.neoforge.config.annotation.ConfigComment; +import net.swedz.tesseract.neoforge.config.annotation.ConfigKey; -public final class EIClientConfig +public interface EIClientConfig { - private static final ModConfigSpec.Builder BUILDER; - - private static final ModConfigSpec.BooleanValue RENDER_TESLA_ANIMATIONS; - - public static final ModConfigSpec SPEC; - - static + @ConfigKey("render_tesla_animations") + @ConfigComment("Whether tesla animations should be rendered or not") + default boolean renderTeslaAnimations() { - BUILDER = new ModConfigSpec.Builder(); - - RENDER_TESLA_ANIMATIONS = BUILDER - .comment("Whether tesla animations should be rendered or not") - .define("render_tesla_animations", true); - - SPEC = BUILDER.build(); - } - - public static boolean renderTeslaAnimations; - - public static void loadConfig() - { - renderTeslaAnimations = RENDER_TESLA_ANIMATIONS.get(); + return true; } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java index 831d9f52..b6194e68 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java @@ -18,7 +18,7 @@ import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.client.model.data.ModelData; import net.neoforged.neoforge.client.model.renderable.BakedModelRenderable; -import net.swedz.extended_industrialization.EIClientConfig; +import net.swedz.extended_industrialization.EIClient; import net.swedz.extended_industrialization.EIClientRenderTypes; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; @@ -204,7 +204,7 @@ private static void renderPlasma(MachineBlockEntity machine, TeslaBakedModel tes static void render(MachineBlockEntity machine, float partialTick, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) { renderHighlight(machine, partialTick, matrices, buffer, light, overlay); - if(EIClientConfig.renderTeslaAnimations && machine instanceof TeslaBehavior behavior) + if(EIClient.config().renderTeslaAnimations() && machine instanceof TeslaBehavior behavior) { var tesla = getTeslaModel(behavior.getTeslaModelLocation()); renderArcBounds(machine, tesla, matrices, buffer); diff --git a/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java b/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java index c9e0e2f0..e69e3df4 100644 --- a/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java +++ b/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java @@ -2,7 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.phys.Vec3; -import net.swedz.extended_industrialization.EIClientConfig; +import net.swedz.extended_industrialization.EIClient; import net.swedz.extended_industrialization.client.ber.tesla.TeslaPartRenderer; import net.swedz.tesseract.neoforge.proxy.ProxyEntrypoint; import net.swedz.tesseract.neoforge.proxy.ProxyEnvironment; @@ -13,7 +13,7 @@ public class EIClientProxy extends EIProxy @Override public void tickTesla(BlockPos blockPos) { - if(EIClientConfig.renderTeslaAnimations) + if(EIClient.config().renderTeslaAnimations()) { var arcInstance = TeslaPartRenderer.getArcInstance(blockPos); if(arcInstance != null) @@ -26,7 +26,7 @@ public void tickTesla(BlockPos blockPos) @Override public void createTeslaArc(BlockPos blockPos, Vec3 target) { - if(EIClientConfig.renderTeslaAnimations) + if(EIClient.config().renderTeslaAnimations()) { var arcInstance = TeslaPartRenderer.getArcInstance(blockPos); if(arcInstance != null) From 75f3452d2e70159ab40aeeeca30ce0089e5e2aca Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 13 Jan 2025 06:09:34 -0500 Subject: [PATCH 145/159] Only render sparks from lethal coil if rendering is enabled --- .../packet/EntitiesElectrocutedPacket.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java index a3f8a01a..0787727a 100644 --- a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java +++ b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java @@ -13,6 +13,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.EIClient; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.network.EICustomPacket; import net.swedz.extended_industrialization.proxy.EIProxy; @@ -44,17 +45,20 @@ public void handle(PacketContext context) return; } - for(int entityId : entityIds) + if(EIClient.config().renderTeslaAnimations()) { - var entity = level.getEntity(entityId); - if(entity != null) + for(int entityId : entityIds) { - Vec3 pos = entity.getBoundingBox().getCenter(); - for(int i = 0; i < 12; i++) + var entity = level.getEntity(entityId); + if(entity != null) { - spark(level, pos); + Vec3 pos = entity.getBoundingBox().getCenter(); + for(int i = 0; i < 12; i++) + { + spark(level, pos); + } + Proxies.get(EIProxy.class).createTeslaArc(origin, pos); } - Proxies.get(EIProxy.class).createTeslaArc(origin, pos); } } From 6d769f9276e02f6f1dc018cd41c99bd315cafb37 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 05:18:07 -0500 Subject: [PATCH 146/159] Add musical component to tesla coil --- .../lang/en_us.json | 1 + .../swedz/extended_industrialization/EI.java | 1 + .../extended_industrialization/EISounds.java | 25 +++++ .../extended_industrialization/EIText.java | 1 + .../client/sound/TeslaCoilSingingSound.java | 52 +++++++++ .../tesla/TeslaCoilMachineBlockEntity.java | 32 +++++- .../tesla/SingingTeslaCoilComponent.java | 103 ++++++++++++++++++ .../teslanetwork/TeslaNetworkBar.java | 39 ++++++- .../teslanetwork/TeslaNetworkBarClient.java | 19 +++- .../proxy/EIClientProxy.java | 9 ++ .../proxy/EIProxy.java | 5 + .../extended_industrialization/sounds.json | 10 ++ .../sounds/block/tesla_coil/loop.ogg | Bin 0 -> 48578 bytes .../gui/container/tesla_network_bar.png | Bin 805 -> 974 bytes 14 files changed, 287 insertions(+), 10 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/EISounds.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java create mode 100644 src/main/resources/assets/extended_industrialization/sounds.json create mode 100644 src/main/resources/assets/extended_industrialization/sounds/block/tesla_coil/loop.ogg diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 136b8865..2703a399 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -251,6 +251,7 @@ "text.extended_industrialization.tesla_network_receiver_no_link": "Not linked to any transmitter", "text.extended_industrialization.tesla_network_receiver_too_far": "Transmitter is too far", "text.extended_industrialization.tesla_network_receiver_unloaded": "Transmitter is not loaded", + "text.extended_industrialization.tesla_network_singing_note": "Note: %s", "text.extended_industrialization.tesla_network_transmitter_consuming": "Consuming: %s", "text.extended_industrialization.tesla_network_transmitter_drain": "Drain: %s", "text.extended_industrialization.tesla_network_transmitter_receivers": "Receivers: %d", diff --git a/src/main/java/net/swedz/extended_industrialization/EI.java b/src/main/java/net/swedz/extended_industrialization/EI.java index 38969912..29dc1e6c 100644 --- a/src/main/java/net/swedz/extended_industrialization/EI.java +++ b/src/main/java/net/swedz/extended_industrialization/EI.java @@ -69,6 +69,7 @@ public EI(IEventBus bus, ModContainer container) EIMaterialRegistry.init(); EICreativeTabs.init(bus); EIRecipeTypes.init(bus); + EISounds.init(bus); EIModularSlotPanelSlots.init(); bus.register(new DatagenDelegator()); diff --git a/src/main/java/net/swedz/extended_industrialization/EISounds.java b/src/main/java/net/swedz/extended_industrialization/EISounds.java new file mode 100644 index 00000000..a45ea27e --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/EISounds.java @@ -0,0 +1,25 @@ +package net.swedz.extended_industrialization; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.sounds.SoundEvent; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + +public final class EISounds +{ + private static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(BuiltInRegistries.SOUND_EVENT, EI.ID); + + public static final Supplier TESLA_COIL_LOOP = createVariableRangeEvent("block.tesla_coil.loop"); + + private static Supplier createVariableRangeEvent(String name) + { + return SOUND_EVENTS.register(name, () -> SoundEvent.createVariableRangeEvent(EI.id(name))); + } + + public static void init(IEventBus bus) + { + SOUND_EVENTS.register(bus); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index b1fcbf6d..b35b8e13 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -134,6 +134,7 @@ public enum EIText implements MICompatibleTranslatableTextEnum TESLA_NETWORK_RECEIVER_NO_LINK("Not linked to any transmitter"), TESLA_NETWORK_RECEIVER_TOO_FAR("Transmitter is too far"), TESLA_NETWORK_RECEIVER_UNLOADED("Transmitter is not loaded"), + TESLA_NETWORK_SINGING_NOTE("Note: %s"), TESLA_NETWORK_TRANSMITTER_CONSUMING("Consuming: %s"), TESLA_NETWORK_TRANSMITTER_DRAIN("Drain: %s"), TESLA_NETWORK_TRANSMITTER_RECEIVERS("Receivers: %d"), diff --git a/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java b/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java new file mode 100644 index 00000000..5585e04d --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java @@ -0,0 +1,52 @@ +package net.swedz.extended_industrialization.client.sound; + +import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; +import net.minecraft.client.resources.sounds.SoundInstance; +import net.minecraft.sounds.SoundSource; +import net.swedz.extended_industrialization.EISounds; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; + +public final class TeslaCoilSingingSound extends AbstractTickableSoundInstance +{ + private final TeslaCoilMachineBlockEntity machine; + + public TeslaCoilSingingSound(TeslaCoilMachineBlockEntity machine) + { + super(EISounds.TESLA_COIL_LOOP.get(), SoundSource.BLOCKS, SoundInstance.createUnseededRandom()); + + var pos = machine.getBlockPos().getCenter(); + + this.x = pos.x(); + this.y = pos.y(); + this.z = pos.z(); + this.looping = true; + this.volume = 0; + + this.machine = machine; + } + + @Override + public void tick() + { + if(this.isStopped()) + { + return; + } + + var singing = machine.getSingingComponent(); + if(machine.isRemoved() || !singing.shouldPlay()) + { + this.stop(); + return; + } + + volume = 1; + pitch = singing.getPitch(); + } + + @Override + public boolean canStartSilent() + { + return true; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index d4b7b8fc..29a98f9b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -28,6 +28,7 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; +import net.swedz.extended_industrialization.machines.component.tesla.SingingTeslaCoilComponent; import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; @@ -53,6 +54,8 @@ public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implem private final EnergyComponent energy; private final MIEnergyStorage insertable; + private final SingingTeslaCoilComponent singing; + private final TeslaTransmitterComponent transmitter; private long lastEnergyTransmitted; @@ -73,6 +76,8 @@ public TeslaCoilMachineBlockEntity(BEP bep) energy = new EnergyComponent(this, () -> 30 * 20 * casing.getCableTier().eu); insertable = energy.buildInsertable(casing::canInsertEu); + singing = new SingingTeslaCoilComponent(this, () -> isActive.isActive); + transmitter = new TeslaTransmitterComponent( this, List.of(energy), @@ -80,11 +85,11 @@ public TeslaCoilMachineBlockEntity(BEP bep) { CableTier tier = casing.getCableTier(); long maxTransfer = tier.getMaxTransfer(); - return TeslaTransferLimits.of(tier, maxTransfer, EI.config().teslaCoilRange(), tier.eu / 16); + return TeslaTransferLimits.of(tier, maxTransfer, EI.config().teslaCoilRange(), singing.hasNote() ? 1 : tier.eu / 16); } ); - this.registerComponents(isActive, redstoneControl, casing, energy, transmitter); + this.registerComponents(isActive, redstoneControl, casing, energy, transmitter, singing); this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); @@ -92,7 +97,11 @@ public TeslaCoilMachineBlockEntity(BEP bep) new TeslaNetworkBar.Parameters(101, 34), () -> { - if(this.hasNetwork()) + if(singing.hasNote()) + { + return Optional.of(new TeslaNetworkBar.SingingData(singing.getNote(), this.getPassiveDrain())); + } + else if(this.hasNetwork()) { TeslaNetwork network = this.getNetwork(); if(network.isTransmitterLoaded()) @@ -124,6 +133,11 @@ private void onCasingUpdate(CableTier from, CableTier to) } } + public SingingTeslaCoilComponent getSingingComponent() + { + return singing; + } + @Override public boolean shouldTeslaRender() { @@ -197,9 +211,16 @@ public void tick() if(level.isClientSide()) { Proxies.get(EIProxy.class).tickTesla(worldPosition); + singing.tickClient(); return; } + // TODO only update when the noteblock below is updated... + if(singing.updateNote()) + { + this.sync(false); + } + TeslaNetwork network = this.getNetwork(); if(!network.hasTransmitter()) { @@ -215,7 +236,10 @@ public void tick() long drained = this.extractEnergy(amountToDrain, false); if(drained == amountToDrain) { - lastEnergyTransmitted = this.transmitEnergy(this.getMaxTransfer()); + if(!singing.hasNote()) + { + lastEnergyTransmitted = this.transmitEnergy(this.getMaxTransfer()); + } active = true; } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java new file mode 100644 index 00000000..ac69dd04 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java @@ -0,0 +1,103 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +import aztech.modern_industrialization.machines.IComponent; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.NoteBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; +import net.swedz.extended_industrialization.proxy.EIProxy; +import net.swedz.tesseract.neoforge.api.Assert; +import net.swedz.tesseract.neoforge.proxy.Proxies; + +import java.util.function.Supplier; + +public final class SingingTeslaCoilComponent implements IComponent +{ + private final TeslaCoilMachineBlockEntity machine; + private final Supplier active; + + private int note = -1; + + public SingingTeslaCoilComponent(TeslaCoilMachineBlockEntity machine, Supplier active) + { + this.machine = machine; + this.active = active; + } + + public boolean shouldPlay() + { + return this.hasNote() && active.get(); + } + + public boolean hasNote() + { + return note > -1; + } + + public int getNote() + { + return note; + } + + public float getPitch() + { + return this.hasNote() ? NoteBlock.getPitchFromNote(note) : 1; + } + + private int getWorldNote() + { + if(!machine.hasLevel()) + { + return -1; + } + BlockPos below = machine.getBlockPos().below(); + BlockState state = machine.getLevel().getBlockState(below); + return state.is(Blocks.NOTE_BLOCK) ? state.getValue(NoteBlock.NOTE) : -1; + } + + private boolean running; + + public void tickClient() + { + Assert.that(machine.hasLevel() && machine.getLevel().isClientSide()); + boolean originalRunning = running; + running = this.shouldPlay(); + if(running && !originalRunning) + { + Proxies.get(EIProxy.class).startTeslaCoilSingingSound(machine); + } + } + + public boolean updateNote() + { + Assert.that(machine.hasLevel() && !machine.getLevel().isClientSide()); + int originalNote = note; + note = this.getWorldNote(); + return originalNote != note; + } + + @Override + public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + tag.putInt("singing_note", note); + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + note = tag.getInt("singing_note"); + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java index 05a90190..275d6b6a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java @@ -80,7 +80,7 @@ public record TransmitterData( @Override public void write(RegistryFriendlyByteBuf buf) { - buf.writeBoolean(true); + buf.writeVarInt(0); buf.writeVarInt(receivers); buf.writeVarLong(energyTransmitting); @@ -103,7 +103,7 @@ public record ReceiverData( @Override public void write(RegistryFriendlyByteBuf buf) { - buf.writeBoolean(false); + buf.writeVarInt(1); buf.writeEnum(state); buf.writeOptional(linked, WorldPos.STREAM_CODEC); @@ -132,4 +132,39 @@ public int iconIndex() return 1; } } + + public record SingingData( + int note, long energyConsuming + ) implements Data + { + private static final char ZERO = '\u2080'; + private static final char ONE = '\u2081'; + private static final char TWO = '\u2082'; + + private static final String[] READABLE_NOTES = { + "F#" + ZERO, "G" + ZERO, "G#" + ZERO, "A" + ZERO, "A#" + ZERO, "B" + ZERO, "C" + ZERO, "C#" + ZERO, "D" + ZERO, "D#" + ZERO, "E" + ZERO, "F" + ZERO, + "F#" + ONE, "G" + ONE, "G#" + ONE, "A" + ONE, "A#" + ONE, "B" + ONE, "C" + ONE, "C#" + ONE, "D" + ONE, "D#" + ONE, "E" + ONE, "F" + ONE, + "F#" + TWO + }; + + public String getReadableNote() + { + return READABLE_NOTES[note]; + } + + @Override + public void write(RegistryFriendlyByteBuf buf) + { + buf.writeVarInt(2); + + buf.writeVarInt(note); + buf.writeVarLong(energyConsuming); + } + + @Override + public int iconIndex() + { + return 6; + } + } } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java index 184c1b47..41b66c0b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java @@ -41,8 +41,8 @@ public void readCurrentData(RegistryFriendlyByteBuf buf) { if(buf.readBoolean()) { - boolean transmitter = buf.readBoolean(); - if(transmitter) + int type = buf.readVarInt(); + if(type == 0) { int receivers = buf.readVarInt(); long energyTransmitting = buf.readVarLong(); @@ -51,7 +51,7 @@ public void readCurrentData(RegistryFriendlyByteBuf buf) long energyConsuming = buf.readVarLong(); data = Optional.of(new TeslaNetworkBar.TransmitterData(receivers, energyTransmitting, cableTier, energyDrain, energyConsuming)); } - else + else if(type == 1) { TeslaReceiverState state = buf.readEnum(TeslaReceiverState.class); Optional linked = buf.readOptional(WorldPos.STREAM_CODEC); @@ -62,6 +62,12 @@ public void readCurrentData(RegistryFriendlyByteBuf buf) } data = Optional.of(new TeslaNetworkBar.ReceiverData(state, linked, networkCableTier)); } + else if(type == 2) + { + int note = buf.readVarInt(); + long energyConsuming = buf.readVarLong(); + data = Optional.of(new TeslaNetworkBar.SingingData(note, energyConsuming)); + } } else { @@ -85,7 +91,7 @@ public void renderBackground(GuiGraphics guiGraphics, int x, int y) guiGraphics.blit( TESLA_NETWORK_BAR, x + params.renderX(), y + params.renderY(), - iconIndex * 18, 0, WIDTH, HEIGHT, 18 * 6, 18 + iconIndex * 18, 0, WIDTH, HEIGHT, 18 * 7, 18 ); } @@ -123,6 +129,11 @@ else if(data.get() instanceof TeslaNetworkBar.ReceiverData receiver) } } } + else if(data.get() instanceof TeslaNetworkBar.SingingData singing) + { + lines.add(EIText.TESLA_NETWORK_SINGING_NOTE.arg(singing.getReadableNote())); + lines.add(EIText.TESLA_NETWORK_TRANSMITTER_CONSUMING.arg(singing.energyConsuming(), EU_PER_TICK_PARSER)); + } } if(!lines.isEmpty()) { diff --git a/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java b/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java index e69e3df4..6f0e642f 100644 --- a/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java +++ b/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java @@ -1,9 +1,12 @@ package net.swedz.extended_industrialization.proxy; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EIClient; import net.swedz.extended_industrialization.client.ber.tesla.TeslaPartRenderer; +import net.swedz.extended_industrialization.client.sound.TeslaCoilSingingSound; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; import net.swedz.tesseract.neoforge.proxy.ProxyEntrypoint; import net.swedz.tesseract.neoforge.proxy.ProxyEnvironment; @@ -35,4 +38,10 @@ public void createTeslaArc(BlockPos blockPos, Vec3 target) } } } + + @Override + public void startTeslaCoilSingingSound(TeslaCoilMachineBlockEntity machine) + { + Minecraft.getInstance().getSoundManager().queueTickingSound(new TeslaCoilSingingSound(machine)); + } } diff --git a/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java b/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java index 77c04137..6c86004d 100644 --- a/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java +++ b/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; import net.swedz.tesseract.neoforge.proxy.Proxy; import net.swedz.tesseract.neoforge.proxy.ProxyEntrypoint; @@ -15,4 +16,8 @@ public void tickTesla(BlockPos blockPos) public void createTeslaArc(BlockPos blockPos, Vec3 target) { } + + public void startTeslaCoilSingingSound(TeslaCoilMachineBlockEntity machine) + { + } } diff --git a/src/main/resources/assets/extended_industrialization/sounds.json b/src/main/resources/assets/extended_industrialization/sounds.json new file mode 100644 index 00000000..31834d71 --- /dev/null +++ b/src/main/resources/assets/extended_industrialization/sounds.json @@ -0,0 +1,10 @@ +{ + "block.tesla_coil.loop": { + "sounds": [ + { + "name": "extended_industrialization:block/tesla_coil/loop", + "attenuation_distance": 48 + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extended_industrialization/sounds/block/tesla_coil/loop.ogg b/src/main/resources/assets/extended_industrialization/sounds/block/tesla_coil/loop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0acbe3e18b72f99537a73e678d76e0591d9a15fe GIT binary patch literal 48578 zcmagF1zc6Z*C@IV-6AF3-3^BZ0p-x$pro|Gp_G(RkdW@~mM#hD?rsI71f&rJ-bVl5 z{l0hK``x>LbLPyRHM3@B)n2pqY*lM(O#lJ-&-MAyzd{^QCOL!>;_l>PX5;!$1(7ZL zPZJNw-$Elq^`Yngx*mEyK&Z3^jB(%J|G%yQ#D9p`K)9aG>sOqrF4olcHfB11(Nil> z^K$d>a`STYQ8TMLINH2+v2?X`gtMT4%^!n5IhCiXvT_>Y@=Da2a5oDZCp56~sj7;W z^iwVIhelcoT1s-_|7w+$X_m1^`?DctOvC6Kkcwk{_4N?3EPv{Grst9hwvu+Cyv}&eQu}88yEJApjr&{>rwE=Q*RfV?k|!o#QAA0~)qIG62$8>N!m?fyP5- z_JJmZ7|h<2yY$l(rnz9S7G=G|;O(alRN~#ui&YWXEy|4)*<-F9m%-$yorEdz%;=a` zw4xY$yN*J))Bcm8|6K<)I2Rcd5(``zv3{{bj zOwg;Iu&d(>Oz_ERYAI`jmz%M!yXBm_+nl?Pep0YuqmO=Lu;F~L@n!H!;*kHOE1$K? zhxB*p)DR$x4w|sRl0!?H^BtOl7!*>509ZVbgc?1DmL(=vp}@+v!X~x;RcXD$P&NBd zHP+uIpnM=b%m&D^Nh$dMBrE*{%l~_ldezSgNP)EMb0+U|rkB&8?{i^C{Y&9~0OYBZ z278YS|1($qK36d?J%h^*#3_xODLwixCOohm0Hk=xdz{G!Kx$}kOt}c?x{A-aD$jwW zc%aDt`3m?eFW^FG(ybC~{n7Y7z5GiSe-JHkHri9HeC1sFT7OL^5RLbj$}Ixri&1}kplVla-O(1{T;PWB#IdUO#w|TB|HizHjAg9C66*9QXWrQb&$Dcn0JW%AuH<|71{sXh5HnX2b5xV0Z@t~>V9On zRzRQI<=4#`u;s^Tz*zGCX%xs*YKu?OC?tQCBqYgYkfjjRivP*DU-V;-DJK3$8apOe z$72A~1TTjspSZS`wywK_exln_L$L9@+uEGZ+FXR`laT*iu>P0k0HD$Y{ng1hvv8ii zv_KUZ^nVQgFU@f#=!+&Fh^AMprdOV1A35PyJ>{Rkms96g)+98ZAat7|veXnbo)WN} z(zcv&w_K>VG;HwEum6w2{8O8?Ik*3zIS(pA3ys`(9)tAXnv=yG`CT}YP9cU~KZemO z!8$ahI5}gtI0xf@)0|gfg-KzBAHudjL^6ja*o3B(H09V2R_r(bU(^56oM$fdU;;Hq z&V~MeXif(Y`BPAvs@auK|E*Dc0wgG0?#cgT004A+!czQeN7OYqW;6t5G&r=i#Q)D4 z143u`m8bYY!o~vt2>{T6Ob)^gbNM9WD6WUb^Mf8a8;X+MO&nB+%ZCNUriFi!W)g3V zfp%e?u4^z8$|?m$FbG9bV|Nx9DQpR&fo2a0PzL~io_?NgVwX{cfh^fk9`y9MekfCZ z?4$w*Dg zw~zyHnSk}z^kcF7iUbUb_;O2z8rF@G+frFi!dpDrJJd zs06j=>IKx{+UnYt`dZrh?w0zO+PbqoiXc=|d4W({yIy$ZU3OE#zF%Kd(p)}R{W-Owbie)xvx|Md`E^M}MQQcV z2WWHoey{U>Gq-mE%TPh-UUPACv*UiV^KiWbd2Y#G8|zT#=fUcu{bsIOHyU+qx0N{K z4P9^@4yGO%hL^$B4x;VlH-jL8$t&oX6L}NZt;UfItm{2xlYA*0nQxr}&a|XFwWM^v z+L5iRY+puQ+s8QGa!trs|B2(8P^95pL{7F-H@WeWAP7jWF30pS z@4rMJvs>zQz7g5DaLcX4Lhp+LWdrgc8~B4#*)(hj{=yIdg=U*T6PLAz8jh>6N1dm| zgF@q~0_!1i92r=C9)Ti^LuVKiF2Sb2Pm z#&BBf1FFDCm;y_E3`_}}6%1AttYKi!Gn=MiF96O8L=^+G=jb&sRH}2sHNgBktMWP> zJKOSJaBzlvVntY09g&?Q&ks_VP5Hy%#XUrZk>KE(b^-;nwhsV92l3eyS6KP%v_=F7 zFn4I3NqKwpUn@7W<>;L?D}NZAwJJUa9Q?d`9zAW96dUAEG*zEI6%MSuiBz0hxR})u=UXaSx}36 zsX@DgLXuA$I8K~LV2(?hPYm)UpTHcXEwL+(3@eHGs5CQ6kQ$7YB^Vc`z>p6*%NXRK zKW9H4r$-J>=${>Vfn|op6G9Ew;$?jtqy%Fs4ge`y?golNe$TLhZF%jy6k2)kEUzL1 zC<<2P-AM+ZH~bTv(9geigaP=33P=&>g5yH1am|LIJLLSJWh4*6VeL%|#F0TG1g8N$ ztA?RqhARUCKz}bg5X|!9CLaJAuw81fjwK)d0EpAT007q4phxss-NN-p6#@!Xe>QR zppR2P{NQ?k57`I*BOC;Px4j?$x=sF&rMX7_w`20(CG`KFMHGX6)?*#;Y28aqhW5`Z zm&f~iYi|D^Cq3!k?f>xE|J!^2Ka~va%0ZF)pBW(4j)4l?qmt=76J{aBWPeyAE)MAE zbtQo_Mxh7_VcE$G0@;)O6b5Bx0HuV51r#4pqvH%<$*vk2tPJ@H52j<<0LB60MrFvK z)vyIe5kbqZoqiZK!^s|q-Wl&j3;kW1JqAq^D2o8{wG?XKyCkP7pErkSG3Tw!8#TSP{^47mKeYi z`acKmuP_GTfv#K}i1}Y#93D8vU-vFf<3S=p(mVkEit67II?V&Q{x+uh*Z08}1Vt3_ z!3xvu(B}@)+Vg+wL{xj#4+H$M0Kj?PcAsUopSmY4C_ypklMAjH=VOg9=(8%z=OjJE zGjTlm1ezLlJ85R&>ZUO@OhW)l0Eoe+rln1RM&d+0`h*+( zI0i2kKMoXM09c3kKLY&ekw1L+U=^9$wSh=4YY~*!y@|x|7yOW+q5a#cApI@>XS2=t z5B#v%ei(*i^-qs7p8y}9kf;E^pfDe=AQUX~^YK9i_<5j0{DS;~e1bv(T!KRU0#Fel zUO^#20U;r70byZ5ekfE>Ku~~RNQg&35NstV$So`)#J5SK7$0CCC$v5TIb59i6H>s$ zl)E6&{;RfV!+pQrs%})mQhdOuTt#jQ81ggFw?HIC@YW$5l!cuBl9^)aIR5HkxZFs; zQbDHAq3_ZDdTX#XK(ozRH<)q zXHx!jC~@3cay$R}a|31Crz~}Uy7Kq1Ia3WhrC>J>@MfjRg^c5P-7%t6kN0twMv;DR z{UWH(Dv~Xz>y+EceCa?w#~C_OpBY(d^!z*djv@IIIIlW7cM?X^^&DPNWN2oXfl|^N zCaLW2@lOV`QeUy^=H~4LX)(`eu+;^Jjq<;6;yg&+Eb_+=av|hE_~pNBIEI}yFqrOS zp6a5_ef;J4_I!4ncI7tvH^ypgKb?DT(lX zl~lqmiAvuJtEk(OJpRiSs=e2l&2^QB4t7LGMIDPHr~9@eubK0CCppm(y*b%vzd%Ai zmE9|1TZEpAb*e;14&5CP>SS{A&K$|_x6xG|YT%K-by5-=U#M5W;FZvDMf4jjfebp=t!QA?`_u~X zmIy$W=S99+rRz{6E}9Vut)?(rk#m zJcMb68AfL=ap?eXNf1}h@>r%_<5aB)^_*6mC-qsgPuQ;5B_rL>Om4Z$hc}r5;U@Z7 z1T5mxi+|YsStlsAt=`&LnzYY4vwRP`JZQ3XH?DL|J)<3$T9Rl_^S~;vJFL6ge-9zh z5a``Rp?uBz6TohiM4Y!&C3AjN+wE*#6Dag-_ItpOQ?6p>OM8L$qD+IAVw%4}ZKS$(iv>INg-ki_^&`&Lc#^JBNPlVXoR9q$P1`pIv!3)BVo5Co35ni5C&YV_KTSdsDR|&QF$SFy=fy zTrh4d=~lozl!NVJK$G+svC>^@{ZB4n|2vyT$WTQY8qDPb<+`PTu@rZVSVQSa70kq+ z^}U@yGOu_N9}ZtV4`>HuMdXm_hrXr?-|Av&1#<2^t*4wN+ZSJNb-n#G-Huk2F5!jL z8D+9ptg#nUS?yGPxTpdc2}Yx_qjmU6O6iRMO2@Y4EShbX(EQ-##pTN3;@gkYlaR;! z6@vOzlYxj-#zXWb9-8DR0*JZD(Y>VST{lFJOP#8tNA(pX_i*d?SMhrPRQ2eK#i;(M zI^UB?Z@G!DsD3Bp$6tL6u@K`}0|}qcn)WweqW9xm6?qFDjGUXxL@chFLZ=j)rXox? zJtMe%uf~$JSl_>rH#RxF#mlN^u*YGMGsC(-xQ)Vl&en!P+9hjfapX>7pS^x({-Hos zlS1Vu;Il?eVn0D>A$BT}BmY7uoK_oe<-og)ultMwQQxJDf39g+OOi-ztN@qxYQ2=| z+InC`)?Pm1e4+)P$z=Rx%>g9)31}rq3iV_h&+_uy8P$qM$T5=N7z`1@vbAJwo1zX} zb_CrfZs^=OJtvn(9sP3VtNS7nBEn06Al6a_UX2Aela#ys09NO_PpWK@j2WhVc8oJi zS}W-l>g7t#Sxuwv2=AWRo~i00G_qxnAt^D+q36AmnY|@k@0kX_{@#G`4LV?N#e(>0kB|ENo*WW-S)82YSx?*gg{bDwvgU&L zT$M@1_%M~X`|tBVKdJH&4vyxnwX%jxC9v!zLcex*5rv#4A?O>V^i6$2Tv0ry%_V8u ze|2(pc%@{ggK1;SeO-QCF<@0gMCKa5KY$P}5}MP=i)kuFdZP^_8#puUv$^K14H@*k z{c`zIY3Tis_0ciZ0nrk;b7^V<5YyU!4SCE_+bpYjfITOZvM zb;_eXX5dxQ8@kCR#|*{R{@64Ly>Pd_i=FPG#AQGCCM$D=6+bpVQgA?4uL4Xp>it!w z4$PG>-dKCV((O0mI&a3#YebATxE3}>%e(8KHCKCc$7aH*kw&h_S~>zaS>GXAHh1a> zyDnLhW$&Gp)g|VevEJlV_Eyb%A7`#N^a;=Lo-5r*uvs>2mm6Q3zJX{NR6VwxY3BQ2 ziTc^ooOm2>I=9+dK8+(`4cEQ3>QNS3{GQI%mvW}ciHj9eyr+Jo$}Z6>mKZ^T0SNvG zS9S=|I0ZWP5xQjsMOsBOeTs?OFsd00OR9Vfk|8(ZA=MaPKjvo0FT9V6j}4(f948Zc zr-{9kg*f8t{^^t2Uf896lYvg?cwpv_%}T|^r`|rZQa@jdUWr2!={jTLpC3f-0~YS; zY_T0UdUtdI;a9^wE^8SU_SBb4AGIpE9B$k<;TYk0TJ-aJg+^Z}o*zuycfPD@?S1hc z#~wz9-|COF+)e;tMY(!!xS}JF54tlduhMnWu2V{k(h-m2T!D%-!)g1}xMsTB%bh~b z%^36`l>j7Wq%T>I2=zYZd-J>+w!FMqKvOjO@~SC1I5Wd8==xn3F&FvGpgF7gD0>e| zkV^h$07V@nlL>J*y6`1_)#g-yTb(19b8AGhtLUOhLh}2`ZL3}Y;s&hT}AT>G0uq1U(j zd~>QsZg7z%8RZZXWZbE=G5^Hmt>#ZNXJ;#N+Q)fOQ;~dsBK`{PH6Lr{wt>$m*o&B4TB1DMl9 zUSeaab+xzkHk^q3I^sA%W_R3IPddtZemeGS9D9aDa;0;;tF@}TJ4KRgEEQEoZ6xFI zURl>8_Yh&IdP{*Ask7`WA=QH9<;otJC>IZ9)g-27T8{>~(S+eOL9+|vKbH_H% znxu5@7^ZvHC{cf%Yt^F^28i+6U@h^NcigHG_WK8At}tnv6VLr=&=ax~S}IH{VS?jN zwLf*1=*AW?H=Ug67}@as0HOZutpmVC95lavh!>1j5j5ubMEPX`zd^ACUra^lOu1Ca zqI=C|NRlYcqpso?I>41?Map) z`4rC@Qg@oH0QlGrwqV$(UEDKLc^EOZZijvS4dG5fF zryFN)vYM#m=aD1#*{cbUS6SKZo>MI`@ohCCob@q!xa@oW3@UU_8jRIy?RpxaD?`8W zg*PV^b8QkuR&!M{EQya_lcGLqdr>7YYh2oOj_yswBsJYj9dMfHN?kthyB#Y2vV70D zy5`RMQrXX)ZoavDAgo~n<0iYl#k>}mMq8w_AIaM`8#37+cnk_v$>xj$+@QBf^J(vt zTsCoyj6<74wFiI5ZjV{Ez$eqTG!Jgc^ zL~E30KJq^<`R4j46XSI=@Yuryu+ML9#dZ<)I9}n|^JdeFEwMAmylPx*fPDF!9$l>Y zwu|M?#h1L${ZBh~@N#b(p9!&Df_Oc`Ow-g=F94UV+j|qMD*&wz18hfv>SAN0KI4asRfeAs@icW+&6oLKz1E4P-q4d<) zhS$Rb(=OBL`dU;%wO&nhMv~I4|MRCyKEvp@_8DP&-tW%Cp9H}a5GvHEyV`N6$+5QcjJ45V?@M)^0`=p_qqb9I&k*D zkS10>Q|poK$-D_SX=j7|{=V;@y(B^P4)b|qyDK~ig5V)YtQ-4`h#~NI{ z(%a+~?Lq@b&)!Gwe=?HDJf}-C^Sf1;dj!9UxnRi`iq4FhfnLR87>NBbcOd5+rjG@xKrn?;?Yx)<+)}*NA{{_f%k61sk4L z#f7zeeQ%n_*(BTVI`N=Qmi3aZ{ifa7*9VC^TCWDEi*s1m~u^q?bHyJx-bB4w)M)ZmeTHs=QmsI~mWT4#O0nNWhMh zPyeP(TGiNeX9(!iT5*011KI5hBV-U+Q4E4X@V6*1^T-JE28a;uK0M!=TK>8PW z@K^fpzyl&!l*5g*R^}Img24rTJ}5t*fQX=guz)ZaQ4r!6782kF0}VW2R6$4xgbN7r z2@4Bw3y28u@Cyp?2?_A>3k!ge3Lzn3VLq^{03Xn;13{d}(#D>9i0f3yS&#gG zX&h<07yMY|^*D_cJl?wPdTqj~D{=MR%$?wwNSEhE`gM4%EfevnUSl8M$!44Ke$x0(u#tiKeGM*`(^SKxEkV60q@Xu7 zgsi?lI`Z+`@Tn~aMk5@dIZ|Itt`VogmRq{swFHZpUtZr;g7HoF>!bE(zPrT0*<`6M z7kaoO4I=Qq?`#ff@^-sOUo$R%W(PU_I&X)d`pf4&CNY}ni=X*O!R=>KPno0IV4J%E=-tBunW|wsCy=LcOK#cYUtq3?%<>&P${YiRjVZ>RRDtjKunt z%jlHZao(3`Ja5M;WFo9j*;I7Y%9|Jb^8C{u+R}{=m&~0pFZ+%?uegos+vUYm+b-(f z{(5rx$McUcCqf3qUNBi&P-$pfdWQ%3OW^z^8ZSMbGGdobSEjSZ8nTzjy;xTbrC;jw zv@PG9TpAz0H?Iu?g|}cfa<5vA5#7MCF2uriPH0dSS>XuwagJ(#{>OW^q1R1D30O8* z1iF^ASH{ULj}(u?9C3XT0B;j)#6uE1s|&jT_|%I?rLmBgRiY{f!jkEF`z;+iu33h& zH>`XftSyj_66$BoSMF=%#t5fc1>%{NGv>TO*}j#RuOgx4;gqyR>YEGXfSfN6SDKW&7CtkBqUM-`PQHu>(jO@4EBFyr>EcGI}C!uOs{JE^ZMZoYC^TF*eYBF9IRy5!%#ID%#&qp73PeEp}J! zabTznTs*}@YhbFi&s^JAn2f3GF+TrDDi$J#!k+5E?WY2;TCNIRCb3x!9!9EY4zL_@ z;3&rInT(^ebe^1~n0BdGW?9;Zdzm#fSOG?y5jjN4hrGo6qsn+iot4I9o5Iwcy2>{^ znLj1Q=k=fQ<&--d(On`MoC+LpCLz2Sl4Zf@d=^B?gMtj$Tu~)=Bs5kUe2-kxj1!M8oAzP&xnns$p;pB3BBro%ll;P|yhTY?Ga zkC3|!s|^*ZH>bpL)qr6bO)ITEk zV6-`YgSK_L*u&4ZR}i>GUBp&)qm!JI_O`+;G7u+1rg_>=g#Kp@qoe%d zlHfB<`=quI{t*%D*yj|IJW5%?aU46m}w=HL2Et?n4AGXUt_!Nm= zS(jp<{*#Zga$8IZdt-J~wQw|Mr8R%?F4wfT<(^8(c5DOW|vxYLYEKc9i zC%W5dC^0OcB75n zm`WU5!I-;?UkPV^lx>@qOL`CgaJ#m2KVouob6-gn61S9BP;gaq#ZmQ)kn4Orag1o!^hn(q@>a#^~oQ3 zr4p89bljY}Xya&9B-N@h_5}_uL(zClf(;a{Mcs zQ8+?Z7a{c>tNnq(+yV)Q{i;2i0NHo8dLnj7v`Y%4gVdyjskQwAuH~KO$0KeBYM3{?-K!Mwekv{PRPI*fEG${Ag!f4^|Q)Tfnig|9EPX_;uGndS>?O0`uoa zXaT-bpN{Ejl$c6H@}(HW&1n({k{|J`^YtRe;mCeoow?(VOAN5>yFLnT`M zqRWSP4uZz^rif8K>{Z8I&%c6$;U9TA|C>34=ljtw@dbA>6`HT^a9uxc*Bk1EEm4(H zWlLW7swF?u%Z9bo1`Ns-yCH0)apDsVaSLzmW+E`N9p0Ozg(Tw~KvdFAc2pLa(JsWF zQY9a4w!KlgJobc2J@3}n#!}#z0PD*c9bVPYN>aVw~fT}ZR%^Lyhgv(3Cg;BEBm6B45 zF=;Nb0yEYSW!v*i%YFG(&Y^cW^mw;;dNE;JNOyM#87E5-doO*yOGa6p!aYdbLN3J> zR_@(8Vki3FU24AkW2pBf?DUcffExrdx|wT1tWW*e)$-Y%v_h3h6)v6Yk6MyAb<2TY1XLqhJo>{ByA;2B^kn;*6hVGMy`%iW_5M8O8wl<<~yvABp zT<@1=mdrEN(HE5XGrq5;3;#CTS6)j%YGJXKpahMq4eE3VQd>JE`r!ATMB=I>l*h*z zB66?NF$5LZ6R7A4IS#3h()CM=pkwbC=8m=xMsaWh(d=2vEjz0>LKNpsNk3a2qF`r~ z|88#F*p_W=p&BLnHWsO{YyBQS08=vmB%EA*E3Gs}hTGf?3^PB*3717_Ye!k9@Yc~> zcP*$hdh&>~{ZSf+5XE7vSmC{Fx|!c7lhb0xfoXNLK2G|H4$Q~~2y&+b-YsE&2K|G) zjZ-sWLP?W}IN{Ic<~&r?mQBC5JDM9leQ{cRL-<+5DElTZ1LCP31<6;vV+N$C zFdkoWm^!$+`YNq_H*Boz>$-Sc_jdJrv{(DLTKrWP!-@q;#DE*wj~|;{v}71yVZGDK zY3EU_Qq9+@GjS}1`vWV1S#E{yd;RaSDZ}DD(#ogGS%T(t=A3PEY(J}0rfE2jtEWcC zQD0I*X3ZvC^+n~Xo2qATrUWuIIVb)ozn%^9-GA}34Kw3DgziwOL#6hSg-$5ta~;y< z&&5uNc|BXIwcFxQ#xZ!$itF1W_TAozVeu=i8+ex=Eew$#!Lspa(Hj&k6`pPD`h;*PcDH( zA#-jB)c9Z1GN^IS@9f2v80AZvn0v!@2Q+E%TdtEC>EQQGO-$;G`ubmg9PcM6g&?ES zhX&{F>Z9xRnc4)$ei*JQ%$Cd+PFVA`u!5P&m>gLs+I8rLWsH!TR{0`E?&+#a!g(WP zm}xW)&`zR41NJNEIEXpEKK|WCdK7ObmuYfR=UjzyjfIfsC9wH7x;F$*S5Bv!U z2?`1e^Yekh1_2>{F+M>Nem+4Sej&k!$O9O=csMr!X5NmeX0I&X;&fkNOKa2Ly6y>Y zX>P-GLo}bH^?rY+yoc;?pZ)?ouTxVc?%9nf%{{1D(-R0Bh|6Kvy9W>w%N-K4a^I0k z<@-@xhR2kMW<)CJp9;#kuY7;2@LPH)pD)c$`Sf;B=`s7N@wQ)faP~b7Bu*lBs)k#` z|3KBPqgQH4cx(Jib!oaeG0n@khE$65-C_GMLss9_)0YQGNNI)EjWALJj-M#uf}uzn zodK1Pkh#t!FY6=h%&(Q$4eh@X`RMq0EvlLq`8!OISQ*IiuT{D^FSR8*X(EKXBWA69 zHUl(vwg>#nm)p#Fb&g)0453d2%Kh5Ery~Ed|L9~I;>AA?e`eYSH^5gy{r!8Z`&TiE zA`s`OfU6h!E;f0UE=z;6zCTQVq}gvU?xouCd(|2?!}t|RENDPk{KZDHr^-D6S`~4F)5jhevdG8VS6oUEqO02OQnK5E*m~^e zQxI(reIJ*XO7nJ~)`uZ!qb*X^X^2X!G`@3Xw=z(W_LU6@lE%45yI25BveBFcFVgw_A1h%_iL->Ti@3fL-AbOZ1tOW z@5L%+t8(m>dd#)J$11zpx^EGNUMV&j$^o32&+VjV*0=}zTCnB1STyHp)ZDY-h(XOZ_xO{8e@Xkrr`$`{S+{jZbiF zlN2U-g?eYbT~+~Z*E3^%j`2d1QXHjKvo*2_Xdrno(N8t%{e+(Fv50YXPZ#ufL-}H- z{=A6J+_v|SuCIvRDU4%^oon4Qj5IZH3`AE?B&x0Y-qr)Y6htrVWTwX=xl*HGX1gOA z(e9*5c9==nJJ&D~4D0=3foU4Fc;+;Ovs!hc5oGl1tqg59k~iqLdI3)nm%>;8!I6(p zSPx(Pi1G53*Ri+xZ{zzVx7GWfdQKFov}F5YaZ$!m^^>DCv)#pta`2D<`euT*Z+O29 zA$f0=%zbs5LW^6+PNb2ZWa@X-hx;{+T^1{B25d1P6D9%1!ndhaYBxQ^G_& zP^l_KBvI2-t~ys}ZSB)A4o?#?Wj{Hk*Hj(QW#O?|*&~%Z^;OhAQ_3>93JT{`Kmss9 zM+IW>@=LdhnoI8hL)`jD&D;RuC6w< zVuqD2zk9O^lMg)CFV?g)Y9h0d4)@?ZRnu;PcT93jwQ#Cfp!IBUZw3+X;@8dTpfVW@(jRIZ{N*lwc z-I3!T&(oC7MR;X{h~S8& z_wgQl8Ni6$QY)Jm`o8_Mn#Vl z$IlcyZsXo3v1Cd=^;AS%_^^Cyp-&{TbQavJ8~uuTRxCA8lbY~xY>b~J03QVi;;o|P z#=x;LH=&aYy+}gXm3YnNdWHmb-q-A` z%KI7Wv8p;n}m*Bp0s)%H#}Im?d_l_v4eQC)S;*UkC%W$NJN z+u#_njm|4KK?vML9htogson|QqA#4^qf6uff8RyJcG#o|`TcAmrpg?VPU_?;e^Y2H zO;l&-QLPGZN?w8xihTw)wSZ0hsPw$K8Fjgh{dX5wgxL*qFz?RyEyr3G+7=GDp|QyA zr|aM?!8$1~LAKoL=-mQzxXNS9PiX6RbxNOhqa=BfHJtZ6#)jM%xWpex4#*Af|XFR3>Iu*;RyznJj5JDeegz zv$uA}7w@zkJW`cRx1DP=WPI!nzRS*rpksAh%mI_%n^NAHeW?iT9-7O4a(f(kq{-f3 zAR>HzyyjHlWka*A!FAI8)$n%q;Eq5UHT<0@WL77GjxrN7i=1krKAi8|gjY*~aP^X8 z>Ewe!%H+~U)#R*&w!xpF6~yj@0gjffqK3U;Ww@X^W}Z5|T4pX_^H^5+BhiBMv!2ca zb6F8W`I?F(8yt}vIlAVccEx{!sB%#y`1wVTWRCD-huE5f&vSLupcw4e_f`HJw-ZVg zdn3vBZjhk0qsViI=LyalrE~59DZ_#B$)h)*ghe;mxmPL zS2_?UdZ|cARvhB$_?0ctZ8aauH<7k$S6`iYjLS-q##5d}u|7z|z@V%g$%ywido|g6 zYh~)M9{#LRtn1%Q+zg>U1X>b`0xf@@u{#9W{+N3gD_S^$cKwQ#aY46KM$xz=_UX=i z9C&o~F(QDX2ip1k+k|p-O;y&dz_FvTrTshh@Gjx-rZ*S*KQ*2rj$XcL6vSnwZ7z5M zSeTTX75Ca!o$*ZTV(Ndt*|+%MYq|WpQ9QZX`K)p`DFeqNaM~x`vCQ?0jGR!urs(zi zg{OeG0ptLSo3O*wy2I+slR*Mj@^ktCnu2DUxFNBFxW;{CwRB$7o=bl7XZt30sIA!x z@*#0-*G*OlNaGaB8to+d+T($gv-|{)^+Jk(HSp^7QohM%OW>ji^qayXszYX#N15YS z%$t|CZ2B3v5I89da*zg2(AOw+f2D&xArV8{#toL`85b^!0Y1_}aZXOYKC(12pQ3If zVMW?tC?+ZRmXBhy?laIW&WPI2f9f^C9AYpcdE^Lv=?pL2Y{{-4X488~U;KDqrD{CA z(6x5ZCSY^y5s=3kfhVZ23`WFX&!ucX@3GjOPUg^UoV9BhGYQx|VmonT;ZayLo%IrO zr@)kv(Fe5fAh8J1tE7=U$dh#lDjYFqujJleX4aibQKfzR97Vm3o=lgV5Sr|N| zblF3IlLA<{L|6`40n{gUD3i870ijgwt>HI5^{aC?Z(2?Iki1;GjP1p3ZmW!amk+w< zUhEf4gdWz2AsX4D6G-@@2#k;Qp$~d)yh9)0O-}217dbXcBuxn`O4^LIS{=}D4&gbo z8?bXJ^DLW1FGJymi%6rqoWqm-HV5%UhBXQn^={ZUhkR4hzLxdvbx^r~o2+5(JhVBc zsY_nvPrOwl!}0}Axg@d>`W%6}Ikd=O zejX+E@tEHIfE8ll*pwGt6m;O9O#w^>V{kiUG?TnPiXx@1QOpS;WIS}pKD}JdXN?T8 zKG5!oWo-FfnV5#+ZKaL^ptOZZGOPz@HOz?dS|%+dgiY10^to3=m>kg9l{)BaYd88e z;)z&m^B5|rF|S{sTFB6;2SMtw#25j6k%oLxJcUWa3a$!Ra7od;Axf-g>QQq`Fb%hx zlKN`8!0R{K(f}T+y@WcV8sK@~jJ{lQiisRqT5hc(&D81n`?`FudDWKuCFE){pP5n08TEX>6*OHE^t1q!g z$tL$qM&Pv{LW6C6xOHvjXoQCAuu6k>I0Edo#D} zPh?W`K?N)5d|gXF$Rt=wQl`mN5dv82;t18|v|OV}#wEI6xyS98D@RH)sg6%x28~{1 z1=sj(a=xV9OJ6`77Jk{LvO@uYj8ef1UXhL9YGhdtrXuCtejXvbTkjf!Vfjb-@OE=0 z9_k@sQDD?d&<3{W|qh~)o18UcRh4>+VAcPk72Jqf`F zMi~T!g}~zvLIO}xA$}2I5kBx!3#hO#FH}Sr{3HX6Pk^BbVIlC;gpd$F7?I!=!S$`FMn7GX&6rawyQ=>LTpk-8Ie@hCOaq)2yucGa1;h^Wi7x%T$b& zO}Me8{MJ8rxnGGSUiaO+qqNXyLdIZU_i@icC8rv5-lf)Us3cRcKP0jOw z|2>+7Bjft4ZO@;(dsIYck4o9S3haj??&tt^#V^w+q&aF&q0~^DCpr9r&jFk7Mj385?JwFqHcE zeNVo^K42O^5^1!vH`u>Z`bmj!NehoE<)23lx00rnVdiR_9> zH@y=v?Avd@Kc|y?+XzSb^CNul*J|d*77d)w__^LobbCj1)Zl2chBN;*?DfNeSwTTg zM|<*nAE-4Z(ac5Wyv`!@@=$H@9$E8dH2R&OQANU<^Jqe-XSlCdVj@q9PgK|MKCHOZ z%iZR}-UY4S+<}dnNc+k3m@T?Ftel1yTsbG!tZ&B8bPbRhZcb16v{clQG5TLaj_{b- zW_j75$!WImAP>y6r4`|G#ws@hYgJTbC!y2Sqnh)}GLrMm0dCPC6|e083o#p$!7~X& ztw1xpSVTtsxnd#W%yw@g$-B?`6@9#Aq-oZCDq&Whs-!Dh+g*>kuXrKg84O4-G2Jk? zA%fs7KV@-^v(UtBSw?idnW!?=J| zARqWn6|1yP2qS?cJCodFG#d|j8tf#l6p^h7UP4Fa}9v zzoVU?aR3hvJ33=CMSB+86;_T}20If|ozVDgIO+A&=eozY(Q%!9k)$8qQmk#yL;`|f zPlBOu^niU5pa^BzVv4#TIc?9|b?#$j>iGOy1NVMJ~Dd=z| z*ZoA;VO3|_6TxL^IR!$1)&;B4q9?p?$aw>DB(%c{lll4#Xcjvt3ZD{)r?RTATE3BWumNR9(^ewD2rN3L)FVK-;81zdUrugyQp2^^LcI zvfEr>bB)iyo;s1~OH``Y-M)>j?9zAtNQ2YHe=1n#e+)S7^T{09=sq02x7(@bT>+7V zYN%K__y3*UjOkC#^LQy=?%^FX4 z1Dxs9TI6mRiY~hR!vxS+<;6Act(d{$f)V~3R3|K(Vu zHbo*eQL$iDE~T$^iD~V$hj@!;-~U*>vF26rSnG>%P{%qUZSaRr8-0D!AZ@1naQOWY zFXTvMLMnpZJIF_Y(~=a+wDig|rwb!>uroRsQdw=21SY$`w9wf(LKs%tC%f8j+q}J4cR^yTsifATpVYq zv`U0|%6kO_D_=$o5a#f#o|eXrA56bAE#Jrd{bbo_Ww?phdf7)#f_iWD| zgPZZPOiQDKieHLGYTzM(tlONynr|_6RY*Y<=Uthf$P2Y{=6Rb|pmlmnAILE_OojbD z@2aNVhpBAO<106N>IkPoC-IZzNRSihz;%lgWip5ax}GtdlE` zGu7|EiHyvGbTbDvG=~&hxAUKxyL{Y1#&VofJ1D=A&VVic6b37=jXt^8XE}cuAWAB` zvWed8O`h!%8=34p#Wr0cMaKK{Qi;Ee3ijuVLNu5`QrrgAMs(62$=mjl8kM{YHW4!` zD=QVscN*wDcgFH|rp-+4IghIP0|6w0AZ<-q^f07eK6z9t`wtHkCHl60-J;DsFA>{U zZ`CNtQ|5T(9p3Tw5x&Ge3a99JKXD|xy#pDmaiYQ9ki2y^{J;vz5bAUJj8~8O)BD^n z>E7oT-Q0~RZ2l`4?d0PTHY(nwDts#E`&X8Eo5kHx1eXJHV-q!p@Y{@$eee8i|6Dp3wjPF!{%-4 z`u-y!(epL>*aiW+c_TgbNo4AkMADZ2{NKUmJDH)CAdtU3YX#hjSN5S~P_}-J8}FD8GkJ?$^@E?ToIq!Yfl^VpA7?nG30f5D2_@vs4Vd)!@IROy{xak z3yT~n6b}EE;^XA+eU~jgGy{?TU1HcyT-+%!A)&I3DOReg2O%M;NM%?^e+oveEW-uW zhuXlxVy0uT#`z5{Ap!#PnL1SWge&D&7vskInK^nFQcm~_3zgMkfH?1#L8k!f{feVe z0~M}7WHiD{>y&pQ*&QOKRMH5Ns17*LkWGJpk!(HwRLod(oxh|7fgF7?;rNE~6gYHM zz@NAEd_vOS4){91nc@<_u@F1R5x@M>lfQr9A;$XaU*H7Q@v8~OWVZwz2qHIy_Cp$H z=S3cDel|pLkVVAUG>i1>!{G~;<&_)|DJ(g7C76BaPcC( zt9%=}3bPMUIXN5PkGP3~iI}6EBE+&&s0*zJo)zc~{lOT1Fy~J!8#5ep4P*rydxn62 zSRug{;EOJ{{m2kfmZ~QyJ|T%|+L-+=N&^BBI2$h!pbdZ8NFWx)yW zS%^>?=;CX}oq4}1PDGj%GnD)aa?pO?J}@)68Qbk+N*Ft;#tyLrYo`1`qr92PHy~|S^2t>jmDrNx;kz+(O z?t{A%#|7NZf>HCyTghsp66MA5yl44(XV(m`hCB&A!%yN=&A8@VgH!6&AS4KVbrH#M zh*r(31H8_nb59+)Z3U@U7wDoJJ;Q!|XdOo;%w|1uA(z19A-x4XGC&APhV2GP0TT=u zSE++bpAYaONS*UGQns<~RfH@Wzdqx6XsWHPheyoYcb<$)qdmXu!2rvXZo{yu)^!_a z(4#R9^_t$a?(AqD1w^#&)0nD{YVEp(5q14tRQcyFy|xyI)5tTciDGKngd$Tw;G&O@Bk$??&5*(26 zHyqSoYIhRXd)yiaCniLxH@?KM6r;3&@(#7=yn~tRTuYK{7K75c%k5CPaR%%6!aFAv zY$U1}$!dzt+UIhpGJwf^>F177q+{l|TtUVNUn({&?e7;B(=^sI>F01|?9H-yG2sjO z)Dlnil6nzJJDQ~;u+?BK?m6yv;T#qEKK!2S>o113l||4kfJE0$?+Pz5bMSZD%+rCB zsP+X}8SJR0DAhVn)~|ZT9Za-ak)UND-CRBS>6SHcbMovpK89J-OH&E13?^?&LgcL9G#d#%h<^n7Jt?qYAwBRi#x9S!;iGvk;&AS_=2 z*I0^x!Md&(+@D1}j5M2tfkc&Vw>T#ob8{vkOYDflS-xUbTr@fPYC5{wV@>zlcgT&K z&tHfU9)#%jw-(i^0JCtu)p~p2!O^;|!m#4792*CB2;D|Bjr{c7Z*E8@tti!DR1+@D z!h{Cy{C%*wC_J!XsAVZ*%5thgIkoIhjkpTdd$P^+a6TQ`s>fFgI+=C1O2_oS7KdkB z<~qP>+auC)eDb4S%Yvbo#Y~KQ(w}@Nt(pk$UYE|iay-{xvXGwlUK9)SsR=ib<|ru; zT%|-FyQcz!{55lm%<)xwb9@jMr;q*0z05zpex;p!Rm@;`$k)uhDvA;f;OH>v35<{& zQG|Zzxp+o0mO?}X5=})uqcp)rzdw04C3j*#4Af@r2C4!#|&>A>-xHtg+1TQbZh2Y}_ zKoEdf!6zyJfFpo72RAnl;I81}2h<1w0Zt))K|sq8-~t{1DZ$Od7pD6bG0_0`gtt>( zqJ1q_S111Z@r6a>+vnE?!vi0m9^84s*P{(HQ6|QXSwfiejUyJxnJoe!qKCZWP&&&l zOMiO6fS{nqc73R>5faTbn051c(rpmeXCV}7{i5K|l=qrQnNTqK9f3kbJxK}^6eiaO zmc$?uc(FthQ3+{&3wQ(?^4+4BMc9>nl5Nk-oN(sw&A9QtEEh^)r}0XHc|3U$S0%!0 zFM9BPoU*kr4|3;(e0&nQXe@ItdfvM@bo}Gv_SJSme@k!q{Jwos(7MoUw4Dy(_C1^& zWhwvO?%o4*VAG>uTpgmArd)%~$=+v7)DqW9sB^T~rlBW-wzos`ivfS@)_gR`rM?aP2HG(--YM0|HtK-Xg|l<}@Ui<4;rv7^j;CRP%<_62 zl(lfOE9fa8J>M{kaKslD6?`jj6IK?@v8wcpjOsQqRD?s%s z7}h}hR>KpKHo)2$RGg-g4WYL~U5$Tt9!Lx}ICRG>!gY_vd~zG1I`U=_mB}GE)T|$y z+kKar|LC#AX!VIN77my-TZjGR`_I?XIV72TNZ&sN<5zUnGU=Sm&`5e5X}g zRJRAo-affqjD(S+TM320YtsC+c>&(jFANVgoys{Q765IjxNp3Bl&u)8!ZIIw97FCKkp5e!HXZZ;qZm8zmhXt^3`o z>zN$~QCeU+3Na$$4##u7ya%^*_R^fZ_25jMVa7lCSvdAAb4u*}6B?E9t?s2d`+3=z zonuiYObVEVYm9FCpTXf&B0>jKc@cg>epEQg?8=|9{~hHY={^~Go}#*B?$Yc!TY}`g zb^PNI6X+U`Ln`5EDoz-D9K1nH$YpLbE!I^X!TXzpZEk@q3pVOK5k(OAq?Ej6HldFB zXBiPVc$~U`9o=X#V~QebDhGp{dMVfo%x()SQ>zOX+UF}_(|CcEz||Etcu1r^%mzC> zV`meCPfAQ&203beK&}dt_WbRD{G+&fl6a9?IF_mwUhE&$QIS99hBpF|LUz-yXZ%Xn&+5A<_Xz$cB8 zSU}w?&Kbi)OjdPmIr$j_1fj2kOC3qfDuulVvHxv*@#WP@x?^TGCsuo!VrYMKF&G!K zyN=;meu}>AFdOX0SaD!QMpVHCAU-T6TiJWNdgxY+)z?eD0qv$Rm>{%>Y5)Eh5YS-y z+&2rDnTB|+p8j`o|e_^_nB-;tF&5 zs)4fp=nZX(2Ob^)QQ6WdEC_Iu5GYk}W`i$xvp}s)43$E^`|%G?>nD$#XO|kiZl(^a z4u?(27?Q4Kggw+1ej;!LX6uJg zA=Vf*&DO_5mkeMgMJ@^Y81W2>=W9X%ho zNMgQcXM0O5?KQhp<^<70Gou(+_qu77$8KJrW1QB$9UsAAN>T6X3@doLsc3u2Bpw4d zXbyFRiF7^QZUm2a=brg2jDfYaFIx%^FLgdeuPCfHJCt$5eWn7OfOK!&^4(IheK9iu zvc+PpM4q`#+o57y&&G*Y(KQZxjS$|c=!BjD!_S8+&UxF0ux*R54M4+67<4t#oI!l# zg>$TEKyHUxOuz0l$1ZTL<%M&gUaIV;HMBu`OHxEov8^#!bfcAp!;|zf0K85XbL9gQe+1U< zV(gbnbqnjvaT`@qF0ls-pB`hjG~*zc4E!Xe+pcL(GCQx zUb-t!U+w_G%&jzc=$Dgzt9Zn~XGt4S=6u_apm1Z3s_co4-BhaZG7+-y zxSuroJEKB)F0aE_>lFt*rOAob?v%PD6QYgVU(YWWx3)HN_U9Uecb^`XL{&~8Y~Q(f zT?K7Ase2fZ9L+zlm-`dob>a7<=T?$;e@vHlKf+uyI85~IP>p;z^~a}HrvmvSal(y_5Ri0zvm(py35oxsDasRK~%&K9Q=$8zfl^P@6 zdumBim^|oU*$4vb=5|igB9ajs%=hN`YHarFUUhe^r+#KbwmOn2D76}0qzf%ZC~2$I zyXc)H_oFR>HlwFaKWWt7r%U6#H0xm5o5-74=y&<}`HoQM!Jj(|-q;0w>tBh&gz^z0 zR7u=!n7k?2OX-3Dji6JD!b^UKMjCu=0ht6;U!lMx-*(c%L# zH8?Vh5^NWs5zScQ@Lv6Tsp=xl!}!Xr4OcU%04LP1QGUe%pC&KR@Jm9Lnm&RfAC8*t zJG+pG-CcjAPW&cE4SBgNpXr#S>gJ(?Z2wbJzc$1C`!+VprDLhJS??(tV4Vt8Bbvjo zWN`bg9gwPcvtCM;UX4kssGtK!U0bA+ugAP!e;dEA(vfb}o$7IaYmoK$_2mTy^8jhv zgC)6eCqeF}a0Y<}W2J%?>d@&xttlm8u_c+xb<&{Q5NvNjPDNQ_<$Qe2#l=CAf^dw5 zQ@9u<6B*L)c14`PV$B)JR5C*1-Ia*tT#6CobT#n3cjfcU_Rai)*f`GKu5Dv7Idttt zc*nDP4lkmF7^@u&dhxU9)w&>DYnt&`N?X%#=|cADfQ4?w{p*UV$ROs^H@@BvJb1a^ z`wo!Bz9--q$4V^L+J_tpkR@HT2jagg5Y(p+N)0g_&P-(puqzQ345(*2S{}r1SNr+d z_bEVVABOu0!_gjW$?=AE^=FW39!vL_ld7Ps?v+nevDo)LR#8)%@6tG@gLSq{nG_sC zR5YvKjYL+Of{collI4)!^|`5wQj{l&!)svPSBID-y;M0AR|JR<9(|>iUp(~qI3b!#p7 z1q?y0RKME^Q(?;-<(a?wc2hBfAZ{OkVXE4B9F2q_6(-sZ7b{oX>#2KC_8PMnI(K)q zBd3aokYtW7udL|5rq61SLL`*omjy{=ATC1WX|XHF*>;sp6fkJP?py{I`BL)?LL6e>rFe-l4v>yf8at-EipSxY*|Rn(%PFOlgW2xFm@#WN8y&q_r)FWS#N`)FWHsB#+u;m5X`Us3oR5Pb+t2=Y%O*9 z3mvbr65m~PmV+!B&tQv&`Xvql^wX5okNsmo69^EsDFkht5b5GmD&+VNj^roI`~)$w z$$=LAEz*vydL~EjV@u0H+{d0Xhh=42c`;k(WGaS?6CVjkf1l@q^cOC$(n4Hfe!M^$ z85e(d*S_2i<(@tsd>YT?!7J}~E6;N89$9g|_Co~zC7m|{27He-+(ru|pwUm5dSW^T zX58yoY`96TxfEAun`2+G^~g~~wm+nB@$wG5l6aW9slZtYm17j)z%$OoaY-7eBpILx ztBC6O$0kNwR;BzjCmT|Afp1B)8(ZIv>g-vU6S}B10K^osw062m!25(@g-A+v^DCP? zhJ7r1WjkQ6tKcN$mLvA6nVw$&?uP%O%~_NN-%FvF!qE)}AH?N94zmn_bS5y4$@t2x zEj+iMSQ<6{13|k5ESs3xYuN|eJ9Jtzw)k3~J)qdnL%9DdJM8|S?C@XnLP6CVKNSHU zKr#SK5PUrR0{kL^0P_KOfRFs#BL8tI0U-iFR{rON5CNzW{Jfm}e1d=pLYS9dKnSo# z{O64j;Nuep5S756Fni2}Ql8=UqM_?jr0I*vxMxTsPTB%*?85?vj^=ryn8n28RvaN` zT2rhyVNmDOOllia`A`rtg#Il(v4jNMD=%E@cB)(ni#+x;eQK@1s?Kw>`=ht$4)J*L z+;5k`k>N-FV~S6%sA1NiWTrw*X@Ym}9>fVG3|-Bd^oPtb18+i!Bt4+dAI)JSBB}6i zZZ`~1zpbk(^H~!5d4t02aR9L;Fb2eab#G5!jye4~?qnT$A?<*nzx>eM&F`)_bujsQ zHNeToZhD4CH|*$#?+@XcZ&{4 zH7sOh*noVl)5P&Y{i$Mfue4zY3?LOD9GZ-u!3Yx_xWj0jb1lC=8DHoh1`6GiIcy^sAN?HjQ>`U$jk5lct4}`eu^zp#|C?{I{zlR)<_rpy{1t{tYcN*~$Y;N4TbHzh4mFPkZNr0HSf=2UJ}2U>Hg- zx|#m&95)WDiPJh<8)es53DeFE)2{OV%|7ign`4vIFT{m zZ_49Pk45s=xq329dDSKR`5P@we7ZG`wr%Lje?#z7`q8*Y;D=&fkcaKh^GxqBJ_-po z$6|P1yue&IySl)Xv^waUGs5^TcBrbl%GefdANn{JE_z$x!^B)?s+%nP z3t+tPb_D!0{u$$k20POMB#(VM4HNhTlOyT7&+jVl{w!MPB(l~09&LuxW@D7Iz?UJH z>=X|6QjygIQAmIK>$oCR@!deR`ey4oeCS>78s3vri;k4jGj_a zRcwHeicG|+oiE%+JZN_%7md5IW6+aj$I^=SE7D6eVlr9-uV0;Tfxm)qttH=wz{z*4 z59r2x#duO0f}VMVLw<=81Gs2)qEd5tzE?X9w^e9HpQ)y~{O9Y}-uX{?C0J$|a@#as z@N;NaphCEC5R1ORok6)mO5evAMk0T|VA6(On@@iD=|K7T2ThC|#)i6dplEWU-pXh- z7%m%*1aTvH`;-?+fu)oA7?CF}J3XN~{xECM5*a{KBjSq272{I9@^6hTwDCIcqLKLt zo8jHjaY-xxhdxIKb{Pv<_&;U6FXAkl2R9wJ-NF;GY)`ZOZbsyHD;3N$?5=C?GZjXs zdwiXkTjVfa)cs;E>BdUov)Ph(nDZnujf^OQRc=UhrM(LqjR#uB119x-TRsXK^x8Js zz8e?O|9XFLfAUKBdlEDc7o!%1koq%3Mf@8mcMx;1ME1Mb{GE}=n91x;SW~QMQ*je+ zQApfgA$;uWJgcPa)zK9U2ISlDWIwuU?ar!Jb;227<#{#Rn;w5CW=4n+i=ulE>IFbvzJ)~u2iBFm7t#JOHwC2l6R@6y(Z8p@^Q&3E%73Px-*i$9!X==--4WsX9 zD%?}cvkQ}GMQ!Z$m~sXctwsV37UWs8!Plw>^P09UtMO*$PT->~t(1)Y3L`O! zvx0;fIl}k7HU)}NYJ-oDEt4Ar)~+2X5|iGXJ-Jz%nT6R9`A_*} zH%;{M(9(J@<-xX^5-9gpxc8eYbZ6jJ0{>??*bB9lHzO^!lD~rdVni!PP9veET*;X< zhv(nQ$Q`VpUONxR^z#U=N$%Y<7~-4*eq(@(4B&|l9xHegE8JqkF2ie#$jYfOny?7x zN_egWU#Xtp@9dtEwYN?U`bY>sju9a#3KHNAT!o?+vzZDmTIXGo!96c%izx1Jo~qLy zJ)i}D79 zSk})`U+2b5J9Vp!ts0bOlqt8cZJ0##->*B}4;Bjj*UaFw>5)p;JcqVSQ)4c0ZO<$wzc`%+h|fQo8zrqeQP za4J*}zoK`&|&M~v4Mqx`+- zyGovW92K`4V z^3ifn*c)@ZPL95?>v=n<;G@QIRb|UREvJ7`Qjmq`VAxZiifZ#laKL#V#tEH{aL zhaFQekno6!q*^@vgATM(cID3c6u@5ZVcJ(2I;Zr&rWF-tFA0)bV`$?JB#_v;XfWrC zu9$ywQ|C$?q3i`c%NcFx>6}Zn4cY)(9yt}>683Zm)J-Ds2;HDT$OxzJ_mDM;%NkIQ z20m-fgxX00+61e9V|Bv_(*=HNzxFomglDr%>~IWvn3y$!BKrtK@8uE5amWC@YjuZmwWCN>PKDw!< zA6N<@8o3}WF_}&2tWu*7Iru-dr7wG{@xLi;^nLMh)l9lT%I0g>epgHg+@?vWXH0iK z&p4(|i2U0hOzr;2Y4P&o!-qNO75;KnKbM<^bM5Td%QZV3hieS z*l*6&JVM(h{E^Cf3p2ghWrK+jd6hqM`F7O>dqN!oiG8iN670{&j&1;;o5_!Imp6n- zm>b8wB+2zo&>L&DY~0ybUB34Xj%+DE^St16d8uysrz=X$r9vAy!JWulcw^lhOCb)yIvN>fLjL^f0rQ`O=0VZLQ~=I>w>BztF{qE9^P!v#TZ9H6B{UKy7A+J4;d! zKt}1KLql8bkpr<8zvfG&a%y)Oy;-7fJ7V`)#&d0+JU~=G`Nn}678gC*u!7@Z$Y3c9 zm+kg7q0gQW;mv~<;QWAoXX4Ee(jMqiLlzP?-6t-+t9HS2;2Zi9b`z&= zVr~V~tO9I|TsRZ9cVTcDlu1ZG2tb2ke5i*vZ}MI_KQ%0$&aVbufNXn$9*@PyjvTYA z9ZX=8U#ym5)^tgZkz=^5X~u`e_7@{N(etW&lp0nm-fG-2ch)W(d63t7(YR76+F&Ie zYHm1HO<{|~Sfv%IObuT@W*(RuTiRlOnQ7a2xvX0V z>|-K8e|l32VSSA_r0#I!%W+h65Fr5j;)?~`%w&A?Vn(jSdaes>euqAv3zWMpn+ z9gT7DnparN*+>tdW2<%PHt@kZSlv))dQ4uARGURs^2-e1j6Ln(S?qE_L1Yr`zhG* z1=H%DZukt5a*wJO`((Vu>Z%_cPaqHZmv89ZG3CFn94Dx2+_Nv$G+K>_q4>)IY7K7U zxdB3%rr#7%f+O`(Q{bZ5wK}=Uq&vg>v?}?hw45l9?fiY=`x*h!Qy^DhESB`KOkL9) zH19ncbi zHMoIBO%YUAsKou~{s4^wF>e&PEsLDa4)HJgb+~Hu&qewBjT9;H95vbpDB8lwsG%l7 zEJs)#`6R5DCk>rUb^FTgrd;q2P6fo&Sxe1oLjTkke>ZIO=A~f-N)Z%TGFWIc8O+D<(c<=`mLZTw#G8qdn{ zaYj$yUy&7aHMhDPcMr2@J{@$fPPxu$zQx}MSK`=$$aGC0&k4w#Jb=i<=t${j+h$Ma{duNBTcH|#T*TkOpp9m zhqwr@(Z!>;-Ls!y5$T`AjlK$w?(uT4=>gDI3K6ln4?aST9b!s(TqWoU(mG0 z5Yf?+0JBdJ186CDHTxvq!o-^9%VYG$Pfuq*+pT^tItEu<@hM*A)*sX}zWb;#HNdFZ zoJMPp$F8g*$w&tW} zB_;#|*n#%6h}w0N!L4T~pQE8u2W5RfmL8mjt{TC)kh^8ywZG9%S@-wDfz8(MC-%1(RA>=C z?B8Uuj}ajIcUNMExq(5W&fwYQXLAHA`1|loL4_qon-P!AKSV7*WH?NSB>zz9dj*od zr^B;agS8Ny?o7|5X8O|NgxOP|$^BBulPkT$S6~i8^IlWaneQ-F&u}GY9!%f!*)1+W zR)X}+O|P@3#Z>vugH%S){iVS0GkBntTDY=UJ3=SjyQcCBA;qL`o=Md#qSXIaH&H4|@^$s%{~UPe zh;wYjaI(_+j*kstUp#)MkTlp2#Xq(fB_UwJos%y zcp21UQd}EX4|4E$FjG9v{kwhi`kfBM5^?jJ7^%{I&>b#*@asgXXxT!a>(``mrf!TW zo4UP*ik?SX;TU`7@X~)oVcnYAS$1tGVTQDS-xW&BTkHlPy(jA&Y)rN4pnGYEA0jpH zZz_mgICSCm#LB%&1J?Od+3jP{;sSm;Ewr7$H!aU?)M(;_l^lLK2VUhFBd!TQ#hr1Udp%>4Zr%BwA$l`}yRv0vSk&9gD0LTJ#A ze0T;5-od>54=E$jx!A-faz7+8y&4OrA@*CRgCiHJp6nuwbMG*ve6Z$E(1tt0;-`BJ z657L*^sKnLe~-k@|6Ddsj8~#pGj-z$Q%mN;Lb$P1u=VF12yu~SmZl8E7lS4&7Tsj$^)Ee)Lkypm`U{D--7&QPv@chX>0tp>XY{)dNYm@_dPZ7C6k%e6~Zm z-uytIp=|k9{sp9U}!0@~Q+un#Z=tdLro@StX-Q^eaaF4j||F2$%jp7go&fhr$ zUJ*z5^J}UEi3?wthco@mB4RC{wUw{$XHvQz#NNmhfT!pb5`W_h+`Hj|qpn_E7jEFTzi$CJDh(V(cj>o1F2ts zziOpk0`e!sL5)8SixHCtcfvvO3zInZ2^VPV7xYi<8hwA+-t2Mi8?jnCdj{c387rZY0b#Y_!U!Rq| zi&}zECWsz1A^B(fg?KVd2mRU(5Jb{p)i_2CFtwXt4NhjaN<>L|qBK#o1bYd2RJ2_Q4<@sfOhNJ|%ty>1fiIhX$pouA*%fK?WvTWRKa9GWip>ZS1&m!3O(Bk_ z)`1we;7(RIir1TSX9Pg+oIP;!GEf<>f*9f{$vG3O$`9XSVdMg~)c9 zRbr{k;leffq+p-t9b)N>I+C$i24XORe;nY#!+Ck2*SoV!YZ|+?#f!#mo@<{x`5H6p zNzF4u?AqF09$GtdWvnUM!c>oM1@UI0SQ++A_f)*KTHUETuRWHui`JmXMS+| zl{Vs&*?-=&dOqw;VwQiNO_SmAJK5(f>IwJ(C?qh9sfM%-KBbW=60WDGS*L7LKYR=t z>?^!ms6xqfEL%x9#Qs3x$?jBV#4*zm_9P+Fu z-F0dguQ@{^U}x4anBENj5gU)fE5L z15jPqUgQ7S9BB7FZdbN0A6*EkRZXG*>ATYjswLc+jWogwi@ay?H1?a=y?xkeiYs%b4|c$gX*qy=0k(rO*#~%S`=7rP zXle64&r|dY*K zQuI^P-jWAl?cH}BY4xRX0s6)i?6vw0Lr3-bcI*;VU7vgv#J4=?HuAi#K`|Db$q7m^ z8tB0N#yY?`oQ%i5Wc$o@f94l{*Pa`#!AVjnVtvyP!wTgZyzAj24;GSH3nq}Gg}7nT zx=qU@9Yq3thx!f$S2y^(0(TwS&PU%yNYQ<)W^TPzPZtRYR5wIm^@+B1;|+7{glD$= z09P4kg^2*a_Q(Y*RhMz{&ia-va|yM0r&0;6ZaopsJjalhh2g7FvIq4XM15IUm&h1! z0{hdj63uae{)_Po->;SaSX8a>^)PbbTS?7dZ^1);fdxh~^-Vx%U@Vt`&ITCEAx1C_KV1SSu?4;18UCZn56~tBH~~WkAV2_*Adt1-;N=n$0QxZg<3s>G z7=R8T0%#Hfe8PZu0e~X@qeuWE1rIj|fUpFZm7D-b0x(MO^8sZ5N(8jL7m0$OlfW%L zJtVaDt5&y=MM%q^Xol)bSE|y{I)nFLF1jg7dz$`EbQ_`AjS!8$LyO* z#C_vh7b3-g_9-I2Kwiz0uUb?#)kDh9qhsdnZu~-Pd1atZt2m{e>oImx5b&PA!)YqN ziF&pS=|4){>&|3anY)-YFkWd)9y`I9d`*#Wm~mSZujNTSE}*0}+Xa>|&wY(SwwG_lDt2?-HU|nr zQ=A5CE0COVOBhs%@Q*n4=l_|6 zu0U~zXUpu~C0fZPbhOTpA(!HK{p3t>>sn}N`OcPb+Z(}abFRc3Da;G(<76~#Axr5f z8^mRrW*pX~KmgQt&bD={(vTe|lm^f!9byh{6K_#vDkqjaPgu@%O2ywUG`vbd^YB-%)nWI0uCR}W&qoTfO*-NK29 zdJ=YoXcZMGhf?zv)0y1Ux-x=ODhJ1xJf1Q=_AWy%{ogU!5yF@JI<<1I%AA{RM8F0eqRzEJQYCV%kTZZv;FW0ySOREC72DwKQ)B zeC~iygjw4IRENjk)>6lY3kAop?D@nnZgWqP;CW$RY+S|WH_* zZXadFIbkz!^G6y-q(^jV1`1*{L$AUSL$=4$7mtzVr%o3kwzU#bb`>;N@n$_@GjD8Bv}P0amc@-$DshBd;1R;;R2=CR^NQP|+GN$=ZJV>avSz9Z@6fKjT+ zS9P#9(+8xguwefeUeLN^{A5#iHpY z|FchW5IM+9=E?o6d#!5$#1sHUkH!5^j8sv+YxR-3pU=`OdYt3@9)hwemaZ_a*0w9e zego$d7M|QFDEX!f5ksW?TF*5bM~#nXA)_w9|7xyG(kj_9Y5Dm1{Xq_|-jJg`Bym{q z#jl|Oqef~*|E8B8Ir)aa5etBgy%y@Ix^-51jNIbbhw;mu0%!;yD! ziKg9B++DB*0AhuBw)}?t6sP-~QIQJ%Tp&B$?$BNl-4T5%y?kUk;q#x3TkRn+-r`Su z^VQAIiZ0kVH$(*|L6rsrHpv#jk1?oU5(UpD@sv!H2-4;%!jJBKfC;VIZm92Pm51FfC zD*vmLaPF(7-09?yr1>G8Qs4?>l&lY!LHm*3<~iXyakYO`)0=1tBk6 zs(ei88D@dhtOdWE)x7I|!?&U?FA5P#;0FGN7M44NQR4Y<55Vh*uU!XOeTMjS{z7WY z_j%qxy`o2Y9>r4-ybO3*C=(LhmCK`m^lTwwiVcP&B0LSOoC*tbata)jzV#q@TM+K8 zG5)uuU$bFwq}86GP7&j3HtO&Xb6>+P0+&W0a`{g+4cRB27cYeE7j1_`C5Dxs{kw0j zDIIq!2rnwF#M8`{+#WmPKvOykro8CZ2z}M_za_($b7qv*tVrgCMYL z4L5L5{xkn9EpXKTQ~my`kvf9kg4@)N9+Sb>uXZNO3o zea#h0V~5p&d&fC?hp#Ld5V(J}VQn{doBEKgd$Caq^R_&OMH=#v?{%TRW>`l7_#B9F zpo?>WVDXE+=<{pX2ueWa;q{hE;}SC&J+x`!@e8NZVp9%KB*6Bah1n7K>8fH^M2jAq z_=_T!iJ)brty?_ZPb!T!f7Eo`-5uO)m;Cotq7{{U9)Bp>H+ZVswp|U#n}GbCToI7n z5c{D7L2Nt`qoW5^rp!hIt{r1%4TL%#uJAh@;y+p7%v0@)qbQLrwaJj#v<5T~z++P^ zQmieCe7EcxAOt!?p{A(SH#H|c{`}VjA2a;E@jii z%x{oCyDLIio=KkY%fDg&5W%?IPP4bOskY9c+T)1j%}tsJ0_B$lc3z-%1^bon27@PE z8IFZnFc>W=?tGOiuCOxzQpu$Jv85ytS^t#%!SZBP2xCk^aN2a#;{vcg36v&!pa`3h z1C=I*NM9Jyluq&E3Rk8^3R)`4?|YrXhr9k;S9nxy3WGg9M6hz#9ArJ&^337b-`XJp zn0=HeM@ptmq;XXQ-KRCfI#-6Hr^sY2e5#JWiqC?MGTX~ApS>xFEH=;$U zx#x?K*v{3R2%|7x>$fZob47R+1?+gPY*SGbEk5&@zU@{urOiC^aY1*hNnE+=OIAY% z`3Js1OlTlF_yCU&YP`F_%~3yPYPto;q>DxL+|_DFYHblh6x4pfmZq zQ2ZqNwijyEhCH7Le)R}+l;1-uYR9aw@;3&G%KS|`;<+(BF<1&yY6iZPF^yA)Gz|7n zQ-t^g@27zcl#o$5bK`d4w4l@6Kx3O<8Sce+)*_9vk9AV1`XbGDLABTP$}7dnaCvo~ zc&SGl`fn+y{z_Sex^^UkQZrD0k~geYP9xJHZFi|f#j=O^Anadk8*{~O~U*F)YH zmLVlH#PhU4eP*@eu6+gae+$G#_(@ibk=H02oD#}mML!4}m1>?(*PnameZ(I}zE{0e z56~Jqo)%~rkSQ+MFi$WvUpUz5`sm)1NOns^fLm=gSa zgp0chYL=k4sW~sZe2I@TRJ52P+){<6n0H@(R*TjBHF^wiexDRQ>ZZ2&8^aZXpY>E_ zW}y7Q`ti_VIeF(-OFQev0}vVEkH!aKS}Z*x>BtCJL@Ly`K7R|CMPCXG++4kEps)|C zY>+OO4%_r&kmu8%e2?(&N(({@?59qaAT%P&IJ8xow~3fphjvak-HkU<3DHv0i0f~n zOh=-6;Q;<8J;c5Em&ZsDNFxwSE?6y!J@}Ym- zW1c|^O3EBe*NoLq zuj+M6>B|M}9WjqrD9Z1~T&Up!TmUIFP|zhDvqWV<)|gBEZ_W8JX=p45H&r{&^fH0X zbYvUqF4C8+z1NQriEOd)aphx*StOvMlIM#-H`Sg~j*LWxh-mDabi1jW#EbmE4yM;F z$JW+|wRe%qJ~s&osL$Os?Z&!cLE<_Hpnt8vYG%KX9{?-z*K5Njxu%po4z9LudN!(G z**a!#m0z@B-S2jC_^OpN6@J3W5&ik;X|<;;`sA5!eb6nC;SIQi&DH#xZ+_QpuGG$o z5k=6%xtw0Hl!2U>yY{C&n--JBd>W7}5u%JtH%xeow5<3ILHpT;L#=WOkK&u&N#gqN z{cPq5e%`Jd1isY5zVgH>sAoy{ET-&~a~dy?6q#mEBM-TpmRoB8y6&pQwLtNi%SFtJhMZt>r%uh%uRfyp z0aiZl6fINeY+OBVmXSIeM==(#FqJ-R=ct6BK*fX*B@GIsUz_!6Msa)KCwaX8T8y04 z%J`C_-zl0-NvZ^(a4ODj6KE8Qb$@mETq|0jM18^f@RBr2t1(rLzs988#9Xg@^}=cV zVU;6rgc|a9xWnEl_t(_#FW0WmPshITQ-80WN8c~NK_VXjRtYV_)S50~$p>G1%^W9% zhV9+lTV!&mc)X3dHamBLM!}~h>B!pF?bYmH!va1PByT@V2XxZ{s;Gbi+E=Up#Bd_) zYZt&Jb!KJl(_D)AyQnG12a5b=R(8Lr8rHeu*zy)l411sdp9KsF8L2=4I*K$CMAJ!6 z^;ej1MpLVGN z%}YGjDQ9Bet`7U(=qs;WjL!e&eB96#J_#wSpQskc00?9N?*j;xfcT|RONK#lX&zi5!P9mQ4DFQ9S{{K6<)Q|$>_XILK@}lCe+eoV zB^dPmaHsdb#j&VFh~gF|G737TJp@Mfx|-tAeAa-a&b)(rUd=_pYZ+*!7Dd{XtB0yD zeZmE7upVUZT~7@Pb^4Bg#kW6HKAB;>4t0t)=XA!S(+vsfM4sq5|0uIV=9Wsw*K9OqB2g=~PA^kAiDmtKsy2#!a!+V}mIp+pLz4Y(=3R z9+uX}_+xra7L67RA2z_B`1`uUCP>KDmQMdj5be$oXxs6KKKr5<*}C4EOhN@z9Utuj zQdivj7Jjhv*m2-w$|c#+r@C&og%jMylDedx2xZ=o&)JDb!p=LP6*ozTEme$FcWdyh zH=?e)np!|_Z>X}XRXoT*PnCsMH~V85d;naa4@)&cbnecULJ^`!hfLQf8^_ zXbAC{%5>euUG2mZQ{I9GfUo3%tJ6fDkkTLPkS4 zbVNT#17ENAoW7rN-SN^GRZWes7-+9lMFe5t6?dfs>CfY`$~nf5wmU~$zKoyx8LsvV z9K9T!Y7l6u$;rYWewt7T%^uD_`x=GH;eSL;qSEO!rx8vorCe^-?7$x`9LW@XBnap- z|71P+fl%$7Xkbwo?rr4fViILezWW~|T9Vjzwc76BTXF2%iid7m0Zx|>ip46@+D56g zD*cy4gWkO8!8cL&-B%$-sqLUc{1^_PHKm^Bgl4FGoG7d)=Tq1D;y*AKd5b3Qc3 z6t7kOnAkaoCw=O@*y+*^q%8iC{>9Td&lJVqNtUiAf)Xq)4IX}2>{6lTV5|3!JmaY1 zerGwk7F*(4xvo<=m!IMzJ;KRCEg>Z(=R<{*Bov~_QEE#5_jC)Sn45G_b(iwWPTkg; zKIQU~N_&fU$XvbP-LZ^nNKyX)tT4w=)$&Rdg%t!)hULw4xm~hpyUk5D*mh_pN7gBB2q>Xw>l3!wqQzbuj-K6!J)nrJ_VK@PEC3pp;-c^)K-D{9oW z(wE`0UfrH=9t*L?T^M3P;GR7EmssZOt~E4XQ3e0 zYkhL9Mm|_bP zSQ|3TzYf$|-Y<$WZ?9IlND^^uEmrC8|5|0TAI|MNqiOT^__n$CVhzb(DH&K#m^^9{ z4n|~CCa?=oxNd~MLhMgb?aPs)#QCiEYjP zo;nEPKW@oeyh2rYxZP>6%D>o;+i^N;fkilDIazI*C*|a#G5f9Zeo+1sn)Bn0zt}Cp zyr;xpAf5eJqV*zfYa~9MO_PHArL7XDWAD+=ud{jT+Hll|9dAQVhB#vKR>om4Cpgld z8O->ajPwp@GD4)Ua#Q#Z(`(6|qrAY0EHU%j)6R&xaK7=wHZdpSLm=N&xgL^CfN0+i zE+|TkCD`fd{QZQ=nm%~$LrpH}ZvJpntM+fqzCv;Cm{sbi65joY#G=I8@UaY% zMV_Ovp=O%qiv@hll%_^OmB#W>6Ep*cod{T!lcqEGC5+CoX{Y>i_5QaJ0M|K1QxP?a zl%UHU+3SHxF{@9)v|+`)(5B6x0|wUrp~{{`Q@uX622U z_DQ{>Yfsmut@lU`Ed$KaR#;X=oC_!&n3b`}H0tCW4-$!1evApDdfeRg=v?Vr$L81f z^{^HmmB)e2ncjv$qMXVn3b2A0@|d1&x4_huA)18@j2C98$XIjv4JA2)k~Gq_VQoQ3 zYj-Flga!T?yZVLlM_A1%y?z4d$6MWc6|sp=a@}3yp!uF9E4$CrNqs}L?fO}j#73K? zF)E59Pc=H5+85vSMbsH2PyG%TM3H!%uF*kcXX51ygI6UzDXm9ut|y`BGXt-)#H_BZ zOIDZIC97+TX4xa$1E0E9)i@C8#`1tER}LS=27>|GiY6ibq}9to>8@U{bXuPxe z-K*@n`PzlZr|RcrV#=!1^y_RfVO3z)9!xNW5cEi$o-1c0aJEsn5jySavto34c+=|O zxktpy)uoI0Hx!PQ&r&gviE1y>(L!WqA!Pshv#gWES(lLnD9QTUyLyFoCz$V`(;yz< zGL?w5?j=;4UQ&%GzwhAjQtK7j-@|@M>9JsX;D(D^jGC~F2!=+3wx_7D9u?B^4qSG( zH(Qu~4KHHQ<(KE$O1GW59UZZX2Ed_09$3B)fqSidS%o^1r3Wt(KvOr}+f#tc_+hfAXN>>z#=QOl2^J#b-EOi3!%K5Vl)dl9pZm$t z)Kb6c0yE*Sk!x$r4>#PE@fFa{*8-_^wjN;qlu?wZFvnb{7Rr5jrl&(Bok-`ilkxLe{A-s!K9%#Xdnj@9dAPdBaH)S3?fE{QCGm@k_~OAdtifuV@Az1wmS} z*!c6unMA))KL9N_Z;1Vz7q-pZ&uw>wDg$n5XdsoQP!y2KO^z0FsF=Ale*%duZh$s| zmZA!5rS8aEL@wsEmEdPntdz3yI?pBk-Xp$`VM~toPIC$Wb8NyHAK-7YMFpYFz0d|T z^9=Gb(kYbHz%L)#J5nYsd82xD5>StqgB!*y6pdftQVC5oBbtj)8?WEk{+^5xTzxjT zmS3egud#v^pZnSz`5H!J)_q~}@0>73D^!^?dSU5bF~_s40<)GCr#VhvFbUI5*bc{$ z6+TEI7T|*Y;o-=@@%6)EiPGBswtDi*;DUzqsles+S_yR@Wo;PyqhBBu`{jC- z#%&Fv7wy0y{!WB4qy#M?|M^sbD*R4j^A{z+jpO(TSFt?v zAI-MDV3oERog1Sf82F}Zc%bfats5fjTkWz@IpZtE8vUMc7J!m_G~Aa7P{FQeI$*kg zIH>#{Rs$E5e{y0yVTOJ%MOuEf2C(7?i&}K_TTC2o?!~SGDBDI@qxFd$^Y^4M{zSjK ztxOlVAag{-mp0%>mZzadm@8sLnev_PJdVJfxhEEQ;>b2pXXh8xbS{Ju>A8w;8EkJw z2u`4*&je~6P__YaZ{O%^9&`zd32YViSk1M4x^~SJ)HHc9el?~o$IS0c1jV)(GsU&@ zGEqH?#+5FkVz8I}MGv^fzqJQy!7rpHfYGvD{!j=s_l@&lDor;!P zV6^WGvdRp3)EJJPU2UR%*x(egwPlXYDB^?seR-r5*D-}%Ujv4gch%ukTC*Kl^w;Ee zCnx-+#pVvMUB{f;Z6S?v=#6-FPiHpWAq8PSAX8>20bY!}kT_}3(>sJuKWC58HQ6Y+ z*5$*6*?6*h4gU;l_xt%EiZUMCOpY5>pgSPJzhd%>TY!Er@N5yt5}bDLh-b-b@2T1@hwcinIbF#oez*$}<2 z)QR?mtB5!z{8yoM;WV|y$9LfpG8xrnFQpMYT1U-&Fh5Y1wlxGzWIEc`zW3mgHdsu^=(|e6am873fK>VeHk)2{e_u60! zR3w4o7G3e|j03~p`WIeUsU44RPEp6j!q-104Z{^=FA;l&0+e`u@`G6UukrrF1;HC6 zif$NM_kBg9o}_cJzua9P`DaKAPo_-lZ+6^l<%z)jYVV1qr0_$LLakcBcn(3vK$yK* zy|YZysyVP-@4h$3>8;V}(zTLj8GY@d9^zGlT;uigYENZHg)^K1{Qq1ILD2t`8ZZE< z;lK1q7DXPw%K*S6h5kV$`2ln!5VjC{4?F=-CjryLKdS>TA2;wC7cT&m1uNuI3p&+dmq2ZVuf!PIlxzpnSFI(9#^-3)fi{!B z^hxq>JbozOk9TF4{8b*}xHX`v`0x=zO8|a-bBGy7c-1(R*n#3naj4rlsH_=}_uu!r zuX|ZO5RuHMCOxIM#kZxB9FGNJ*#M0Zc_=Oj;Z`O+w_+;U@D;wIDzZLFJBMpEoP=IV zK$Pv{AyOjrjrl#BQ@yT&v9~W>Ny7tmKZ>=-Q*ySBU;_UR7<4mBWz|*J{S-B z)udEu7IhfwKKwo~33A;@d1X=a`lJRe2K>Ka?@!1|)XZm`mpqCKKjJg80uKhoEd1~B z8yWK<&7i7#iL$tFhT=ah8^qSc%u6YIn3at2XjcpA5PyVC)XbZ zY+ux}Bn!t{^x$3?&X3I#-y##3+9u&Sbl;;blPQIw>`alQW^wW=| z%8#WHJFgGtw0>C*sEU>=YhF2g8H19Abk2zIA=|NlA?)-?Xv%6A_f&}px@O!~c+t*L zbIZ&am9f*4F`IuEc1fE`LU^-GC<6nR9rH-kPGM7e2uTdzx2L$9rf}O@K{Vu?&&@3j z+ym2p(}kQpBXLRHBaGpQeAI5F{Y6Ymayx$r^J8i8C}c0e3V}ecuIg>>pL@*zHpK<$ z4-eyq;4d8^rvf{BPgg%~&fhbO)QY)IVQHNG?lk=K`gqo>;0L0JbRUQt6XgslDv`pr z6JsUk_RUWA?e5Hr#FH1uBx_BMRLKwriOAtr6jE{q!SI0_ z?8tZ%Lt^c9V!OUWj(@SYmtI%wBu_2I%pcj2&Dxv2q<&X6=~hsIQpiSLhC04->#Z1g zCTP`IyJDrhzVV<&Y0M{(FpFMnxOZu1uvCwcf1+GEHidif?Lzvb_^WO_jRadXJeGv` z#|nkGS>Z@7)453n|MMH2lhkFYHW3-I$laQVh*sK=FGS;ybGtBl9>+FkBW_Y23$u^r z+cqR>ShrkUar=>%_YjJLK4O;p2bwgZFCOr}JuBA+KJGfSCuqlR1Qwlm13=|bk2Pd+@lb1=L2R(DsH^qafBMKP?eCs_E& z8sb!1BA*<#ONg*+j93$s>gfd%(53ytzpn zPugKuu-Tr&AArIhl^DKbuN3k=a#m1#oWAxHQLK>tiUtC3I^Vny_ezfdZi+5G9 z=gT+bVEy8jEvp)jPD?V6j7{_V3a@AP2 z2oynFaLQ%oK2-n-$JUDT3sv&Jo|qQg>8>uGsdJnwUYU*Q1DIWhpH>yt6u?ZRD{z!%LP2G>2fY-ACNBZYUeRH#!v&-e{>slGo|Fd_#S& z2ejyxLtC%O%KCSaax=bqg52~W6M?bNLI z7QQ=TCVoL{@d>XEHEf!Lio~r+;9&75?KZIJ;zve|`h?m9*U7EuA~;B#h9E&|HrABc+rZvNKy zeb^n!P`)V0g0EtfVbVg~`_IUCj%9qG5XW5!mH@VIFj!5VLj@OZid4{tBwmHr=2>y( zqQ(35MB#d_`C90p$GSL0hU3S0;t=2%yXbO*=;dvdgr?Ht*&73qIXzbWkJ3>r+xzdi zsCPTYTnt&SHu1E{c*m#5DS9TWT&-8Lqgqk{k`fwX5JE^G^4iIzVi>EwR%2{+=YtL) z({zcOSUqnC!Tv-w80P~s%&6VYw}1H6%1=xXFsqR2pC8du!Q0npHT)B$@l^4$N>;Tx zTl@9oK)Vr1Ia}u8SJB18<-MpHZx=#>9oH(`-df5iAzjdn1h^G2^VWO~ICrenB8QDR z7_s|wjOm%5+gWIT{=j4rZ*FwmTv>DT#eNaXz>2B&8&VLluQEtv`^pE0NvZzaapJ4tf8)@kU1OZ&He}g_s!}SnsJ&-L_$KN}J zYoJuCu0t{w+;-K3jA)}D@kLCNa3@*yJROURXp!(xLxq065ke89Go&cn0+ezLw!Lxd zVTYoUGotjx2L^Mh)7^pD&i%dbWxO{!eUNkyh2B&QB!D=pip{F>pYGE&Xo}uC>olLQ z@2=KcIZG&N%eVKh4R?s@#0L*6Iqt0?|;BL9NtMApNvuzFGSY zbJZ%2i*p^HzKt`O)ckdluY;haSmexI1W1Y&gH$P~<2*z0$>p?5~DT)0a&`_wo4G zA(IN_^thCfK@==9+k|o`)8oOxjms35wP=L1^z;N_A*e39J%d#4Q%TVo+5xb`B&9Q$ zD?%)t1OjvDFKSjEs}mAWrX&k)DIWt(a=fwQxfVOdIcZj@MVGx?=mpPAYd7&g1bQ9V z5(G5ws;Oy4y!bRbbeu7jooBtCBkv$`RI#s`pm*h&f+&45qKeHdne=@m*UaJzUZBuy zG!06Xk?v~kZZd1N$PA1nvaVU>>oWbU6!tM&AAW(_r7zBPE(KRvQ8&6K7TNnho_!A; zv~YXF;$7A{2ZD-Yi-k#}b1Gv4T@%z@40dsp&qnOl>ubL;V^F5MkXV{+zNO>6_({a% zVD$a1gdC{!_>q-H{?MSUVUY!~?}KMClZ|L=NR@=!(0}^W(|;^S7(Fz!x5ERz>lx)D zLhORy^w40^DX!wx(7*Kc`zEB{$$OYJ?>&-#=U$|=+Y&U#B}pH<@tM0;vbKM1>s+1< z&=1+9R0|oOzFGn)iaP)DV10UC5#|%EUk0a5ke}i5aEwapLn4vey2o(S6XZ*#;RCy` z;_m_Te{f!j^jG|=Vx;!pC%P3@3GWTRslLVQaQbzuo(6IJePv~ za=A9g!>E`J0^lBw{_H@$&J|b%8g{hcEU^Uw6b*sqlH;Of?_A!Gk4%s@8I)ey;`Urr zLyc8e;M!mu@Cz8Cl=rr>mbAB^W%r##vZsDz@&kd}B5C_`Y}kQ8s*ziy7dd-&iV{|9 z*J4en0RbnJjqb}KIFws+t=vSLCW<;S_=6t#7W(hIt50P!(;BEshQb}fJAH<^#Q6J% z?QA2nJb@iN66xyyVE|0wbb=CYjHT{2(9~$Jxm>ZGEPN{TEt%o8g<9zmlPK-R=G5J( zQOb+#x3j}HYASNoMjZwq3oA6#Ut+Ow0uQtAem+|MFlv`+WNdU*1-h!P;ebW7_Ca_u2&YhS3FIJIBXZ4!#T>$W(fF+uJD)Dh`dMmf zYcBtN9!k2w-@A&9_e*9C7{t8kbU;b4sl58DwSZW#vqYreKH;X|A374fgbVlELUIft zr6##qh__SGos+cRawb(S=M=_(Q*&<*9Cfz$+RY^X{5Dj?ySqRla4;dqFulqSgqUC z(mKS+wL}G-bTD^X?eo_V$ncX? z!Vfqf^Cd}^kP$S5Y!RbAfL<;UPVU;i z92M{!5CCP|Ey`}si`gPF{)uDO3vhx`a#i&lq-9}Pj*~?-RuW<;6)H`~S(Z=;yCh(8 z(ObID%OfGMHEzn4hDr?h)E~D`i(CtZycPB&+-j&k$XKw3zi?!`?PJ#US zFg&vIJ5K8~^~dbd5npM?`PnAS*s&=KYJ$PoVd^v}cH!!BOJ(0CgBloO#um<&p#Ui` ziyZ<_wT^ExqB>-j88cdvUpKN-9M=yi#M;rL;CkGmo$8BNV3F$cu;A?H!beg5H-mxH zkobS<1SX(PtjG_SG5yO=0J_3I+$2zVAq40Q0{q;q0El} z5^?iDw;;#h4jjXOhhyY$cV1*95a2Cu3XURK8slL-0`P0^n=6a6fucr#gwI&C4#C zKtaB=*&ybQ0xDu+e_vCO0eaYa4!7iQMV{#dn+T@eD>m(tNaJ%Q;eZJt;Y{Pm$Ve#s zR9;je5_)@^Q@a$(&tj7DrkpEIKrA+x^?ah&vi{t5X%;%YFvJ#k^MxX!b%m7$%WmH-)m211Vdg18HC9JwYgWCN4=$p7#!4hwCNeNSDq2^Pu3!L5?4{WZ7SK|g|t#9^FxKf(!OW=xH3So6)Cn=J%#UQdU9St zh$(V*fqrhARc-lv%64Rn1XaX>u%0~m2Rrn-tySWt#QIVT&w2b#NDi$_)zmG(W2Q$o z(ENIzN;rOP#7Vls$;ZbBY%QWU2nxakdc>I#ED$dqb!?wg`|H1j`tl7Gl!0lL$%VuvQ-I5lU`u&yv6G!)=Dz6S!!$hVGsW+7!-Of zgHuE~=$U~P02SwVTqoLe0e2xN2ocIHpw`6YiyP|GT%(xLRw zeL9kigFhQ9;Sl*8G|WDzD4}^3a^oUFgyJzx!rmUv%?=>Mu$u3(XlqIy4^2Sh*w-!T z4Qs3NJG{6ftw5Bq?e>>?5!2t?oE%S9p&$`04~oySw-aG&z(RH7=^>(`=rAMj$5Y0D z2<7mLf>!aqlB*$bJ5T@YPAZlG9!#M*NDDJoO^QGCFflJadFY_FqZMQCIm;X5B!+2grnb8uF zg4W!ng4{&C@bvADT-{dTVzCl4#{mgqY@f2d_>p}Y25xPKlyo-!gl;@yn~%kUK%s%P zNFdND?pnY3trf$e{m}4vtPZ<7wZL*z@+Pb;)!nKT_yyMQ73_mSYvGlhGJNvBcwC~Thx?5iq zz=GLg$ticUK`4FO)li^mV*SNbI+8i)eQ<}v<%C-iH?q*zW-j__u=XGhx6zi3|?GZfF}?hH`nO@lsI*F z{Tel7d444 zyaHlMmkIhn1RD8QndN^peI4@M@}IKKti^3VQSQNe+Vbvcb9ux%S)((+EzD9ekep?h zy?ii%YraR41SjgG5{OD`CBVyjE_Gz_%>%pKoW&b|Ml{xG`{l6A`X8UDw+O%=uG$7 zU_^ez}OU?*oEbh!HgTDhvLrV%9Gd{;P|8C$(FbKjyK=w5~KkP9MI-Wy(5YTfN zqZ}E%k~y$m)Jc~ru9Kkq_Q6i4gU~61$)7l-z_qZKn8S-E(bbaF8Mz@bh7SQ2rZN1@fvMtIPoCVtIUL`>=L- z<{9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extended_industrialization/textures/gui/container/tesla_network_bar.png b/src/main/resources/assets/extended_industrialization/textures/gui/container/tesla_network_bar.png index 5fd4d7703f35b09c6fac5afcd8d1cad183ea68a7..f4206dbaa01f460a10cbad4f8b2377231fbe02bb 100644 GIT binary patch delta 950 zcmV;n14;a)2F?c|iBL{Q4GJ0x0000DNk~Le0001f0000I2nGNE0G$Y4#K5<|;90t)af5yvaKT_#D-pzO&3nraam^mI!FPF=5>`K4iUvNHd z>iGNbXy(SojjIbc=XK`jbX>uH(NID<((%hUov77n=%g6k)al73Or5#1HW5efuZx4v zYhFhK*Rg>;qM-!)5voSa@sSgq>2x|;$76#uY;67%$KS3kJRq-g2G>!6e`Yk4KwkyX z0vvrfjcLprKMmP(jz1}&O=mauYVWevKpXdOok$(^0ePJ{Tt@|(sQrp zi>=W}>P#w?P@S95*#j-$ay?XGI=CLql;d&k zN%fOF@0{Za%Jpe;JBLC}+T6||on>=8!R<+VJ#kSwgh>zUf9Xq>Km81$Ui~?!p0_$4 zPS5A_a@=aQ(51Q=LNyZM%r&=jyv`iDhSH|3xYLoCZ1E2pwDVxu+|KbjXORIf2^^l* z=^*HKyK+#iR%Ne&Lc)S@uh)x4b4)rEa&!i&Iv)@7;`ZIQE9pQ3{Es?&gH1VJ4I%yk Yv1~u6ty;LY3;+NC07*qoM6N<$f`$>s2LJ#7 delta 779 zcmV+m1N8jP2c-rfiBL{Q4GJ0x0000DNk~Le0001N0000I2nGNE0KQH;e32n2e+&Qs z3k(52KqANh00O#6L_t(oN9~r)Y7PVf=FXXOXYQo!M(+;}_ufh7mosy6 zKT2^N2Sl}6T@DKXdH3ji>>9Yof4t9ol3{uh zhYlj|@L@Y_aPW`PT@k*%+wh(xse;k+sH#~yn}KKvjAyf1ZqbkorhgXFrp)o4q$g1@ z6syr_=utMEP6v&c6eW|lx$;e!<2`9ls$lhcJ?M73`ijhOIHd1nCWIf$f^W(k?-4vG z7)61@2O)jtyt$g2sTAImfA)xn4q!WYxE?qN{F`()LEakA;hv{od%^p?y9M)4}tyWVN1$5}ZxZm%qOX@-nNCs110?UDI$>7*L z!(T7eLp|Esa(dZ$`Mi11y|9OJaxE73;C^6pWbS$>4x-oVsW4BAe?`E{Fe7iXwZT14 ze(pLK%Y=K7k880^xQAXga>6WoyS^^YLXPPG$O8`Xe#{yk8G9MQuZv+@tEII$D{P+M z+uQMexg1l=Kj(4P`H<(b@{v4=FG_*p=>m$My9Sa&@asi`Jp5r?UlIk+r|A6@SLLDL zKI@?aU@r^9Q1u6cVF8+z)0AH+002ov JPDHLkV1o5?c8dT2 From 464d7e4d3d133bf6a1812be8e26ac02820323ddb Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 05:38:42 -0500 Subject: [PATCH 147/159] Tesla singing sound under records sound source category --- .../client/sound/TeslaCoilSingingSound.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java b/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java index 5585e04d..15f95138 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java +++ b/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java @@ -12,7 +12,7 @@ public final class TeslaCoilSingingSound extends AbstractTickableSoundInstance public TeslaCoilSingingSound(TeslaCoilMachineBlockEntity machine) { - super(EISounds.TESLA_COIL_LOOP.get(), SoundSource.BLOCKS, SoundInstance.createUnseededRandom()); + super(EISounds.TESLA_COIL_LOOP.get(), SoundSource.RECORDS, SoundInstance.createUnseededRandom()); var pos = machine.getBlockPos().getCenter(); From 03d7d601c4dc4bd687ff0e05a5bf38cb05f2ef02 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 06:45:45 -0500 Subject: [PATCH 148/159] Make lethal tesla coil make constant arcs and play buzzing sound --- .../extended_industrialization/EISounds.java | 3 +- .../client/ber/tesla/TeslaPartRenderer.java | 16 +++-- .../ber/tesla/behavior/TeslaArcInstance.java | 39 +++++++++-- .../client/model/tesla/TeslaUnbakedModel.java | 19 +++++- .../client/sound/TeslaCoilLoopSound.java | 62 ++++++++++++++++++ .../client/sound/TeslaCoilSingingSound.java | 52 --------------- .../LethalTeslaCoilMachineBlockEntity.java | 38 +++++++++-- .../tesla/SingingTeslaCoilComponent.java | 16 +++-- .../packet/EntitiesElectrocutedPacket.java | 7 -- .../proxy/EIClientProxy.java | 11 ++-- .../proxy/EIProxy.java | 14 +++- .../models/tesla/lethal_tesla_coil.json | 3 +- .../extended_industrialization/sounds.json | 9 ++- .../{block/tesla_coil => tesla}/loop.ogg | Bin 14 files changed, 197 insertions(+), 92 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilLoopSound.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java rename src/main/resources/assets/extended_industrialization/sounds/{block/tesla_coil => tesla}/loop.ogg (100%) diff --git a/src/main/java/net/swedz/extended_industrialization/EISounds.java b/src/main/java/net/swedz/extended_industrialization/EISounds.java index a45ea27e..486a142c 100644 --- a/src/main/java/net/swedz/extended_industrialization/EISounds.java +++ b/src/main/java/net/swedz/extended_industrialization/EISounds.java @@ -11,7 +11,8 @@ public final class EISounds { private static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(BuiltInRegistries.SOUND_EVENT, EI.ID); - public static final Supplier TESLA_COIL_LOOP = createVariableRangeEvent("block.tesla_coil.loop"); + public static final Supplier TESLA_COIL_LOOP = createVariableRangeEvent("tesla.loop"); + public static final Supplier TESLA_COIL_SINGING = createVariableRangeEvent("tesla.singing"); private static Supplier createVariableRangeEvent(String name) { diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java index b6194e68..3cb8c634 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java @@ -146,11 +146,17 @@ private static void renderArcs(MachineBlockEntity machine, TeslaBakedModel tesla { continue; } - int ticks = points.getFirst().timeActive(); - int halfPoints = points.size() / 2; - if(ticks == 0 || ticks == 1) + boolean instant = arcs.duration() == 0; + float alpha = 0.9f; + if(!instant) { - points = points.subList(0, (int) (halfPoints * partialTick) + (ticks == 1 ? halfPoints : 0)); + int ticks = points.getFirst().timeActive(); + int halfPoints = points.size() / 2; + if(ticks == 0 || ticks == 1) + { + points = points.subList(0, (int) (halfPoints * partialTick) + (ticks == 1 ? halfPoints : 0)); + } + alpha *= (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1); } matrices.pushPose(); @@ -158,7 +164,7 @@ private static void renderArcs(MachineBlockEntity machine, TeslaBakedModel tesla var consumer = buffer.getBuffer(EIClientRenderTypes.TESLA_ARC); TeslaArcRenderer.renderArc( matrices, consumer, points, (i) -> (1 - i) * arcs.widthScale(), - 1f, 1f, 1f, 0.9f * (ticks == 0 ? partialTick : ticks == arcs.duration() ? (1 - partialTick) : 1) + 1f, 1f, 1f, alpha ); matrices.popPose(); diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java index dcf3bdc7..55cd949a 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java @@ -1,8 +1,13 @@ package net.swedz.extended_industrialization.client.ber.tesla.behavior; import com.google.common.collect.Lists; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; import net.swedz.extended_industrialization.client.model.tesla.TeslaBakedModel; @@ -112,14 +117,36 @@ public void tick() var tesla = this.tesla(); var arcs = tesla.arcs(); - if(arcs != null && arcs.hasRandomBounds() && trails.size() < arcs.count()) + if(arcs != null) { - int maxCreate = arcs.count() - trails.size(); - int create = Math.max(Math.min(arcs.count() / 2, maxCreate), 1); - for(int i = 0; i < create; i++) + if(arcs.attachToNearbyEntitiesRange() > 0) { - Vec3 target = tesla.arcs().worldRandomPointInBounds(RANDOM, worldPosition, facingDirection.get()); - this.createArc(this.closestOrigin(target), target); + int range = arcs.attachToNearbyEntitiesRange(); + var level = Minecraft.getInstance().level; + var box = new AABB( + worldPosition.subtract(range, range, range), + worldPosition.add(range, range, range) + ); + var entities = level.getEntities( + (Entity) null, + box, + (entity) -> entity.isAlive() && entity instanceof LivingEntity && !(entity instanceof Player) + ); + for(var entity : entities) + { + Vec3 target = entity.getBoundingBox().getCenter(); + this.createArc(this.closestOrigin(target), target); + } + } + if(arcs.hasRandomBounds() && trails.size() < arcs.count()) + { + int maxCreate = arcs.count() - trails.size(); + int create = Math.max(Math.min(arcs.count() / 2, maxCreate), 1); + for(int i = 0; i < create; i++) + { + Vec3 target = tesla.arcs().worldRandomPointInBounds(RANDOM, worldPosition, facingDirection.get()); + this.createArc(this.closestOrigin(target), target); + } } } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java index c5b52de7..dff2bc1b 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java @@ -66,12 +66,15 @@ private static Plasma deserialize(JsonObject json, JsonDeserializationContext co Assert.that(json.has("scale"), "A tesla model's plasma must have a \"scale\" member.", JsonParseException::new); float scale = json.get("scale").getAsFloat(); + Assert.that(scale > 0, "A tesla model's plasma must have a > 0 \"scale\" member.", JsonParseException::new); Assert.that(json.has("speed"), "A tesla model's plasma must have a \"speed\" member.", JsonParseException::new); float speed = json.get("speed").getAsFloat(); + Assert.that(speed >= 0, "A tesla model's plasma must have a non-negative \"speed\" member.", JsonParseException::new); Assert.that(json.has("texture_scale"), "A tesla model's plasma must have a \"texture_scale\" member.", JsonParseException::new); float textureScale = json.get("texture_scale").getAsFloat(); + Assert.that(textureScale > 0, "A tesla model's plasma must have a > 0 \"texture_scale\" member.", JsonParseException::new); return new Plasma(elements, offset, scale, speed, textureScale); } @@ -101,6 +104,7 @@ public AABB toAABB() public record Arcs( Optional randomBoundsInclude, Optional randomBoundsExclude, + int attachToNearbyEntitiesRange, List origins, float widthScale, float minVariance, float maxVariance, @@ -123,6 +127,13 @@ private static Arcs deserialize(JsonObject json, JsonDeserializationContext cont randomBoundsExclude = Optional.of(ArcBounds.deserialize(randomBoundsJson.getAsJsonObject("exclude"), context)); } + int attachToNearbyEntities = 0; + if(json.has("attach_to_nearby_entities")) + { + attachToNearbyEntities = json.get("attach_to_nearby_entities").getAsInt(); + Assert.that(attachToNearbyEntities >= 0, "A tesla model's arcs must have a non-negative \"attach_to_nearby_entities\" member.", JsonParseException::new); + } + Assert.that(json.has("origins"), "A tesla model's arcs must have an \"origins\" member.", JsonParseException::new); List origins = Lists.newArrayList(); for(JsonElement element : GsonHelper.getAsJsonArray(json, "origins")) @@ -140,20 +151,26 @@ private static Arcs deserialize(JsonObject json, JsonDeserializationContext cont Assert.that(json.has("duration"), "A tesla model's arcs must have a \"duration\" member.", JsonParseException::new); int duration = json.get("duration").getAsInt(); + Assert.that(duration >= 0, "A tesla model's arcs must have a non-negative \"duration\".", JsonParseException::new); + Assert.that(attachToNearbyEntities == 0 || duration == 0, "A tesla model's arcs must have a \"duration\" = 0 when \"attach_to_nearby_entities\" is > 0.", JsonParseException::new); Assert.that(json.has("count"), "A tesla model's arcs must have a \"count\" member.", JsonParseException::new); int count = json.get("count").getAsInt(); + Assert.that(count > 0, "A tesla model's arcs must have a > 0 \"count\" member.", JsonParseException::new); Assert.that(json.has("min_segments"), "A tesla model's arcs must have a \"min_segments\" member.", JsonParseException::new); int minSegments = json.get("min_segments").getAsInt(); + Assert.that(minSegments > 0, "A tesla model's arcs must have a > 0 \"min_segments\" member.", JsonParseException::new); Assert.that(json.has("max_segments"), "A tesla model's arcs must have a \"max_segments\" member.", JsonParseException::new); int maxSegments = json.get("max_segments").getAsInt(); + Assert.that(maxSegments > 0, "A tesla model's arcs must have a > 0 \"max_segments\" member.", JsonParseException::new); Assert.that(json.has("segment_splits"), "A tesla model's arcs must have a \"segment_splits\" member.", JsonParseException::new); int segmentSplits = json.get("segment_splits").getAsInt(); + Assert.that(segmentSplits > 0, "A tesla model's arcs must have a > 0 \"segment_splits\" member.", JsonParseException::new); - return new Arcs(randomBoundsInclude, randomBoundsExclude, origins, widthScale, minVariance, maxVariance, duration, count, minSegments, maxSegments, segmentSplits); + return new Arcs(randomBoundsInclude, randomBoundsExclude, attachToNearbyEntities, origins, widthScale, minVariance, maxVariance, duration, count, minSegments, maxSegments, segmentSplits); } public Arcs diff --git a/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilLoopSound.java b/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilLoopSound.java new file mode 100644 index 00000000..c4331ad2 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilLoopSound.java @@ -0,0 +1,62 @@ +package net.swedz.extended_industrialization.client.sound; + +import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; +import net.minecraft.client.resources.sounds.SoundInstance; +import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; + +import java.util.function.Supplier; + +public final class TeslaCoilLoopSound extends AbstractTickableSoundInstance +{ + private final Supplier shouldStop; + private final Supplier getPitch; + private final Runnable onStop; + + public TeslaCoilLoopSound( + BlockPos origin, SoundEvent sound, SoundSource source, + Supplier shouldStop, Supplier getPitch, + Runnable onStop + ) + { + super(sound, source, SoundInstance.createUnseededRandom()); + + var pos = origin.getCenter(); + + this.x = pos.x(); + this.y = pos.y(); + this.z = pos.z(); + this.looping = true; + this.volume = 0; + + this.shouldStop = shouldStop; + this.getPitch = getPitch; + this.onStop = onStop; + } + + @Override + public void tick() + { + if(this.isStopped()) + { + return; + } + + if(shouldStop.get()) + { + this.stop(); + onStop.run(); + return; + } + + volume = 1; + pitch = getPitch.get(); + } + + @Override + public boolean canStartSilent() + { + return true; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java b/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java deleted file mode 100644 index 15f95138..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/sound/TeslaCoilSingingSound.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.swedz.extended_industrialization.client.sound; - -import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; -import net.minecraft.client.resources.sounds.SoundInstance; -import net.minecraft.sounds.SoundSource; -import net.swedz.extended_industrialization.EISounds; -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; - -public final class TeslaCoilSingingSound extends AbstractTickableSoundInstance -{ - private final TeslaCoilMachineBlockEntity machine; - - public TeslaCoilSingingSound(TeslaCoilMachineBlockEntity machine) - { - super(EISounds.TESLA_COIL_LOOP.get(), SoundSource.RECORDS, SoundInstance.createUnseededRandom()); - - var pos = machine.getBlockPos().getCenter(); - - this.x = pos.x(); - this.y = pos.y(); - this.z = pos.z(); - this.looping = true; - this.volume = 0; - - this.machine = machine; - } - - @Override - public void tick() - { - if(this.isStopped()) - { - return; - } - - var singing = machine.getSingingComponent(); - if(machine.isRemoved() || !singing.shouldPlay()) - { - this.stop(); - return; - } - - volume = 1; - pitch = singing.getPitch(); - } - - @Override - public boolean canStartSilent() - { - return true; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index f503e4dc..05c3f4f4 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -25,6 +25,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; @@ -35,6 +36,7 @@ import net.minecraft.world.phys.AABB; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIDamageTypes; +import net.swedz.extended_industrialization.EISounds; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.EITooltips; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; @@ -139,14 +141,42 @@ private AABB getDamageArea() ); } + private List getEntitiesInDamageArea() + { + return level.getEntities( + (Entity) null, + this.getDamageArea(), + (entity) -> entity.isAlive() && entity instanceof LivingEntity && !(entity instanceof Player) + ); + } + private long tick; + private boolean buzzing; + @Override public void tick() { if(level.isClientSide()) { - Proxies.get(EIProxy.class).tickTesla(worldPosition); + var proxy = Proxies.get(EIProxy.class); + + proxy.tickTesla(worldPosition); + + if(!buzzing && isActive.isActive) + { + var entities = this.getEntitiesInDamageArea(); + if(!entities.isEmpty()) + { + buzzing = true; + proxy.startTeslaCoilLoopSound( + worldPosition, EISounds.TESLA_COIL_LOOP.get(), SoundSource.BLOCKS, + () -> this.isRemoved() || !isActive.isActive || this.getEntitiesInDamageArea().isEmpty(), + () -> 1f, + () -> buzzing = false + ); + } + } return; } @@ -163,11 +193,7 @@ public void tick() { energy.consumeEu(energyCost, Simulation.ACT); var source = EIDamageTypes.tesla(level, worldPosition.getCenter()); - var entities = level.getEntities( - (Entity) null, - this.getDamageArea(), - (entity) -> entity.isAlive() && entity instanceof LivingEntity && !(entity instanceof Player) - ); + var entities = this.getEntitiesInDamageArea(); if(!entities.isEmpty()) { var entityIds = new IntArrayList(); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java index ac69dd04..49522293 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java @@ -4,9 +4,11 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.NoteBlock; import net.minecraft.world.level.block.state.BlockState; +import net.swedz.extended_industrialization.EISounds; import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.api.Assert; @@ -58,16 +60,20 @@ private int getWorldNote() return state.is(Blocks.NOTE_BLOCK) ? state.getValue(NoteBlock.NOTE) : -1; } - private boolean running; + private boolean buzzing; public void tickClient() { Assert.that(machine.hasLevel() && machine.getLevel().isClientSide()); - boolean originalRunning = running; - running = this.shouldPlay(); - if(running && !originalRunning) + if(!buzzing && this.shouldPlay()) { - Proxies.get(EIProxy.class).startTeslaCoilSingingSound(machine); + buzzing = true; + Proxies.get(EIProxy.class).startTeslaCoilLoopSound( + machine.getBlockPos(), EISounds.TESLA_COIL_SINGING.get(), SoundSource.RECORDS, + () -> machine.isRemoved() || !machine.getSingingComponent().shouldPlay(), + () -> machine.getSingingComponent().getPitch(), + () -> buzzing = false + ); } } diff --git a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java index 0787727a..db3a4768 100644 --- a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java +++ b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java @@ -9,16 +9,12 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EIClient; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.network.EICustomPacket; -import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.packet.PacketContext; -import net.swedz.tesseract.neoforge.proxy.Proxies; public record EntitiesElectrocutedPacket(BlockPos origin, IntList entityIds) implements EICustomPacket { @@ -57,12 +53,9 @@ public void handle(PacketContext context) { spark(level, pos); } - Proxies.get(EIProxy.class).createTeslaArc(origin, pos); } } } - - level.playLocalSound(origin, SoundEvents.FIREWORK_ROCKET_TWINKLE, SoundSource.BLOCKS, 1, 2, false); } private static float sparkSpeed(LevelAccessor level) diff --git a/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java b/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java index 6f0e642f..9a711959 100644 --- a/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java +++ b/src/main/java/net/swedz/extended_industrialization/proxy/EIClientProxy.java @@ -2,14 +2,17 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EIClient; import net.swedz.extended_industrialization.client.ber.tesla.TeslaPartRenderer; -import net.swedz.extended_industrialization.client.sound.TeslaCoilSingingSound; -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; +import net.swedz.extended_industrialization.client.sound.TeslaCoilLoopSound; import net.swedz.tesseract.neoforge.proxy.ProxyEntrypoint; import net.swedz.tesseract.neoforge.proxy.ProxyEnvironment; +import java.util.function.Supplier; + @ProxyEntrypoint(environment = ProxyEnvironment.CLIENT) public class EIClientProxy extends EIProxy { @@ -40,8 +43,8 @@ public void createTeslaArc(BlockPos blockPos, Vec3 target) } @Override - public void startTeslaCoilSingingSound(TeslaCoilMachineBlockEntity machine) + public void startTeslaCoilLoopSound(BlockPos origin, SoundEvent sound, SoundSource source, Supplier shouldStop, Supplier getPitch, Runnable onStop) { - Minecraft.getInstance().getSoundManager().queueTickingSound(new TeslaCoilSingingSound(machine)); + Minecraft.getInstance().getSoundManager().queueTickingSound(new TeslaCoilLoopSound(origin, sound, source, shouldStop, getPitch, onStop)); } } diff --git a/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java b/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java index 6c86004d..c7931ac0 100644 --- a/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java +++ b/src/main/java/net/swedz/extended_industrialization/proxy/EIProxy.java @@ -1,11 +1,14 @@ package net.swedz.extended_industrialization.proxy; import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.phys.Vec3; -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; import net.swedz.tesseract.neoforge.proxy.Proxy; import net.swedz.tesseract.neoforge.proxy.ProxyEntrypoint; +import java.util.function.Supplier; + @ProxyEntrypoint public class EIProxy implements Proxy { @@ -17,7 +20,14 @@ public void createTeslaArc(BlockPos blockPos, Vec3 target) { } - public void startTeslaCoilSingingSound(TeslaCoilMachineBlockEntity machine) + public void startTeslaCoilLoopSound(BlockPos origin, SoundEvent sound, SoundSource source, Supplier shouldStop, Supplier getPitch, Runnable onStop) + { + } + + public final void startTeslaCoilLoopSound(BlockPos origin, SoundEvent sound, SoundSource source, Supplier shouldStop, Supplier getPitch) { + this.startTeslaCoilLoopSound(origin, sound, source, shouldStop, getPitch, () -> + { + }); } } diff --git a/src/main/resources/assets/extended_industrialization/models/tesla/lethal_tesla_coil.json b/src/main/resources/assets/extended_industrialization/models/tesla/lethal_tesla_coil.json index d4c870a8..70c2ec7e 100644 --- a/src/main/resources/assets/extended_industrialization/models/tesla/lethal_tesla_coil.json +++ b/src/main/resources/assets/extended_industrialization/models/tesla/lethal_tesla_coil.json @@ -57,6 +57,7 @@ "texture_scale": 32 }, "arcs": { + "attach_to_nearby_entities": 2, "origins": [ { "x": 0.35, @@ -102,7 +103,7 @@ "width_scale": 0.25, "min_variance": 0.2, "max_variance": 0.3, - "duration": 3, + "duration": 0, "count": 3, "min_segments": 2, "max_segments": 4, diff --git a/src/main/resources/assets/extended_industrialization/sounds.json b/src/main/resources/assets/extended_industrialization/sounds.json index 31834d71..5535bb13 100644 --- a/src/main/resources/assets/extended_industrialization/sounds.json +++ b/src/main/resources/assets/extended_industrialization/sounds.json @@ -1,8 +1,13 @@ { - "block.tesla_coil.loop": { + "tesla.loop": { + "sounds": [ + "extended_industrialization:tesla/loop" + ] + }, + "tesla.singing": { "sounds": [ { - "name": "extended_industrialization:block/tesla_coil/loop", + "name": "extended_industrialization:tesla/loop", "attenuation_distance": 48 } ] diff --git a/src/main/resources/assets/extended_industrialization/sounds/block/tesla_coil/loop.ogg b/src/main/resources/assets/extended_industrialization/sounds/tesla/loop.ogg similarity index 100% rename from src/main/resources/assets/extended_industrialization/sounds/block/tesla_coil/loop.ogg rename to src/main/resources/assets/extended_industrialization/sounds/tesla/loop.ogg From 2e39f584112ef0f5cb10d1a80db8b56b35d7efc6 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 06:47:35 -0500 Subject: [PATCH 149/159] Code clean up on isle 4 --- .../machines/component/tesla/SingingTeslaCoilComponent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java index 49522293..2f04a981 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java @@ -70,8 +70,8 @@ public void tickClient() buzzing = true; Proxies.get(EIProxy.class).startTeslaCoilLoopSound( machine.getBlockPos(), EISounds.TESLA_COIL_SINGING.get(), SoundSource.RECORDS, - () -> machine.isRemoved() || !machine.getSingingComponent().shouldPlay(), - () -> machine.getSingingComponent().getPitch(), + () -> machine.isRemoved() || !this.shouldPlay(), + this::getPitch, () -> buzzing = false ); } From 5037f1b52d412d201e30a8af1d541cad0ae69fab Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 06:48:37 -0500 Subject: [PATCH 150/159] Refactor --- .../client/ber/tesla/TeslaPartRenderer.java | 2 +- .../extended_industrialization/commands/EICommands.java | 6 +++--- .../item/teslalinkable/TeslaCalibratorItem.java | 4 ++-- .../item/teslalinkable/TeslaHandheldReceiverItem.java | 2 +- .../multiblock/teslatower/TeslaTowerBlockEntity.java | 8 ++++---- .../blockentity/tesla/TeslaCoilMachineBlockEntity.java | 8 ++++---- .../blockentity/tesla/TeslaReceiverHatchBlockEntity.java | 8 ++++---- .../tesla/TeslaReceiverMachineBlockEntity.java | 8 ++++---- .../component/tesla/{ => network}/TeslaNetwork.java | 6 +++--- .../component/tesla/{ => network}/TeslaNetworkCache.java | 2 +- .../component/tesla/{ => network}/TeslaNetworkHolder.java | 2 +- .../component/tesla/{ => network}/TeslaNetworkPart.java | 2 +- .../tesla/{ => network}/TeslaReceiverHolder.java | 4 ++-- .../tesla/{ => network}/TeslaTransferLimits.java | 2 +- .../tesla/{ => network}/receiver/PlayerTeslaReceiver.java | 2 +- .../tesla/{ => network}/receiver/TeslaReceiver.java | 8 ++++---- .../{ => network}/receiver/TeslaReceiverComponent.java | 4 ++-- .../tesla/{ => network}/receiver/TeslaReceiverState.java | 2 +- .../tesla/{ => network}/transmitter/TeslaTransmitter.java | 6 +++--- .../transmitter/TeslaTransmitterComponent.java | 6 +++--- .../guicomponent/teslanetwork/TeslaNetworkBar.java | 2 +- .../guicomponent/teslanetwork/TeslaNetworkBarClient.java | 2 +- .../mixin/TeslaNetworkHolderMinecraftServerMixin.java | 4 ++-- .../mixin/TeslaNetworkReceiversPlayerMixin.java | 6 +++--- 24 files changed, 53 insertions(+), 53 deletions(-) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/TeslaNetwork.java (97%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/TeslaNetworkCache.java (98%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/TeslaNetworkHolder.java (93%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/TeslaNetworkPart.java (98%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/TeslaReceiverHolder.java (86%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/TeslaTransferLimits.java (99%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/receiver/PlayerTeslaReceiver.java (98%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/receiver/TeslaReceiver.java (95%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/receiver/TeslaReceiverComponent.java (98%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/receiver/TeslaReceiverState.java (92%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/transmitter/TeslaTransmitter.java (95%) rename src/main/java/net/swedz/extended_industrialization/machines/component/tesla/{ => network}/transmitter/TeslaTransmitterComponent.java (98%) diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java index 3cb8c634..d66de72e 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java @@ -27,7 +27,7 @@ import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaArcInstance; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.client.model.tesla.TeslaBakedModel; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetworkPart; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.helper.CubeOverlayRenderHelper; import org.joml.Vector4f; diff --git a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java index 4aeb1f56..6a57c8e3 100644 --- a/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java +++ b/src/main/java/net/swedz/extended_industrialization/commands/EICommands.java @@ -11,9 +11,9 @@ import net.neoforged.neoforge.event.RegisterCommandsEvent; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkCache; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetworkCache; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetworkPart; import net.swedz.tesseract.neoforge.api.WorldPos; import static net.minecraft.commands.Commands.*; diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java index 4555a0ba..de7af661 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaCalibratorItem.java @@ -21,8 +21,8 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitter; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.tooltip.component.ItemStackTooltipComponent; diff --git a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java index 4f5ab959..796cca11 100644 --- a/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java +++ b/src/main/java/net/swedz/extended_industrialization/item/teslalinkable/TeslaHandheldReceiverItem.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitter; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.tooltip.component.ItemStackTooltipComponent; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java index 52570aee..a8ae85f8 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/multiblock/teslatower/TeslaTowerBlockEntity.java @@ -25,10 +25,10 @@ import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaTransferLimits; +import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitterComponent; import net.swedz.extended_industrialization.machines.guicomponent.EIModularSlotPanelSlots; import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.api.WorldPos; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 29a98f9b..4efc9c82 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -29,10 +29,10 @@ import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.machines.component.tesla.SingingTeslaCoilComponent; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitterComponent; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaTransferLimits; +import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitterComponent; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java index f5e87488..f13242c5 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverHatchBlockEntity.java @@ -21,10 +21,10 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiverComponent; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiverState; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.proxy.Proxies; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java index 1c41de6e..a32589e1 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaReceiverMachineBlockEntity.java @@ -28,10 +28,10 @@ import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverComponent; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiverComponent; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiverState; import net.swedz.extended_industrialization.machines.guicomponent.teslanetwork.TeslaNetworkBar; import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetwork.java similarity index 97% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetwork.java index 240edf10..bfb3b7c4 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetwork.java @@ -1,10 +1,10 @@ -package net.swedz.extended_industrialization.machines.component.tesla; +package net.swedz.extended_industrialization.machines.component.tesla.network; import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.MIEnergyStorage; import com.google.common.collect.Sets; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitter; import net.swedz.tesseract.neoforge.api.WorldPos; import java.util.Optional; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkCache.java similarity index 98% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkCache.java index 011e1b9f..609e9463 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkCache.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkCache.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla; +package net.swedz.extended_industrialization.machines.component.tesla.network; import com.google.common.collect.Maps; import net.minecraft.core.BlockPos; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkHolder.java similarity index 93% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkHolder.java index abc8bce7..402d9bff 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkHolder.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla; +package net.swedz.extended_industrialization.machines.component.tesla.network; /** * Injected into {@link net.minecraft.server.MinecraftServer} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkPart.java similarity index 98% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkPart.java index 60398fa1..6494606b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkPart.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkPart.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla; +package net.swedz.extended_industrialization.machines.component.tesla.network; import aztech.modern_industrialization.api.energy.CableTier; import net.swedz.tesseract.neoforge.api.WorldPos; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaReceiverHolder.java similarity index 86% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaReceiverHolder.java index 4331bb3c..b9d316e0 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaReceiverHolder.java @@ -1,6 +1,6 @@ -package net.swedz.extended_industrialization.machines.component.tesla; +package net.swedz.extended_industrialization.machines.component.tesla.network; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiver; import java.util.Collection; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaTransferLimits.java similarity index 99% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaTransferLimits.java index 3cfa46f5..e70e4f68 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaTransferLimits.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaTransferLimits.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla; +package net.swedz.extended_industrialization.machines.component.tesla.network; import aztech.modern_industrialization.api.energy.CableTier; import net.swedz.extended_industrialization.machines.blockentity.multiblock.teslatower.TeslaTowerTier; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/PlayerTeslaReceiver.java similarity index 98% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/PlayerTeslaReceiver.java index 5c9c036b..56a160f6 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/PlayerTeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/PlayerTeslaReceiver.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla.receiver; +package net.swedz.extended_industrialization.machines.component.tesla.network.receiver; import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.EnergyApi; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiver.java similarity index 95% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiver.java index 38e65b64..87a41464 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiver.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiver.java @@ -1,9 +1,9 @@ -package net.swedz.extended_industrialization.machines.component.tesla.receiver; +package net.swedz.extended_industrialization.machines.component.tesla.network.receiver; import aztech.modern_industrialization.api.energy.CableTier; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; -import net.swedz.extended_industrialization.machines.component.tesla.transmitter.TeslaTransmitter; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetworkPart; +import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitter; import net.swedz.tesseract.neoforge.api.WorldPos; public interface TeslaReceiver extends TeslaNetworkPart diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiverComponent.java similarity index 98% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiverComponent.java index a285dbb4..f4709031 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiverComponent.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla.receiver; +package net.swedz.extended_industrialization.machines.component.tesla.network.receiver; import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.MIEnergyStorage; @@ -8,7 +8,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.proxy.Proxies; import net.swedz.tesseract.neoforge.proxy.builtin.TesseractProxy; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverState.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiverState.java similarity index 92% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverState.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiverState.java index 60d5ae0e..d2f1e5ac 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/receiver/TeslaReceiverState.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/receiver/TeslaReceiverState.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla.receiver; +package net.swedz.extended_industrialization.machines.component.tesla.network.receiver; public enum TeslaReceiverState { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/transmitter/TeslaTransmitter.java similarity index 95% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/transmitter/TeslaTransmitter.java index ab0f1c1b..80052426 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitter.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/transmitter/TeslaTransmitter.java @@ -1,8 +1,8 @@ -package net.swedz.extended_industrialization.machines.component.tesla.transmitter; +package net.swedz.extended_industrialization.machines.component.tesla.network.transmitter; import aztech.modern_industrialization.api.energy.CableTier; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkPart; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetworkPart; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaTransferLimits; import net.swedz.tesseract.neoforge.api.WorldPos; public interface TeslaTransmitter extends TeslaNetworkPart, TeslaTransferLimits diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/transmitter/TeslaTransmitterComponent.java similarity index 98% rename from src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java rename to src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/transmitter/TeslaTransmitterComponent.java index bc1627e3..ec3476a3 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/transmitter/TeslaTransmitterComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/transmitter/TeslaTransmitterComponent.java @@ -1,4 +1,4 @@ -package net.swedz.extended_industrialization.machines.component.tesla.transmitter; +package net.swedz.extended_industrialization.machines.component.tesla.network.transmitter; import aztech.modern_industrialization.api.energy.CableTier; import aztech.modern_industrialization.api.energy.MIEnergyStorage; @@ -10,8 +10,8 @@ import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.swedz.extended_industrialization.machines.component.itemslot.TeslaTowerUpgradeComponent; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetwork; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaTransferLimits; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaTransferLimits; import net.swedz.tesseract.neoforge.api.WorldPos; import java.util.List; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java index 275d6b6a..de0120bd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBar.java @@ -5,7 +5,7 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiverState; import net.swedz.tesseract.neoforge.api.WorldPos; import java.util.Optional; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java index 41b66c0b..d5eb7b90 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/guicomponent/teslanetwork/TeslaNetworkBarClient.java @@ -13,7 +13,7 @@ import net.minecraft.resources.ResourceLocation; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIText; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiverState; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiverState; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.helper.ComponentHelper; diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java index babaa9db..3bf76c96 100644 --- a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkHolderMinecraftServerMixin.java @@ -1,8 +1,8 @@ package net.swedz.extended_industrialization.mixin; import net.minecraft.server.MinecraftServer; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkCache; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaNetworkHolder; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetworkCache; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetworkHolder; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java index 87f51ac8..087efb76 100644 --- a/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java +++ b/src/main/java/net/swedz/extended_industrialization/mixin/TeslaNetworkReceiversPlayerMixin.java @@ -12,9 +12,9 @@ import net.minecraft.world.level.Level; import net.swedz.extended_industrialization.EIComponents; import net.swedz.extended_industrialization.item.teslalinkable.TeslaHandheldReceiverItem; -import net.swedz.extended_industrialization.machines.component.tesla.TeslaReceiverHolder; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.PlayerTeslaReceiver; -import net.swedz.extended_industrialization.machines.component.tesla.receiver.TeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaReceiverHolder; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.PlayerTeslaReceiver; +import net.swedz.extended_industrialization.machines.component.tesla.network.receiver.TeslaReceiver; import net.swedz.extended_industrialization.proxy.modslot.EIModSlotProxy; import net.swedz.tesseract.neoforge.api.WorldPos; import net.swedz.tesseract.neoforge.proxy.Proxies; From cc8e604d5205d9ae89a5ef83f6e072b4d4ac4add Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 07:08:28 -0500 Subject: [PATCH 151/159] Refactor --- src/main/resources/interfaces.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/interfaces.json b/src/main/resources/interfaces.json index b1a321cf..af1705ca 100644 --- a/src/main/resources/interfaces.json +++ b/src/main/resources/interfaces.json @@ -1,8 +1,8 @@ { "net/minecraft/server/MinecraftServer": [ - "net/swedz/extended_industrialization/machines/component/tesla/TeslaNetworkHolder" + "net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetworkHolder" ], "net/minecraft/world/entity/player/Player": [ - "net/swedz/extended_industrialization/machines/component/tesla/TeslaReceiverHolder" + "net/swedz/extended_industrialization/machines/component/tesla/network/TeslaReceiverHolder" ] } \ No newline at end of file From 255b7b8c3d8e8770ef85cbe6ad826d7115ba8d20 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 07:37:24 -0500 Subject: [PATCH 152/159] Use dedicated components to handle buzzing and damaging --- .../ber/tesla/behavior/TeslaArcInstance.java | 1 + .../LethalTeslaCoilMachineBlockEntity.java | 90 ++------- .../tesla/TeslaCoilMachineBlockEntity.java | 2 +- .../tesla/LethalTeslaCoilComponent.java | 182 ++++++++++++++++++ .../tesla/SingingTeslaCoilComponent.java | 84 ++++---- .../component/tesla/TeslaBuzzing.java | 39 ++++ 6 files changed, 289 insertions(+), 109 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzing.java diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java index 55cd949a..f31e9771 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java @@ -138,6 +138,7 @@ public void tick() this.createArc(this.closestOrigin(target), target); } } + if(arcs.hasRandomBounds() && trails.size() < arcs.count()) { int maxCreate = arcs.count() - trails.size(); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index 05c3f4f4..3ba08764 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -17,30 +17,21 @@ import aztech.modern_industrialization.machines.gui.MachineGuiParameters; import aztech.modern_industrialization.machines.guicomponents.EnergyBar; import aztech.modern_industrialization.machines.models.MachineModelClientData; -import aztech.modern_industrialization.util.Simulation; import aztech.modern_industrialization.util.Tickable; import com.google.common.collect.Lists; -import it.unimi.dsi.fastutil.ints.IntArrayList; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.phys.AABB; import net.swedz.extended_industrialization.EI; -import net.swedz.extended_industrialization.EIDamageTypes; -import net.swedz.extended_industrialization.EISounds; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.EITooltips; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; -import net.swedz.extended_industrialization.network.packet.EntitiesElectrocutedPacket; +import net.swedz.extended_industrialization.machines.component.tesla.LethalTeslaCoilComponent; import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; @@ -73,6 +64,8 @@ public static float getDamageAmount(CableTier tier) private final EnergyComponent energy; private final MIEnergyStorage insertable; + private final LethalTeslaCoilComponent lethal; + public LethalTeslaCoilMachineBlockEntity(BEP bep) { super( @@ -89,7 +82,16 @@ public LethalTeslaCoilMachineBlockEntity(BEP bep) energy = new EnergyComponent(this, () -> 30 * 20 * casing.getCableTier().eu); insertable = energy.buildInsertable(casing::canInsertEu); - this.registerComponents(isActive, redstoneControl, casing, energy); + lethal = new LethalTeslaCoilComponent( + this, + () -> getDamageAmount(casing.getCableTier()), + energy, + () -> getEnergyCost(casing.getCableTier()), + () -> EI.config().lethalTeslaCoil().range(), + () -> DAMAGE_INTERVAL + ); + + this.registerComponents(isActive, redstoneControl, casing, energy, lethal); this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(81, 34), energy::getEu, energy::getCapacity)); @@ -131,52 +133,13 @@ public EnergyAccess getEnergyComponent() return energy; } - private AABB getDamageArea() - { - int range = EI.config().lethalTeslaCoil().range(); - var center = worldPosition.getCenter(); - return new AABB( - center.subtract(range, range, range), - center.add(range, range, range) - ); - } - - private List getEntitiesInDamageArea() - { - return level.getEntities( - (Entity) null, - this.getDamageArea(), - (entity) -> entity.isAlive() && entity instanceof LivingEntity && !(entity instanceof Player) - ); - } - - private long tick; - - private boolean buzzing; - @Override public void tick() { if(level.isClientSide()) { - var proxy = Proxies.get(EIProxy.class); - - proxy.tickTesla(worldPosition); - - if(!buzzing && isActive.isActive) - { - var entities = this.getEntitiesInDamageArea(); - if(!entities.isEmpty()) - { - buzzing = true; - proxy.startTeslaCoilLoopSound( - worldPosition, EISounds.TESLA_COIL_LOOP.get(), SoundSource.BLOCKS, - () -> this.isRemoved() || !isActive.isActive || this.getEntitiesInDamageArea().isEmpty(), - () -> 1f, - () -> buzzing = false - ); - } - } + Proxies.get(EIProxy.class).tickTesla(worldPosition); + lethal.tickBuzzing(); return; } @@ -184,28 +147,7 @@ public void tick() if(redstoneControl.doAllowNormalOperation(this)) { - float damage = getDamageAmount(casing.getCableTier()); - if(damage > 0) - { - long energyCost = getEnergyCost(casing.getCableTier()); - active = energy.consumeEu(energyCost, Simulation.SIMULATE) == energyCost; - if(active && tick++ % DAMAGE_INTERVAL == 0) - { - energy.consumeEu(energyCost, Simulation.ACT); - var source = EIDamageTypes.tesla(level, worldPosition.getCenter()); - var entities = this.getEntitiesInDamageArea(); - if(!entities.isEmpty()) - { - var entityIds = new IntArrayList(); - for(var entity : entities) - { - entity.hurt(source, damage); - entityIds.add(entity.getId()); - } - new EntitiesElectrocutedPacket(worldPosition, entityIds).broadcastToClients((ServerLevel) level, worldPosition, 32); - } - } - } + active = lethal.tick(); } isActive.updateActive(active, this); diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 4efc9c82..91badd8b 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -211,7 +211,7 @@ public void tick() if(level.isClientSide()) { Proxies.get(EIProxy.class).tickTesla(worldPosition); - singing.tickClient(); + singing.tickBuzzing(); return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java new file mode 100644 index 00000000..3d4ca201 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java @@ -0,0 +1,182 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +import aztech.modern_industrialization.machines.IComponent; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.components.EnergyComponent; +import aztech.modern_industrialization.util.Simulation; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EIDamageTypes; +import net.swedz.extended_industrialization.EISounds; +import net.swedz.extended_industrialization.network.packet.EntitiesElectrocutedPacket; + +import java.util.List; +import java.util.function.Supplier; + +public final class LethalTeslaCoilComponent implements IComponent, TeslaBuzzing +{ + private final MachineBlockEntity machine; + private final Supplier damageAmount; + private final EnergyComponent energy; + private final Supplier energyCost; + + private final Supplier range; + private final Supplier damageInterval; + + private int entityCount; + + public LethalTeslaCoilComponent( + MachineBlockEntity machine, Supplier damageAmount, EnergyComponent energy, Supplier energyCost, + Supplier range, Supplier damageInterval + ) + { + this.machine = machine; + this.damageAmount = damageAmount; + this.energy = energy; + this.energyCost = energyCost; + this.range = range; + this.damageInterval = damageInterval; + } + + private AABB getDamageArea() + { + int range = EI.config().lethalTeslaCoil().range(); + var center = machine.getBlockPos().getCenter(); + return new AABB( + center.subtract(range, range, range), + center.add(range, range, range) + ); + } + + private List getEntitiesInDamageArea() + { + return machine.getLevel().getEntities( + (Entity) null, + this.getDamageArea(), + (entity) -> entity.isAlive() && entity instanceof LivingEntity && !(entity instanceof Player) + ); + } + + private long tick; + + public boolean tick() + { + var level = machine.getLevel(); + var worldPosition = machine.getBlockPos(); + + boolean active = false; + + float damage = damageAmount.get(); + if(damage > 0) + { + long energyCost = this.energyCost.get(); + active = energy.consumeEu(energyCost, Simulation.SIMULATE) == energyCost; + + var entities = this.getEntitiesInDamageArea(); + int originalEntityCount = entityCount; + entityCount = entities.size(); + if(entityCount != originalEntityCount) + { + machine.sync(false); + } + + if(active && tick++ % damageInterval.get() == 0) + { + energy.consumeEu(energyCost, Simulation.ACT); + var source = EIDamageTypes.tesla(level, worldPosition.getCenter()); + if(!entities.isEmpty()) + { + var entityIds = new IntArrayList(); + for(var entity : entities) + { + entity.hurt(source, damage); + entityIds.add(entity.getId()); + } + new EntitiesElectrocutedPacket(worldPosition, entityIds).broadcastToClients((ServerLevel) level, worldPosition, 32); + } + } + } + + return active; + } + + public void reset() + { + entityCount = 0; + } + + private boolean buzzing; + + @Override + public MachineBlockEntity getBuzzingMachine() + { + return machine; + } + + @Override + public SoundEvent getBuzzingSound() + { + return EISounds.TESLA_COIL_LOOP.get(); + } + + @Override + public SoundSource getBuzzingSoundSource() + { + return SoundSource.BLOCKS; + } + + @Override + public boolean isBuzzing() + { + return buzzing; + } + + @Override + public void setBuzzing(boolean buzzing) + { + this.buzzing = buzzing; + } + + @Override + public boolean shouldBuzz() + { + return entityCount > 0; + } + + @Override + public float getBuzzingPitch() + { + return 1; + } + + @Override + public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) + { + } + + @Override + public void readNbt(CompoundTag tag, HolderLookup.Provider registries, boolean isUpgradingMachine) + { + } + + @Override + public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + tag.putInt("damaging_entities", entityCount); + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + entityCount = tag.getInt("damaging_entities"); + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java index 2f04a981..59a41a9f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java @@ -1,39 +1,33 @@ package net.swedz.extended_industrialization.machines.component.tesla; import aztech.modern_industrialization.machines.IComponent; +import aztech.modern_industrialization.machines.MachineBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.NoteBlock; import net.minecraft.world.level.block.state.BlockState; import net.swedz.extended_industrialization.EISounds; -import net.swedz.extended_industrialization.machines.blockentity.tesla.TeslaCoilMachineBlockEntity; -import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.api.Assert; -import net.swedz.tesseract.neoforge.proxy.Proxies; import java.util.function.Supplier; -public final class SingingTeslaCoilComponent implements IComponent +public final class SingingTeslaCoilComponent implements IComponent, TeslaBuzzing { - private final TeslaCoilMachineBlockEntity machine; - private final Supplier active; + private final MachineBlockEntity machine; + private final Supplier active; private int note = -1; - public SingingTeslaCoilComponent(TeslaCoilMachineBlockEntity machine, Supplier active) + public SingingTeslaCoilComponent(MachineBlockEntity machine, Supplier active) { this.machine = machine; this.active = active; } - public boolean shouldPlay() - { - return this.hasNote() && active.get(); - } - public boolean hasNote() { return note > -1; @@ -44,11 +38,6 @@ public int getNote() return note; } - public float getPitch() - { - return this.hasNote() ? NoteBlock.getPitchFromNote(note) : 1; - } - private int getWorldNote() { if(!machine.hasLevel()) @@ -60,23 +49,6 @@ private int getWorldNote() return state.is(Blocks.NOTE_BLOCK) ? state.getValue(NoteBlock.NOTE) : -1; } - private boolean buzzing; - - public void tickClient() - { - Assert.that(machine.hasLevel() && machine.getLevel().isClientSide()); - if(!buzzing && this.shouldPlay()) - { - buzzing = true; - Proxies.get(EIProxy.class).startTeslaCoilLoopSound( - machine.getBlockPos(), EISounds.TESLA_COIL_SINGING.get(), SoundSource.RECORDS, - () -> machine.isRemoved() || !this.shouldPlay(), - this::getPitch, - () -> buzzing = false - ); - } - } - public boolean updateNote() { Assert.that(machine.hasLevel() && !machine.getLevel().isClientSide()); @@ -85,6 +57,50 @@ public boolean updateNote() return originalNote != note; } + private boolean buzzing; + + @Override + public MachineBlockEntity getBuzzingMachine() + { + return machine; + } + + @Override + public SoundEvent getBuzzingSound() + { + return EISounds.TESLA_COIL_SINGING.get(); + } + + @Override + public SoundSource getBuzzingSoundSource() + { + return SoundSource.RECORDS; + } + + @Override + public boolean isBuzzing() + { + return buzzing; + } + + @Override + public void setBuzzing(boolean buzzing) + { + this.buzzing = buzzing; + } + + @Override + public boolean shouldBuzz() + { + return this.hasNote() && active.get(); + } + + @Override + public float getBuzzingPitch() + { + return this.hasNote() ? NoteBlock.getPitchFromNote(note) : 1; + } + @Override public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzing.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzing.java new file mode 100644 index 00000000..4ce6c3c4 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzing.java @@ -0,0 +1,39 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +import aztech.modern_industrialization.machines.MachineBlockEntity; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.swedz.extended_industrialization.proxy.EIProxy; +import net.swedz.tesseract.neoforge.proxy.Proxies; + +public interface TeslaBuzzing +{ + MachineBlockEntity getBuzzingMachine(); + + SoundEvent getBuzzingSound(); + + SoundSource getBuzzingSoundSource(); + + boolean isBuzzing(); + + void setBuzzing(boolean buzzing); + + boolean shouldBuzz(); + + float getBuzzingPitch(); + + default void tickBuzzing() + { + if(!this.isBuzzing() && this.shouldBuzz()) + { + this.setBuzzing(true); + var machine = this.getBuzzingMachine(); + Proxies.get(EIProxy.class).startTeslaCoilLoopSound( + machine.getBlockPos(), this.getBuzzingSound(), this.getBuzzingSoundSource(), + () -> machine.isRemoved() || !this.shouldBuzz(), + this::getBuzzingPitch, + () -> this.setBuzzing(false) + ); + } + } +} From 85b3ddbf57d124add176c5680ad64d32207b998f Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 07:44:41 -0500 Subject: [PATCH 153/159] Fix lethal coil range not being full blocks --- .../client/ber/tesla/behavior/TeslaArcInstance.java | 4 ++-- .../machines/component/tesla/LethalTeslaCoilComponent.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java index f31e9771..5ce0d493 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java @@ -124,8 +124,8 @@ public void tick() int range = arcs.attachToNearbyEntitiesRange(); var level = Minecraft.getInstance().level; var box = new AABB( - worldPosition.subtract(range, range, range), - worldPosition.add(range, range, range) + worldPosition.subtract(range, range, range).subtract(0.5, 0.5, 0.5), + worldPosition.add(range, range, range).add(0.5, 0.5, 0.5) ); var entities = level.getEntities( (Entity) null, diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java index 3d4ca201..0f362a44 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java @@ -52,8 +52,8 @@ private AABB getDamageArea() int range = EI.config().lethalTeslaCoil().range(); var center = machine.getBlockPos().getCenter(); return new AABB( - center.subtract(range, range, range), - center.add(range, range, range) + center.subtract(range, range, range).subtract(0.5, 0.5, 0.5), + center.add(range, range, range).add(0.5, 0.5, 0.5) ); } From 8bdb675f9654495d7986215d0ff750979864b1f2 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 17:44:32 -0500 Subject: [PATCH 154/159] Ensure network always distributes as much energy as possible --- .../machines/component/tesla/network/TeslaNetwork.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetwork.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetwork.java index bfb3b7c4..fa0d434a 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetwork.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/network/TeslaNetwork.java @@ -140,23 +140,17 @@ public long receive(long maxReceive, boolean simulate) } long amountReceived = 0; long remaining = maxReceive; - int index = 0; for(TeslaReceiver receiver : receivers) { if(receiver.isMobile() && receiver.checkReceiveFrom(this).isFailure()) { - index++; continue; } - int remainingStorages = receivers.size() - index; - - long amountToReceive = remainingStorages == 1 ? remaining : remaining / remainingStorages; - long received = receiver.receiveEnergy(amountToReceive, simulate); + long received = receiver.receiveEnergy(remaining, simulate); amountReceived += received; remaining -= received; - index++; } return amountReceived; } From 4a416011d589bcccbd335e7faabea8ef20367918 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 17:59:16 -0500 Subject: [PATCH 155/159] Use dedicated component for the buzzing sounds --- .../LethalTeslaCoilMachineBlockEntity.java | 14 ++++- .../tesla/TeslaCoilMachineBlockEntity.java | 16 ++++- .../tesla/LethalTeslaCoilComponent.java | 63 +++---------------- .../tesla/SingingTeslaCoilComponent.java | 60 +++--------------- .../component/tesla/TeslaBuzzing.java | 39 ------------ .../tesla/TeslaBuzzingComponent.java | 62 ++++++++++++++++++ 6 files changed, 104 insertions(+), 150 deletions(-) delete mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzing.java create mode 100644 src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzingComponent.java diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java index 3ba08764..cc8e9506 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/LethalTeslaCoilMachineBlockEntity.java @@ -22,16 +22,19 @@ import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntityType; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EISounds; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.EITooltips; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.machines.component.tesla.LethalTeslaCoilComponent; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaBuzzingComponent; import net.swedz.extended_industrialization.proxy.EIProxy; import net.swedz.tesseract.neoforge.capabilities.CapabilitiesListeners; import net.swedz.tesseract.neoforge.compat.mi.guicomponent.slotpanel.ModularSlotPanel; @@ -65,6 +68,7 @@ public static float getDamageAmount(CableTier tier) private final MIEnergyStorage insertable; private final LethalTeslaCoilComponent lethal; + private final TeslaBuzzingComponent buzzing; public LethalTeslaCoilMachineBlockEntity(BEP bep) { @@ -90,8 +94,14 @@ public LethalTeslaCoilMachineBlockEntity(BEP bep) () -> EI.config().lethalTeslaCoil().range(), () -> DAMAGE_INTERVAL ); + buzzing = new TeslaBuzzingComponent( + this, + EISounds.TESLA_COIL_LOOP.get(), SoundSource.BLOCKS, + lethal::hasNearbyEntities, + () -> 1f + ); - this.registerComponents(isActive, redstoneControl, casing, energy, lethal); + this.registerComponents(isActive, redstoneControl, casing, energy, lethal, buzzing); this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(81, 34), energy::getEu, energy::getCapacity)); @@ -139,7 +149,7 @@ public void tick() if(level.isClientSide()) { Proxies.get(EIProxy.class).tickTesla(worldPosition); - lethal.tickBuzzing(); + buzzing.tick(); return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java index 91badd8b..f04e9b7d 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/tesla/TeslaCoilMachineBlockEntity.java @@ -20,15 +20,18 @@ import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.EISounds; import net.swedz.extended_industrialization.EIText; import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.machines.component.tesla.SingingTeslaCoilComponent; +import net.swedz.extended_industrialization.machines.component.tesla.TeslaBuzzingComponent; import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaNetwork; import net.swedz.extended_industrialization.machines.component.tesla.network.TeslaTransferLimits; import net.swedz.extended_industrialization.machines.component.tesla.network.transmitter.TeslaTransmitter; @@ -55,6 +58,7 @@ public final class TeslaCoilMachineBlockEntity extends MachineBlockEntity implem private final MIEnergyStorage insertable; private final SingingTeslaCoilComponent singing; + private final TeslaBuzzingComponent buzzing; private final TeslaTransmitterComponent transmitter; @@ -76,7 +80,13 @@ public TeslaCoilMachineBlockEntity(BEP bep) energy = new EnergyComponent(this, () -> 30 * 20 * casing.getCableTier().eu); insertable = energy.buildInsertable(casing::canInsertEu); - singing = new SingingTeslaCoilComponent(this, () -> isActive.isActive); + singing = new SingingTeslaCoilComponent(this); + buzzing = new TeslaBuzzingComponent( + this, + EISounds.TESLA_COIL_SINGING.get(), SoundSource.RECORDS, + () -> singing.hasNote() && isActive.isActive, + singing::getPitch + ); transmitter = new TeslaTransmitterComponent( this, @@ -89,7 +99,7 @@ public TeslaCoilMachineBlockEntity(BEP bep) } ); - this.registerComponents(isActive, redstoneControl, casing, energy, transmitter, singing); + this.registerComponents(isActive, redstoneControl, casing, energy, transmitter, singing, buzzing); this.registerGuiComponent(new EnergyBar.Server(new EnergyBar.Parameters(61, 34), energy::getEu, energy::getCapacity)); @@ -211,7 +221,7 @@ public void tick() if(level.isClientSide()) { Proxies.get(EIProxy.class).tickTesla(worldPosition); - singing.tickBuzzing(); + buzzing.tick(); return; } diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java index 0f362a44..5fb012f2 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java @@ -8,21 +8,18 @@ import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; import net.swedz.extended_industrialization.EI; import net.swedz.extended_industrialization.EIDamageTypes; -import net.swedz.extended_industrialization.EISounds; import net.swedz.extended_industrialization.network.packet.EntitiesElectrocutedPacket; import java.util.List; import java.util.function.Supplier; -public final class LethalTeslaCoilComponent implements IComponent, TeslaBuzzing +public final class LethalTeslaCoilComponent implements IComponent { private final MachineBlockEntity machine; private final Supplier damageAmount; @@ -47,6 +44,11 @@ public LethalTeslaCoilComponent( this.damageInterval = damageInterval; } + public boolean hasNearbyEntities() + { + return entityCount > 0; + } + private AABB getDamageArea() { int range = EI.config().lethalTeslaCoil().range(); @@ -105,59 +107,14 @@ public boolean tick() } } } + else + { + entityCount = 0; + } return active; } - public void reset() - { - entityCount = 0; - } - - private boolean buzzing; - - @Override - public MachineBlockEntity getBuzzingMachine() - { - return machine; - } - - @Override - public SoundEvent getBuzzingSound() - { - return EISounds.TESLA_COIL_LOOP.get(); - } - - @Override - public SoundSource getBuzzingSoundSource() - { - return SoundSource.BLOCKS; - } - - @Override - public boolean isBuzzing() - { - return buzzing; - } - - @Override - public void setBuzzing(boolean buzzing) - { - this.buzzing = buzzing; - } - - @Override - public boolean shouldBuzz() - { - return entityCount > 0; - } - - @Override - public float getBuzzingPitch() - { - return 1; - } - @Override public void writeNbt(CompoundTag tag, HolderLookup.Provider registries) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java index 59a41a9f..463763bd 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/SingingTeslaCoilComponent.java @@ -5,27 +5,20 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.NoteBlock; import net.minecraft.world.level.block.state.BlockState; -import net.swedz.extended_industrialization.EISounds; import net.swedz.tesseract.neoforge.api.Assert; -import java.util.function.Supplier; - -public final class SingingTeslaCoilComponent implements IComponent, TeslaBuzzing +public final class SingingTeslaCoilComponent implements IComponent { private final MachineBlockEntity machine; - private final Supplier active; private int note = -1; - public SingingTeslaCoilComponent(MachineBlockEntity machine, Supplier active) + public SingingTeslaCoilComponent(MachineBlockEntity machine) { this.machine = machine; - this.active = active; } public boolean hasNote() @@ -38,6 +31,11 @@ public int getNote() return note; } + public float getPitch() + { + return this.hasNote() ? NoteBlock.getPitchFromNote(note) : 1; + } + private int getWorldNote() { if(!machine.hasLevel()) @@ -57,50 +55,6 @@ public boolean updateNote() return originalNote != note; } - private boolean buzzing; - - @Override - public MachineBlockEntity getBuzzingMachine() - { - return machine; - } - - @Override - public SoundEvent getBuzzingSound() - { - return EISounds.TESLA_COIL_SINGING.get(); - } - - @Override - public SoundSource getBuzzingSoundSource() - { - return SoundSource.RECORDS; - } - - @Override - public boolean isBuzzing() - { - return buzzing; - } - - @Override - public void setBuzzing(boolean buzzing) - { - this.buzzing = buzzing; - } - - @Override - public boolean shouldBuzz() - { - return this.hasNote() && active.get(); - } - - @Override - public float getBuzzingPitch() - { - return this.hasNote() ? NoteBlock.getPitchFromNote(note) : 1; - } - @Override public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) { diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzing.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzing.java deleted file mode 100644 index 4ce6c3c4..00000000 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzing.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.swedz.extended_industrialization.machines.component.tesla; - -import aztech.modern_industrialization.machines.MachineBlockEntity; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundSource; -import net.swedz.extended_industrialization.proxy.EIProxy; -import net.swedz.tesseract.neoforge.proxy.Proxies; - -public interface TeslaBuzzing -{ - MachineBlockEntity getBuzzingMachine(); - - SoundEvent getBuzzingSound(); - - SoundSource getBuzzingSoundSource(); - - boolean isBuzzing(); - - void setBuzzing(boolean buzzing); - - boolean shouldBuzz(); - - float getBuzzingPitch(); - - default void tickBuzzing() - { - if(!this.isBuzzing() && this.shouldBuzz()) - { - this.setBuzzing(true); - var machine = this.getBuzzingMachine(); - Proxies.get(EIProxy.class).startTeslaCoilLoopSound( - machine.getBlockPos(), this.getBuzzingSound(), this.getBuzzingSoundSource(), - () -> machine.isRemoved() || !this.shouldBuzz(), - this::getBuzzingPitch, - () -> this.setBuzzing(false) - ); - } - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzingComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzingComponent.java new file mode 100644 index 00000000..036af222 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/TeslaBuzzingComponent.java @@ -0,0 +1,62 @@ +package net.swedz.extended_industrialization.machines.component.tesla; + +import aztech.modern_industrialization.machines.IComponent; +import aztech.modern_industrialization.machines.MachineBlockEntity; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.swedz.extended_industrialization.proxy.EIProxy; +import net.swedz.tesseract.neoforge.proxy.Proxies; + +import java.util.function.Supplier; + +public final class TeslaBuzzingComponent implements IComponent.ClientOnly +{ + private final MachineBlockEntity machine; + + private final SoundEvent sound; + private final SoundSource source; + + private final Supplier shouldBuzz; + private final Supplier buzzingPitch; + + private boolean buzzing; + + public TeslaBuzzingComponent( + MachineBlockEntity machine, + SoundEvent sound, SoundSource source, + Supplier shouldBuzz, Supplier buzzingPitch + ) + { + this.machine = machine; + this.sound = sound; + this.source = source; + this.shouldBuzz = shouldBuzz; + this.buzzingPitch = buzzingPitch; + } + + public void tick() + { + if(!buzzing && shouldBuzz.get()) + { + buzzing = true; + Proxies.get(EIProxy.class).startTeslaCoilLoopSound( + machine.getBlockPos(), sound, source, + () -> machine.isRemoved() || !shouldBuzz.get(), + buzzingPitch, + () -> buzzing = false + ); + } + } + + @Override + public void writeClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + } + + @Override + public void readClientNbt(CompoundTag tag, HolderLookup.Provider registries) + { + } +} From 1f5fb46c7e1e0c2ca5cf33dd4f9a4c9ab2e29b90 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 18:47:54 -0500 Subject: [PATCH 156/159] Render attach to nearby entities bounds --- .../client/ber/tesla/TeslaPartRenderer.java | 20 +++++++++++++------ .../ber/tesla/behavior/TeslaArcInstance.java | 9 ++------- .../client/model/tesla/TeslaUnbakedModel.java | 14 +++++++++++++ 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java index d66de72e..ed7a144a 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java @@ -110,7 +110,7 @@ private static TeslaBakedModel getTeslaModel(ResourceLocation location) private static void renderArcBounds(MachineBlockEntity machine, TeslaBakedModel tesla, PoseStack matrices, MultiBufferSource buffer) { var arcs = tesla.arcs(); - if(arcs != null && arcs.hasRandomBounds() && Minecraft.getInstance().getEntityRenderDispatcher().shouldRenderHitBoxes()) + if(arcs != null && (arcs.hasRandomBounds() || arcs.attachesToNearbyEntities()) && Minecraft.getInstance().getEntityRenderDispatcher().shouldRenderHitBoxes()) { matrices.pushPose(); @@ -119,11 +119,19 @@ private static void renderArcBounds(MachineBlockEntity machine, TeslaBakedModel Vec3 position = machine.getBlockPos().getCenter(); Direction direction = machine.orientation.facingDirection; - var box = arcs.worldIncludeBounds(position, direction).move(position.scale(-1)).move(0.5, 0.5, 0.5); - LevelRenderer.renderLineBox(matrices, consumer, box, 0.75f, 1, 0.75f, 1); - - box = arcs.worldExcludeBounds(position, direction).move(position.scale(-1)).move(0.5, 0.5, 0.5); - LevelRenderer.renderLineBox(matrices, consumer, box, 1, 0.75f, 0.75f, 1); + if(arcs.hasRandomBounds()) + { + var box = arcs.worldIncludeBounds(position, direction).move(position.scale(-1)).move(0.5, 0.5, 0.5); + LevelRenderer.renderLineBox(matrices, consumer, box, 0.75f, 1, 0.75f, 1); + + box = arcs.worldExcludeBounds(position, direction).move(position.scale(-1)).move(0.5, 0.5, 0.5); + LevelRenderer.renderLineBox(matrices, consumer, box, 1, 0.75f, 0.75f, 1); + } + if(arcs.attachesToNearbyEntities()) + { + var box = arcs.worldNearbyEntitiesBounds(position, direction).move(position.scale(-1)).move(0.5, 0.5, 0.5); + LevelRenderer.renderLineBox(matrices, consumer, box, 0.75f, 0.75f, 1, 1); + } matrices.popPose(); } diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java index 5ce0d493..43dcfb42 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/behavior/TeslaArcInstance.java @@ -7,7 +7,6 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.client.ber.tesla.arc.TeslaArcBuilder; import net.swedz.extended_industrialization.client.model.tesla.TeslaBakedModel; @@ -119,14 +118,10 @@ public void tick() var arcs = tesla.arcs(); if(arcs != null) { - if(arcs.attachToNearbyEntitiesRange() > 0) + if(arcs.attachesToNearbyEntities()) { - int range = arcs.attachToNearbyEntitiesRange(); var level = Minecraft.getInstance().level; - var box = new AABB( - worldPosition.subtract(range, range, range).subtract(0.5, 0.5, 0.5), - worldPosition.add(range, range, range).add(0.5, 0.5, 0.5) - ); + var box = arcs.worldNearbyEntitiesBounds(worldPosition, facingDirection.get()); var entities = level.getEntities( (Entity) null, box, diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java index dff2bc1b..ab0679e8 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/tesla/TeslaUnbakedModel.java @@ -214,6 +214,20 @@ public Vec3 worldRandomPointInBounds(Random random, Vec3 machinePosition, Direct } } + public boolean attachesToNearbyEntities() + { + return attachToNearbyEntitiesRange > 0; + } + + public AABB worldNearbyEntitiesBounds(Vec3 machinePosition, Direction machineDirection) + { + int range = attachToNearbyEntitiesRange; + return convertToWorld(machinePosition, machineDirection, new AABB( + new Vec3(-range, -range, -range).subtract(0.5, 0.5, 0.5), + new Vec3(range, range, range).add(0.5, 0.5, 0.5) + )); + } + public List worldOrigins(Vec3 machinePosition, Direction machineDirection) { List converted = Lists.newArrayList(); From dac2652c8bcb8aaa5eb035ede4f7995c9671c0e9 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 23:00:56 -0500 Subject: [PATCH 157/159] Lessen the sparks created when electrocution happens --- .../tesla/LethalTeslaCoilComponent.java | 2 +- .../packet/EntitiesElectrocutedPacket.java | 28 +++++++------------ 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java index 5fb012f2..a2639d4f 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/component/tesla/LethalTeslaCoilComponent.java @@ -103,7 +103,7 @@ public boolean tick() entity.hurt(source, damage); entityIds.add(entity.getId()); } - new EntitiesElectrocutedPacket(worldPosition, entityIds).broadcastToClients((ServerLevel) level, worldPosition, 32); + new EntitiesElectrocutedPacket(entityIds).broadcastToClients((ServerLevel) level, worldPosition, 32); } } } diff --git a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java index db3a4768..488e97c4 100644 --- a/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java +++ b/src/main/java/net/swedz/extended_industrialization/network/packet/EntitiesElectrocutedPacket.java @@ -1,10 +1,8 @@ package net.swedz.extended_industrialization.network.packet; -import aztech.modern_industrialization.machines.MachineBlockEntity; import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; -import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; @@ -12,47 +10,41 @@ import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.phys.Vec3; import net.swedz.extended_industrialization.EIClient; -import net.swedz.extended_industrialization.client.ber.tesla.behavior.TeslaBehavior; import net.swedz.extended_industrialization.network.EICustomPacket; import net.swedz.tesseract.neoforge.packet.PacketContext; -public record EntitiesElectrocutedPacket(BlockPos origin, IntList entityIds) implements EICustomPacket +public record EntitiesElectrocutedPacket(IntList entityIds) implements EICustomPacket { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, - EntitiesElectrocutedPacket::origin, ByteBufCodecs.VAR_INT.apply(ByteBufCodecs.list()).map(IntArrayList::new, Lists::newArrayList), EntitiesElectrocutedPacket::entityIds, EntitiesElectrocutedPacket::new ); + private static final int SPARK_COUNT = 3; + @Override public void handle(PacketContext context) { context.assertClientbound(); var level = context.getPlayer().level(); - var blockEntity = level.getBlockEntity(origin); if(entityIds.isEmpty() || - !(blockEntity instanceof MachineBlockEntity) || - !(blockEntity instanceof TeslaBehavior)) + !EIClient.config().renderTeslaAnimations()) { return; } - if(EIClient.config().renderTeslaAnimations()) + for(int entityId : entityIds) { - for(int entityId : entityIds) + var entity = level.getEntity(entityId); + if(entity != null) { - var entity = level.getEntity(entityId); - if(entity != null) + Vec3 pos = entity.getBoundingBox().getCenter(); + for(int i = 0; i < SPARK_COUNT; i++) { - Vec3 pos = entity.getBoundingBox().getCenter(); - for(int i = 0; i < 12; i++) - { - spark(level, pos); - } + spark(level, pos); } } } From 2cc117eb1dec5f4b77b93702adef1af47595d1ee Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 14 Jan 2025 23:13:21 -0500 Subject: [PATCH 158/159] Add client config option to limit the render distance for tesla animations --- .../extended_industrialization/EIClientConfig.java | 12 ++++++++++++ .../client/ber/tesla/TeslaPartRenderer.java | 14 +++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java b/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java index 81d0462a..3e70272a 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClientConfig.java @@ -2,6 +2,7 @@ import net.swedz.tesseract.neoforge.config.annotation.ConfigComment; import net.swedz.tesseract.neoforge.config.annotation.ConfigKey; +import net.swedz.tesseract.neoforge.config.annotation.Range; public interface EIClientConfig { @@ -11,4 +12,15 @@ default boolean renderTeslaAnimations() { return true; } + + @ConfigKey("tesla_animations_render_distance") + @ConfigComment({ + "The distance (in blocks) for tesla animations to render within", + "Set to default (0) to always render" + }) + @Range.Integer(min = 0, max = Integer.MAX_VALUE) + default int teslaAnimationsRenderDistance() + { + return 0; + } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java index ed7a144a..b6a5176e 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/tesla/TeslaPartRenderer.java @@ -220,12 +220,16 @@ static void render(MachineBlockEntity machine, float partialTick, PoseStack matr renderHighlight(machine, partialTick, matrices, buffer, light, overlay); if(EIClient.config().renderTeslaAnimations() && machine instanceof TeslaBehavior behavior) { - var tesla = getTeslaModel(behavior.getTeslaModelLocation()); - renderArcBounds(machine, tesla, matrices, buffer); - if(behavior.shouldTeslaRender()) + int renderDistance = EIClient.config().teslaAnimationsRenderDistance(); + if(renderDistance == 0 || Minecraft.getInstance().player.position().closerThan(machine.getBlockPos().getCenter(), renderDistance)) { - renderArcs(machine, tesla, partialTick, matrices, buffer, light, overlay); - renderPlasma(machine, tesla, partialTick, matrices, buffer, light, overlay); + var tesla = getTeslaModel(behavior.getTeslaModelLocation()); + renderArcBounds(machine, tesla, matrices, buffer); + if(behavior.shouldTeslaRender()) + { + renderArcs(machine, tesla, partialTick, matrices, buffer, light, overlay); + renderPlasma(machine, tesla, partialTick, matrices, buffer, light, overlay); + } } } } From be3c63fa1f83beca4e53645f873e2c14ba6aafc4 Mon Sep 17 00:00:00 2001 From: Swedz Date: Wed, 15 Jan 2025 00:07:53 -0500 Subject: [PATCH 159/159] Support curios for tesla handheld receiver --- gradle.properties | 4 ++-- src/generated/resources/data/curios/tags/item/belt.json | 5 +++++ src/generated/resources/data/curios/tags/item/hands.json | 5 +++++ .../datagen/server/provider/tags/ItemTagDatagenProvider.java | 5 +++++ 4 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 src/generated/resources/data/curios/tags/item/belt.json create mode 100644 src/generated/resources/data/curios/tags/item/hands.json diff --git a/gradle.properties b/gradle.properties index c1e870a0..7a09ebf9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ runtime_include_emi=true runtime_include_mi_tweaks=true runtime_include_accessories=false -runtime_include_curios=false +runtime_include_curios=true runtime_include_mystical_agriculture=false # Gradle Configuration @@ -40,7 +40,7 @@ grandpower_version=3.0.0 cloth_config_version=15.0.127 emi_version=1.1.10+1.21 emi_version_range=[1.1.10, 1.2-) -tesseract_version=1.6.4-beta-1.21.1 +tesseract_version=1.6.5-beta-1.21.1 tesseract_version_range=[1.6.4-beta-, 1.7-) mi_tweaks_version=1.6.3-beta-1.21.1 mixinextras_version=0.3.5 diff --git a/src/generated/resources/data/curios/tags/item/belt.json b/src/generated/resources/data/curios/tags/item/belt.json new file mode 100644 index 00000000..39d0dea6 --- /dev/null +++ b/src/generated/resources/data/curios/tags/item/belt.json @@ -0,0 +1,5 @@ +{ + "values": [ + "extended_industrialization:tesla_handheld_receiver" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/curios/tags/item/hands.json b/src/generated/resources/data/curios/tags/item/hands.json new file mode 100644 index 00000000..39d0dea6 --- /dev/null +++ b/src/generated/resources/data/curios/tags/item/hands.json @@ -0,0 +1,5 @@ +{ + "values": [ + "extended_industrialization:tesla_handheld_receiver" + ] +} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/tags/ItemTagDatagenProvider.java b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/tags/ItemTagDatagenProvider.java index c22e7bb5..b77f5f26 100644 --- a/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/tags/ItemTagDatagenProvider.java +++ b/src/main/java/net/swedz/extended_industrialization/datagen/server/provider/tags/ItemTagDatagenProvider.java @@ -63,6 +63,11 @@ private IntrinsicTagAppender curiosTag(String path) private void addCuriosTags() { + this.curiosTag("belt") + .add(EIItems.TESLA_HANDHELD_RECEIVER.asItem()); + + this.curiosTag("hands") + .add(EIItems.TESLA_HANDHELD_RECEIVER.asItem()); } @Override