diff --git a/.gitignore b/.gitignore index 2f5d04d..5533b38 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ bin/ run/ run-data/ + +.cache diff --git a/src/generated/resources/assets/kineticbridge/blockstates/ev_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/ev_kinetic_output_hatch.json new file mode 100644 index 0000000..f7be976 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/ev_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/ev_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/ev_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/ev_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/ev_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/ev_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/ev_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/hv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/hv_kinetic_output_hatch.json new file mode 100644 index 0000000..2fd0e6b --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/hv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/hv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/hv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/hv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/hv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/hv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/hv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/iv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/iv_kinetic_output_hatch.json new file mode 100644 index 0000000..37886e5 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/iv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/iv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/iv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/iv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/iv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/iv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/iv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/luv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/luv_kinetic_output_hatch.json new file mode 100644 index 0000000..c09e538 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/luv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/luv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/luv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/luv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/luv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/luv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/luv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/lv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/lv_kinetic_output_hatch.json new file mode 100644 index 0000000..7d7d2d0 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/lv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/lv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/lv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/lv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/lv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/lv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/lv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/max_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/max_kinetic_output_hatch.json new file mode 100644 index 0000000..b09c52a --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/max_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/max_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/max_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/max_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/max_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/max_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/max_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/mv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/mv_kinetic_output_hatch.json new file mode 100644 index 0000000..04ae232 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/mv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/mv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/mv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/mv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/mv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/mv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/mv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/opv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/opv_kinetic_output_hatch.json new file mode 100644 index 0000000..0cd4c4d --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/opv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/opv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/opv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/opv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/opv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/opv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/opv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/uev_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/uev_kinetic_output_hatch.json new file mode 100644 index 0000000..cf78b94 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/uev_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/uev_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/uev_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/uev_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/uev_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/uev_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/uev_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/uhv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/uhv_kinetic_output_hatch.json new file mode 100644 index 0000000..e80b828 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/uhv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/uhv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/uhv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/uhv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/uhv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/uhv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/uhv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/uiv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/uiv_kinetic_output_hatch.json new file mode 100644 index 0000000..5ff684f --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/uiv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/uiv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/uiv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/uiv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/uiv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/uiv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/uiv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/ulv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/ulv_kinetic_output_hatch.json new file mode 100644 index 0000000..beb0c08 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/ulv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/ulv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/ulv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/ulv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/ulv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/ulv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/ulv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/uv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/uv_kinetic_output_hatch.json new file mode 100644 index 0000000..9407f75 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/uv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/uv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/uv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/uv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/uv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/uv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/uv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/uxv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/uxv_kinetic_output_hatch.json new file mode 100644 index 0000000..6de88e2 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/uxv_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/uxv_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/uxv_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/uxv_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/uxv_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/uxv_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/uxv_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/blockstates/zpm_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/blockstates/zpm_kinetic_output_hatch.json new file mode 100644 index 0000000..7dc8d0e --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/blockstates/zpm_kinetic_output_hatch.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=down": { + "model": "kineticbridge:block/machine/zpm_kinetic_output_hatch", + "x": 90 + }, + "facing=east": { + "model": "kineticbridge:block/machine/zpm_kinetic_output_hatch", + "y": 90 + }, + "facing=north": { + "model": "kineticbridge:block/machine/zpm_kinetic_output_hatch" + }, + "facing=south": { + "model": "kineticbridge:block/machine/zpm_kinetic_output_hatch", + "y": 180 + }, + "facing=up": { + "gtceu:z": 180, + "model": "kineticbridge:block/machine/zpm_kinetic_output_hatch", + "x": 270 + }, + "facing=west": { + "model": "kineticbridge:block/machine/zpm_kinetic_output_hatch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/lang/en_ud.json b/src/generated/resources/assets/kineticbridge/lang/en_ud.json new file mode 100644 index 0000000..0c520c3 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/lang/en_ud.json @@ -0,0 +1,22 @@ +{ + "block.kineticbridge.ev_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛƎϛ§", + "block.kineticbridge.hv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛH9§", + "block.kineticbridge.iv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛI6§", + "block.kineticbridge.luv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛnꞀp§", + "block.kineticbridge.lv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛꞀㄥ§", + "block.kineticbridge.max_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ XⱯWן§ɔ§", + "block.kineticbridge.mv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛWq§", + "block.kineticbridge.opv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛdOן§6§", + "block.kineticbridge.uev_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛƎ∩ɐ§", + "block.kineticbridge.uhv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛH∩ㄣ§", + "block.kineticbridge.uiv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛI∩ᄅ§", + "block.kineticbridge.ulv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛꞀ∩8§", + "block.kineticbridge.uv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ Λ∩Ɛ§", + "block.kineticbridge.uxv_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ ΛX∩ǝ§", + "block.kineticbridge.zpm_kinetic_output_hatch": "ɥɔʇɐH ʇndʇnO ɔıʇǝuıʞ WԀZɔ§", + "kineticbridge.tooltip.capacity": ")ʇ/∩Ǝ %s~( ∩S %s oʇ dn sǝpıʌoɹԀ", + "kineticbridge.tooltip.rpm": "WԀᴚ %s ʇɐ uoıʇɐʇoɹ ǝʇɐǝɹƆ sʇndʇnO", + "tooltip.kineticbridge.last_tick_power": "∩Ǝ %s :ʍɐɹᗡ ʞɔı⟘ ʇsɐꞀ", + "tooltip.kineticbridge.max_power": "ʇ/∩Ǝ %s :ʇndʇnO xɐW", + "tooltip.kineticbridge.max_stress": "WԀᴚ %s @ ∩S %s :ʎʇıɔɐdɐƆ ǝʌıʇɔⱯ" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/lang/en_us.json b/src/generated/resources/assets/kineticbridge/lang/en_us.json new file mode 100644 index 0000000..538c494 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/lang/en_us.json @@ -0,0 +1,22 @@ +{ + "block.kineticbridge.ev_kinetic_output_hatch": "§5EV Kinetic Output Hatch", + "block.kineticbridge.hv_kinetic_output_hatch": "§6HV Kinetic Output Hatch", + "block.kineticbridge.iv_kinetic_output_hatch": "§9IV Kinetic Output Hatch", + "block.kineticbridge.luv_kinetic_output_hatch": "§dLuV Kinetic Output Hatch", + "block.kineticbridge.lv_kinetic_output_hatch": "§7LV Kinetic Output Hatch", + "block.kineticbridge.max_kinetic_output_hatch": "§c§lMAX Kinetic Output Hatch", + "block.kineticbridge.mv_kinetic_output_hatch": "§bMV Kinetic Output Hatch", + "block.kineticbridge.opv_kinetic_output_hatch": "§9§lOpV Kinetic Output Hatch", + "block.kineticbridge.uev_kinetic_output_hatch": "§aUEV Kinetic Output Hatch", + "block.kineticbridge.uhv_kinetic_output_hatch": "§4UHV Kinetic Output Hatch", + "block.kineticbridge.uiv_kinetic_output_hatch": "§2UIV Kinetic Output Hatch", + "block.kineticbridge.ulv_kinetic_output_hatch": "§8ULV Kinetic Output Hatch", + "block.kineticbridge.uv_kinetic_output_hatch": "§3UV Kinetic Output Hatch", + "block.kineticbridge.uxv_kinetic_output_hatch": "§eUXV Kinetic Output Hatch", + "block.kineticbridge.zpm_kinetic_output_hatch": "§cZPM Kinetic Output Hatch", + "kineticbridge.tooltip.capacity": "Provides up to %s SU (~%s EU/t)", + "kineticbridge.tooltip.rpm": "Outputs Create rotation at %s RPM", + "tooltip.kineticbridge.last_tick_power": "Last Tick Draw: %s EU", + "tooltip.kineticbridge.max_power": "Max Output: %s EU/t", + "tooltip.kineticbridge.max_stress": "Active Capacity: %s SU @ %s RPM" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/ev_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/ev_kinetic_output_hatch.json new file mode 100644 index 0000000..4a64dad --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/ev_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:ev_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/ev/bottom", + "side": "gtceu:block/casings/voltage/ev/side", + "top": "gtceu:block/casings/voltage/ev/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/hv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/hv_kinetic_output_hatch.json new file mode 100644 index 0000000..4ea4cc6 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/hv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:hv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/hv/bottom", + "side": "gtceu:block/casings/voltage/hv/side", + "top": "gtceu:block/casings/voltage/hv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/iv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/iv_kinetic_output_hatch.json new file mode 100644 index 0000000..6b05492 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/iv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:iv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/iv/bottom", + "side": "gtceu:block/casings/voltage/iv/side", + "top": "gtceu:block/casings/voltage/iv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/luv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/luv_kinetic_output_hatch.json new file mode 100644 index 0000000..7884c3e --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/luv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:luv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/luv/bottom", + "side": "gtceu:block/casings/voltage/luv/side", + "top": "gtceu:block/casings/voltage/luv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/lv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/lv_kinetic_output_hatch.json new file mode 100644 index 0000000..d81b76c --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/lv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:lv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/lv/bottom", + "side": "gtceu:block/casings/voltage/lv/side", + "top": "gtceu:block/casings/voltage/lv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/max_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/max_kinetic_output_hatch.json new file mode 100644 index 0000000..a899c98 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/max_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:max_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/max/bottom", + "side": "gtceu:block/casings/voltage/max/side", + "top": "gtceu:block/casings/voltage/max/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/mv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/mv_kinetic_output_hatch.json new file mode 100644 index 0000000..27baab5 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/mv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:mv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/mv/bottom", + "side": "gtceu:block/casings/voltage/mv/side", + "top": "gtceu:block/casings/voltage/mv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/opv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/opv_kinetic_output_hatch.json new file mode 100644 index 0000000..2f5d3b0 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/opv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:opv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/opv/bottom", + "side": "gtceu:block/casings/voltage/opv/side", + "top": "gtceu:block/casings/voltage/opv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/uev_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/uev_kinetic_output_hatch.json new file mode 100644 index 0000000..287b41c --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/uev_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:uev_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/uev/bottom", + "side": "gtceu:block/casings/voltage/uev/side", + "top": "gtceu:block/casings/voltage/uev/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/uhv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/uhv_kinetic_output_hatch.json new file mode 100644 index 0000000..de4b8b2 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/uhv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:uhv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/uhv/bottom", + "side": "gtceu:block/casings/voltage/uhv/side", + "top": "gtceu:block/casings/voltage/uhv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/uiv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/uiv_kinetic_output_hatch.json new file mode 100644 index 0000000..cf51e67 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/uiv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:uiv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/uiv/bottom", + "side": "gtceu:block/casings/voltage/uiv/side", + "top": "gtceu:block/casings/voltage/uiv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/ulv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/ulv_kinetic_output_hatch.json new file mode 100644 index 0000000..0105c4a --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/ulv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:ulv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/ulv/bottom", + "side": "gtceu:block/casings/voltage/ulv/side", + "top": "gtceu:block/casings/voltage/ulv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/uv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/uv_kinetic_output_hatch.json new file mode 100644 index 0000000..d0b24d7 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/uv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:uv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/uv/bottom", + "side": "gtceu:block/casings/voltage/uv/side", + "top": "gtceu:block/casings/voltage/uv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/uxv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/uxv_kinetic_output_hatch.json new file mode 100644 index 0000000..7c0486c --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/uxv_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:uxv_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/uxv/bottom", + "side": "gtceu:block/casings/voltage/uxv/side", + "top": "gtceu:block/casings/voltage/uxv/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/block/machine/zpm_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/block/machine/zpm_kinetic_output_hatch.json new file mode 100644 index 0000000..eb4922b --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/block/machine/zpm_kinetic_output_hatch.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "kineticbridge:zpm_kinetic_output_hatch", + "replaceable_textures": [ + "bottom", + "top", + "side" + ], + "variants": { + "": { + "model": { + "parent": "kineticbridge:block/machine/part/kinetic_output_hatch_overlay", + "textures": { + "bottom": "gtceu:block/casings/voltage/zpm/bottom", + "side": "gtceu:block/casings/voltage/zpm/side", + "top": "gtceu:block/casings/voltage/zpm/top" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/ev_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/ev_kinetic_output_hatch.json new file mode 100644 index 0000000..116fc2f --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/ev_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/ev_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/hv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/hv_kinetic_output_hatch.json new file mode 100644 index 0000000..5f3508e --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/hv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/hv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/iv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/iv_kinetic_output_hatch.json new file mode 100644 index 0000000..e7c9e73 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/iv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/iv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/luv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/luv_kinetic_output_hatch.json new file mode 100644 index 0000000..6dd919f --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/luv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/luv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/lv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/lv_kinetic_output_hatch.json new file mode 100644 index 0000000..fd22745 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/lv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/lv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/max_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/max_kinetic_output_hatch.json new file mode 100644 index 0000000..7360d9e --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/max_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/max_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/mv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/mv_kinetic_output_hatch.json new file mode 100644 index 0000000..ebe4061 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/mv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/mv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/opv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/opv_kinetic_output_hatch.json new file mode 100644 index 0000000..d1aff63 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/opv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/opv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/uev_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/uev_kinetic_output_hatch.json new file mode 100644 index 0000000..0f19110 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/uev_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/uev_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/uhv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/uhv_kinetic_output_hatch.json new file mode 100644 index 0000000..569b47e --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/uhv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/uhv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/uiv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/uiv_kinetic_output_hatch.json new file mode 100644 index 0000000..eba6c8e --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/uiv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/uiv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/ulv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/ulv_kinetic_output_hatch.json new file mode 100644 index 0000000..15944b1 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/ulv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/ulv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/uv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/uv_kinetic_output_hatch.json new file mode 100644 index 0000000..df78d59 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/uv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/uv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/uxv_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/uxv_kinetic_output_hatch.json new file mode 100644 index 0000000..b43d988 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/uxv_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/uxv_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/generated/resources/assets/kineticbridge/models/item/zpm_kinetic_output_hatch.json b/src/generated/resources/assets/kineticbridge/models/item/zpm_kinetic_output_hatch.json new file mode 100644 index 0000000..5b4d648 --- /dev/null +++ b/src/generated/resources/assets/kineticbridge/models/item/zpm_kinetic_output_hatch.json @@ -0,0 +1,3 @@ +{ + "parent": "kineticbridge:block/machine/zpm_kinetic_output_hatch" +} \ No newline at end of file diff --git a/src/main/java/com/imbgt/kineticbridge/KineticBridgeMachines.java b/src/main/java/com/imbgt/kineticbridge/KineticBridgeMachines.java index d97a92e..1404fc9 100644 --- a/src/main/java/com/imbgt/kineticbridge/KineticBridgeMachines.java +++ b/src/main/java/com/imbgt/kineticbridge/KineticBridgeMachines.java @@ -1,7 +1,9 @@ package com.imbgt.kineticbridge; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.block.IMachineBlock; import com.gregtechceu.gtceu.api.data.RotationState; +import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MetaMachine; @@ -11,7 +13,10 @@ import com.gregtechceu.gtceu.common.machine.multiblock.part.EnergyHatchPartMachi import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import com.imbgt.kineticbridge.block.KineticOutputHatchBlock; +import com.imbgt.kineticbridge.blockentity.KineticOutputHatchBlockEntity; import com.imbgt.kineticbridge.machine.KineticOutputHatchPartMachine; import java.util.Locale; @@ -21,9 +26,11 @@ public final class KineticBridgeMachines { private KineticBridgeMachines() {} + private static final int OUTPUT_AMPERAGE = 2; + public static final MachineDefinition[] KINETIC_OUTPUT_HATCH = registerTieredMachines( "kinetic_output_hatch", - (holder, tier) -> new KineticOutputHatchPartMachine(holder, tier, 2), + (holder, tier) -> new KineticOutputHatchPartMachine(holder, tier, OUTPUT_AMPERAGE), (tier, builder) -> builder .langValue(GTValues.VNF[tier] + " Kinetic Output Hatch") .rotationState(RotationState.ALL) @@ -31,12 +38,19 @@ public final class KineticBridgeMachines { .tooltips( Component.translatable("gtceu.universal.tooltip.voltage_out", FormattingUtil.formatNumbers(GTValues.V[tier]), GTValues.VNF[tier]), - Component.translatable("gtceu.universal.tooltip.amperage_out", 2), + Component.translatable("gtceu.universal.tooltip.amperage_out", OUTPUT_AMPERAGE), Component.translatable("gtceu.universal.tooltip.energy_storage_capacity", - FormattingUtil - .formatNumbers(EnergyHatchPartMachine.getHatchEnergyCapacity(tier, 2))), - Component.translatable("gtceu.machine.energy_hatch.output.tooltip")) - .overlayTieredHullModel("energy_output_hatch") + FormattingUtil.formatNumbers( + EnergyHatchPartMachine.getHatchEnergyCapacity(tier, OUTPUT_AMPERAGE))), + Component.translatable("gtceu.machine.energy_hatch.output.tooltip"), + Component.translatable("kineticbridge.tooltip.rpm", + FormattingUtil.formatNumbers(KineticOutputHatchPartMachine.TARGET_RPM)), + Component.translatable("kineticbridge.tooltip.capacity", + FormattingUtil.formatNumbers( + GTValues.V[tier] * OUTPUT_AMPERAGE / + KineticOutputHatchPartMachine.TARGET_RPM), + FormattingUtil.formatNumbers(GTValues.V[tier] * OUTPUT_AMPERAGE))) + .overlayTieredHullModel(KineticBridge.id("block/machine/part/kinetic_output_hatch_overlay")) .register(), GTValues.ALL_TIERS); @@ -49,7 +63,11 @@ public final class KineticBridgeMachines { for (int tier : tiers) { var register = KineticBridge.REGISTRATE.machine( GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, - holder -> factory.apply(holder, tier)) + MachineDefinition::new, + holder -> factory.apply(holder, tier), + KineticOutputHatchBlock::new, + (IMachineBlock block, Item.Properties properties) -> new MetaMachineItem(block, properties), + KineticOutputHatchBlockEntity::new) .tier(tier); definitions[tier] = builder.apply(tier, register); } diff --git a/src/main/java/com/imbgt/kineticbridge/block/KineticOutputHatchBlock.java b/src/main/java/com/imbgt/kineticbridge/block/KineticOutputHatchBlock.java new file mode 100644 index 0000000..3b177d1 --- /dev/null +++ b/src/main/java/com/imbgt/kineticbridge/block/KineticOutputHatchBlock.java @@ -0,0 +1,59 @@ +package com.imbgt.kineticbridge.block; + +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +import com.gregtechceu.gtceu.api.data.RotationState; +import com.gregtechceu.gtceu.api.machine.MachineDefinition; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +import com.imbgt.kineticbridge.blockentity.KineticOutputHatchBlockEntity; +import com.simibubi.create.content.kinetics.base.IRotate; + +/** + * Machine block wrapper that exposes a Create shaft interface while still + * delegating placement and state management to the GT machine definition. + */ +public class KineticOutputHatchBlock extends MetaMachineBlock implements IRotate { + + public KineticOutputHatchBlock(Properties properties, MachineDefinition definition) { + super(properties, definition); + } + + private Direction resolveFacing(BlockState state) { + RotationState rotationState = getDefinition().getRotationState(); + if (rotationState == RotationState.NONE) { + return Direction.NORTH; + } + return state.getValue(rotationState.property); + } + + @Override + public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) { + return face == resolveFacing(state); + } + + @Override + public Direction.Axis getRotationAxis(BlockState state) { + return resolveFacing(state).getAxis(); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, + BlockEntityType type) { + if (type != getDefinition().getBlockEntityType()) { + return null; + } + return (lvl, pos, blockState, blockEntity) -> { + if (blockEntity instanceof KineticOutputHatchBlockEntity hatch) { + hatch.tick(); + } + }; + } +} diff --git a/src/main/java/com/imbgt/kineticbridge/blockentity/KineticOutputHatchBlockEntity.java b/src/main/java/com/imbgt/kineticbridge/blockentity/KineticOutputHatchBlockEntity.java new file mode 100644 index 0000000..eafce1b --- /dev/null +++ b/src/main/java/com/imbgt/kineticbridge/blockentity/KineticOutputHatchBlockEntity.java @@ -0,0 +1,373 @@ +package com.imbgt.kineticbridge.blockentity; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; +import com.gregtechceu.gtceu.api.capability.ITurbineMachine; +import com.gregtechceu.gtceu.api.capability.compat.FeCompat; +import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; +import com.gregtechceu.gtceu.common.datafixers.TagFixer; +import com.gregtechceu.gtceu.utils.FormattingUtil; + +import com.lowdragmc.lowdraglib.syncdata.IManaged; +import com.lowdragmc.lowdraglib.syncdata.field.FieldManagedStorage; +import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; +import com.lowdragmc.lowdraglib.syncdata.managed.MultiManagedStorage; + +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; + +import com.imbgt.kineticbridge.machine.KineticOutputHatchPartMachine; +import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.Set; + +/** + * Block entity that bridges a GTCEu meta machine with Create's kinetic network. + */ +public class KineticOutputHatchBlockEntity extends GeneratingKineticBlockEntity + implements IMachineBlockEntity, IManaged { + + private static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder( + KineticOutputHatchBlockEntity.class); + private static final float CREATE_MAX_RPM = KineticOutputHatchPartMachine.TARGET_RPM; + private static final float TURBINE_REFERENCE_RPM = 7000.0f; + private static final float MIN_GENERATED_RPM = 1.0f; + // FE generated per stress unit per RPM tick, aligned with Create: New Age defaults + private static final double SU_TO_FE_ENERGY = 15.0d / 512.0d; + private static final float EPSILON = 1.0e-4f; + + private final MultiManagedStorage managedStorage = new MultiManagedStorage(); + private final FieldManagedStorage syncStorage = new FieldManagedStorage(this); + private final MetaMachine metaMachine; + private MachineRenderState renderState; + private final long offset = GTValues.RNG.nextInt(20); + + private float advertisedCapacity = 0.0f; + private float generatedSpeed = 0.0f; + private long lastTickPower = 0L; + private boolean metaUnloaded = false; + + public KineticOutputHatchBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + MachineDefinition definition = getDefinition(); + this.renderState = definition.defaultRenderState(); + this.metaMachine = definition.createMetaMachine(this); + this.getRootStorage().attach(getSyncStorage()); + } + + @Override + public void tick() { + super.tick(); + if (level == null) { + return; + } + + if (level.isClientSide()) { + metaMachine.clientTick(); + return; + } + + var machine = getMetaMachine(); + if (!(machine instanceof KineticOutputHatchPartMachine hatch)) { + updateKinetics(0.0f, 0.0f, 0L); + metaMachine.serverTick(); + return; + } + + ITurbineMachine turbine = null; + for (var controller : hatch.getControllers()) { + if (controller instanceof ITurbineMachine tm) { + turbine = tm; + break; + } + } + + int rotorSpeed = turbine != null ? Math.max(0, turbine.getRotorSpeed()) : hatch.getRotorSpeed(); + int maxRotorSpeed = turbine != null ? Math.max(1, turbine.getMaxRotorHolderSpeed()) : hatch.getMaxRotorSpeed(); + float rpmScale = 0.0f; + if (rotorSpeed > 0) { + rpmScale = Math.min(1.0f, Math.max(0.0f, rotorSpeed / TURBINE_REFERENCE_RPM)); + } + hatch.updateRotorTelemetry(rotorSpeed, maxRotorSpeed); + + NotifiableEnergyContainer container = hatch.getEnergyContainer(); + long voltage = container.getOutputVoltage(); + long amperage = container.getOutputAmperage(); + long theoreticalPower = Math.max(0L, voltage * amperage); + + if (theoreticalPower <= 0 || rpmScale <= 0.0f) { + updateKinetics(0.0f, 0.0f, 0L); + metaMachine.serverTick(); + return; + } + + float previousCapacity = advertisedCapacity; + float previousSpeed = generatedSpeed; + + float nextSpeed = CREATE_MAX_RPM * rpmScale; + if (nextSpeed > 0.0f && nextSpeed < MIN_GENERATED_RPM) { + nextSpeed = MIN_GENERATED_RPM; + } + + double speedFraction = Math.min(1.0d, nextSpeed / CREATE_MAX_RPM); + int euToFeRatio = Math.max(1, FeCompat.ratio(false)); + double theoreticalEuAtSpeed = theoreticalPower * speedFraction; + double theoreticalFeAtSpeed = theoreticalEuAtSpeed * euToFeRatio; + double absSpeed = Math.max(MIN_GENERATED_RPM, Math.abs(nextSpeed)); + double theoreticalStressCapacity = absSpeed > 0.0d ? + theoreticalFeAtSpeed / (absSpeed * SU_TO_FE_ENERGY) : 0.0d; + double theoreticalStress = theoreticalStressCapacity * absSpeed; + + double networkStress = Math.max(0.0d, this.stress); + double networkCapacity = Math.max(0.0d, this.capacity); + + double requestedStress = theoreticalStress; + if (networkCapacity > 0.0d) { + double shareRatio = theoreticalStress / networkCapacity; + requestedStress = Math.min(theoreticalStress, networkStress * shareRatio); + } else if (networkStress <= 0.0d) { + requestedStress = 0.0d; + } + + double requestedFe = requestedStress * SU_TO_FE_ENERGY; + double requestedEu = requestedFe / euToFeRatio; + + double targetEu = Math.min(theoreticalEuAtSpeed, requestedEu); + long stored = container.getEnergyStored(); + long maxAvailable = Math.min(stored, theoreticalPower); + if (maxAvailable > 0) { + targetEu = Math.min(targetEu, maxAvailable); + } + + long energyBudget = 0L; + if (targetEu > 0.0d) { + energyBudget = Math.max(1L, (long) Math.ceil(targetEu)); + if (maxAvailable > 0) { + energyBudget = Math.min(energyBudget, maxAvailable); + } + } + + long drained = energyBudget > 0 ? container.removeEnergy(energyBudget) : 0L; + + double advertised = theoreticalStressCapacity; + if (energyBudget > drained && requestedStress > 0.0d) { + double drainedFe = FeCompat.toFeLong(drained, euToFeRatio); + double actualCapacity = drainedFe / (absSpeed * absSpeed * SU_TO_FE_ENERGY); + advertised = Math.min(theoreticalStressCapacity, actualCapacity); + } + + float nextCapacity = (float) Math.max(0.0d, advertised); + + updateKinetics(nextSpeed, nextCapacity, drained); + + boolean speedChanged = Math.abs(previousSpeed - generatedSpeed) > EPSILON; + boolean capacityChanged = Math.abs(previousCapacity - advertisedCapacity) > EPSILON; + + if (speedChanged) { + updateGeneratedRotation(); + } else if (capacityChanged && hasNetwork()) { + notifyStressCapacityChange(advertisedCapacity); + getOrCreateNetwork().updateStressFor(this, calculateStressApplied()); + getOrCreateNetwork().updateStress(); + sendData(); + } + + metaMachine.serverTick(); + } + + private void updateKinetics(float speed, float capacityPerSpeed, long drainedPower) { + this.generatedSpeed = speed; + this.advertisedCapacity = capacityPerSpeed; + this.lastTickPower = drainedPower; + } + + @Override + public float calculateStressApplied() { + return 0.0f; + } + + @Override + public float calculateAddedStressCapacity() { + return advertisedCapacity; + } + + @Override + public float getGeneratedSpeed() { + return generatedSpeed; + } + + @Override + protected void read(CompoundTag tag, boolean clientPacket) { + if (!clientPacket) { + TagFixer.fixFluidTags(tag); + } + super.read(tag, clientPacket); + this.generatedSpeed = tag.getFloat("GeneratedSpeed"); + this.advertisedCapacity = tag.getFloat("StressCapacity"); + this.lastTickPower = tag.getLong("LastPower"); + } + + @Override + protected void write(CompoundTag tag, boolean clientPacket) { + super.write(tag, clientPacket); + tag.putFloat("GeneratedSpeed", generatedSpeed); + tag.putFloat("StressCapacity", advertisedCapacity); + tag.putLong("LastPower", lastTickPower); + } + + @Override + public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { + boolean added = super.addToGoggleTooltip(tooltip, isPlayerSneaking); + MetaMachine machine = getMetaMachine(); + if (machine instanceof KineticOutputHatchPartMachine hatch) { + NotifiableEnergyContainer container = hatch.getEnergyContainer(); + long maxPower = container.getOutputVoltage() * container.getOutputAmperage(); + tooltip.add(Component.translatable("tooltip.kineticbridge.max_power", + Component.literal(FormattingUtil.formatNumbers(maxPower)) + .withStyle(ChatFormatting.AQUA))); + tooltip.add(Component.translatable("tooltip.kineticbridge.max_stress", + Component.literal(FormattingUtil.formatNumbers(Math.max(0.0f, advertisedCapacity))) + .withStyle(ChatFormatting.AQUA), + Component.literal(String.format("%.0f", (double) CREATE_MAX_RPM)) + .withStyle(ChatFormatting.AQUA))); + tooltip.add(Component.translatable("tooltip.kineticbridge.last_tick_power", + Component.literal(FormattingUtil.formatNumbers(lastTickPower)).withStyle(ChatFormatting.AQUA))); + return true; + } + return added; + } + + @Override + public MultiManagedStorage getRootStorage() { + return managedStorage; + } + + public FieldManagedStorage getSyncStorage() { + return syncStorage; + } + + @Override + public ManagedFieldHolder getFieldHolder() { + return MANAGED_FIELD_HOLDER; + } + + @Override + public MachineRenderState getRenderState() { + return renderState; + } + + @Override + public void setRenderState(MachineRenderState state) { + this.renderState = state; + scheduleRenderUpdate(); + } + + @Override + public MetaMachine getMetaMachine() { + return metaMachine; + } + + @Override + public long getOffset() { + return offset; + } + + @Override + public void onLoad() { + super.onLoad(); + metaMachine.onLoad(); + } + + private void unloadMetaMachine() { + if (!metaUnloaded) { + metaUnloaded = true; + metaMachine.onUnload(); + } + } + + @Override + public void remove() { + unloadMetaMachine(); + super.remove(); + } + + @Override + public void invalidate() { + unloadMetaMachine(); + super.invalidate(); + } + + @Override + public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, ItemStack held, + Set toolTypes) { + return metaMachine.shouldRenderGrid(player, pos, state, held, toolTypes); + } + + @Override + public @Nullable com.lowdragmc.lowdraglib.gui.texture.ResourceTexture sideTips(Player player, BlockPos pos, + BlockState state, + Set toolTypes, + Direction side) { + return metaMachine.sideTips(player, pos, state, toolTypes, side); + } + + @Override + public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + var result = MetaMachineBlockEntity.getCapability(metaMachine, cap, side); + if (result.isPresent()) { + return result; + } + return super.getCapability(cap, side); + } + + @Override + public void setChanged() { + if (level != null) { + level.blockEntityChanged(worldPosition); + } + } + + @OnlyIn(Dist.CLIENT) + @Override + public AABB getRenderBoundingBox() { + return super.getRenderBoundingBox().inflate(1); + } + + @Override + public void onChanged() { + var lvl = getLevel(); + if (lvl != null && !lvl.isClientSide && lvl.getServer() != null) { + lvl.getServer().execute(this::setChanged); + } + } + + @Override + public boolean triggerEvent(int id, int param) { + if (id == 1) { + if (level != null && level.isClientSide) { + scheduleRenderUpdate(); + } + return true; + } + return super.triggerEvent(id, param); + } +} diff --git a/src/main/java/com/imbgt/kineticbridge/datagen/KineticBridgeDatagen.java b/src/main/java/com/imbgt/kineticbridge/datagen/KineticBridgeDatagen.java new file mode 100644 index 0000000..cfae728 --- /dev/null +++ b/src/main/java/com/imbgt/kineticbridge/datagen/KineticBridgeDatagen.java @@ -0,0 +1,48 @@ +package com.imbgt.kineticbridge.datagen; + +import com.gregtechceu.gtceu.api.GTValues; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import com.imbgt.kineticbridge.KineticBridge; +import com.tterrag.registrate.providers.ProviderType; + +@Mod.EventBusSubscriber(modid = KineticBridge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) +public final class KineticBridgeDatagen { + + private KineticBridgeDatagen() {} + + @SubscribeEvent + public static void gatherData(GatherDataEvent event) { + var helper = event.getExistingFileHelper(); + helper.trackGenerated(new ResourceLocation("gtceu", "block/machine/part/energy_output_hatch"), + PackType.CLIENT_RESOURCES, ".json", "models"); + helper.trackGenerated(KineticBridge.id("block/machine/part/kinetic_output_hatch_overlay"), + PackType.CLIENT_RESOURCES, ".json", "models"); + + String[] textureKeys = { "bottom", "top", "side" }; + for (int tier : GTValues.ALL_TIERS) { + String tierName = GTValues.VN[tier].toLowerCase(java.util.Locale.ROOT); + for (String key : textureKeys) { + helper.trackGenerated(new ResourceLocation("gtceu", + "block/casings/voltage/" + tierName + "/" + key), + PackType.CLIENT_RESOURCES, ".png", "textures"); + } + } + if (event.includeClient()) { + KineticBridge.REGISTRATE.addDataGenerator(ProviderType.LANG, provider -> { + provider.add("tooltip.kineticbridge.max_power", "Max Output: %s EU/t"); + provider.add("tooltip.kineticbridge.max_stress", "Active Capacity: %s SU @ %s RPM"); + provider.add("tooltip.kineticbridge.last_tick_power", "Last Tick Draw: %s EU"); + provider.add("kineticbridge.tooltip.rpm", "Outputs Create rotation at %s RPM"); + provider.add("kineticbridge.tooltip.capacity", "Provides up to %s SU (~%s EU/t)"); + }); + var output = event.getGenerator().getPackOutput(); + event.getGenerator().addProvider(true, new KineticBridgeMachineModelProvider(output)); + } + } +} diff --git a/src/main/java/com/imbgt/kineticbridge/datagen/KineticBridgeMachineModelProvider.java b/src/main/java/com/imbgt/kineticbridge/datagen/KineticBridgeMachineModelProvider.java new file mode 100644 index 0000000..b996d69 --- /dev/null +++ b/src/main/java/com/imbgt/kineticbridge/datagen/KineticBridgeMachineModelProvider.java @@ -0,0 +1,123 @@ +package com.imbgt.kineticbridge.datagen; + +import com.gregtechceu.gtceu.api.GTValues; + +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.imbgt.kineticbridge.KineticBridge; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Locale; +import java.util.concurrent.CompletableFuture; + +public class KineticBridgeMachineModelProvider implements DataProvider { + + private final PackOutput output; + + public KineticBridgeMachineModelProvider(PackOutput output) { + this.output = output; + } + + @Override + public CompletableFuture run(CachedOutput cache) { + try { + for (int tier : GTValues.ALL_TIERS) { + String tierName = GTValues.VN[tier].toLowerCase(Locale.ROOT); + String machineId = tierName + "_kinetic_output_hatch"; + + writeBlockModel(cache, tierName, machineId); + writeBlockState(cache, machineId); + writeItemModel(cache, machineId); + } + } catch (IOException e) { + return CompletableFuture.failedFuture(e); + } + return CompletableFuture.completedFuture(null); + } + + private void writeBlockState(CachedOutput cache, String machineId) throws IOException { + JsonObject root = new JsonObject(); + JsonObject variants = new JsonObject(); + root.add("variants", variants); + + String modelPath = "kineticbridge:block/machine/" + machineId; + variants.add("facing=down", rot(modelPath, 90, null)); + variants.add("facing=east", rot(modelPath, null, 90)); + variants.add("facing=north", rot(modelPath, null, null)); + variants.add("facing=south", rot(modelPath, null, 180)); + variants.add("facing=up", rotWithGtZ(modelPath, 270, 180)); + variants.add("facing=west", rot(modelPath, null, 270)); + + Path path = resourcePath("blockstates", machineId); + DataProvider.saveStable(cache, root, path); + } + + private JsonObject rot(String model, Integer x, Integer y) { + JsonObject obj = new JsonObject(); + obj.addProperty("model", model); + if (x != null) { + obj.addProperty("x", x); + } + if (y != null) { + obj.addProperty("y", y); + } + return obj; + } + + private JsonObject rotWithGtZ(String model, int x, int z) { + JsonObject obj = rot(model, x, null); + obj.addProperty("gtceu:z", z); + return obj; + } + + private void writeBlockModel(CachedOutput cache, String tierName, String machineId) throws IOException { + JsonObject root = new JsonObject(); + root.addProperty("parent", "minecraft:block/block"); + root.addProperty("loader", "gtceu:machine"); + root.addProperty("machine", KineticBridge.MOD_ID + ":" + machineId); + + JsonArray replaceable = new JsonArray(); + replaceable.add("bottom"); + replaceable.add("top"); + replaceable.add("side"); + root.add("replaceable_textures", replaceable); + + JsonObject variants = new JsonObject(); + JsonObject emptyVariant = new JsonObject(); + JsonObject model = new JsonObject(); + model.addProperty("parent", "gtceu:block/machine/part/energy_output_hatch"); + JsonObject textures = new JsonObject(); + textures.addProperty("bottom", "gtceu:block/casings/voltage/" + tierName + "/bottom"); + textures.addProperty("side", "gtceu:block/casings/voltage/" + tierName + "/side"); + textures.addProperty("top", "gtceu:block/casings/voltage/" + tierName + "/top"); + model.add("textures", textures); + emptyVariant.add("model", model); + variants.add("", emptyVariant); + root.add("variants", variants); + + Path path = resourcePath("models/block/machine", machineId); + DataProvider.saveStable(cache, root, path); + } + + private void writeItemModel(CachedOutput cache, String machineId) throws IOException { + JsonObject root = new JsonObject(); + root.addProperty("parent", "kineticbridge:block/machine/" + machineId); + Path path = resourcePath("models/item", machineId); + DataProvider.saveStable(cache, root, path); + } + + private Path resourcePath(String folder, String machineId) { + return output.getOutputFolder(PackOutput.Target.RESOURCE_PACK) + .resolve("assets/" + KineticBridge.MOD_ID + "/" + folder + "/" + machineId + ".json"); + } + + @Override + public String getName() { + return "Kinetic Bridge machine models"; + } +} diff --git a/src/main/java/com/imbgt/kineticbridge/machine/KineticOutputHatchPartMachine.java b/src/main/java/com/imbgt/kineticbridge/machine/KineticOutputHatchPartMachine.java index fa0258b..8a4ded4 100644 --- a/src/main/java/com/imbgt/kineticbridge/machine/KineticOutputHatchPartMachine.java +++ b/src/main/java/com/imbgt/kineticbridge/machine/KineticOutputHatchPartMachine.java @@ -2,11 +2,50 @@ package com.imbgt.kineticbridge.machine; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.common.machine.multiblock.part.EnergyHatchPartMachine; public class KineticOutputHatchPartMachine extends EnergyHatchPartMachine { + public static final float TARGET_RPM = 256.0f; + public KineticOutputHatchPartMachine(IMachineBlockEntity holder, int tier, int amperage) { super(holder, tier, IO.OUT, amperage); } + + @Override + protected NotifiableEnergyContainer createEnergyContainer(Object... args) { + NotifiableEnergyContainer container = super.createEnergyContainer(args); + container.setSideOutputCondition(side -> false); + container.setCapabilityValidator(side -> side == null); + return container; + } + + public long getMaxPowerPerTick() { + return energyContainer.getOutputVoltage() * energyContainer.getOutputAmperage(); + } + + public float getTargetRpm() { + return TARGET_RPM; + } + + public NotifiableEnergyContainer getEnergyContainer() { + return energyContainer; + } + + private int reportedRotorSpeed; + private int maxRotorSpeed = 1; + + public void updateRotorTelemetry(int rotorSpeed, int maxSpeed) { + this.reportedRotorSpeed = Math.max(0, rotorSpeed); + this.maxRotorSpeed = Math.max(1, maxSpeed); + } + + public int getRotorSpeed() { + return reportedRotorSpeed; + } + + public int getMaxRotorSpeed() { + return Math.max(1, maxRotorSpeed); + } } diff --git a/src/main/resources/assets/kineticbridge/models/block/machine/part/kinetic_output_hatch_overlay.json b/src/main/resources/assets/kineticbridge/models/block/machine/part/kinetic_output_hatch_overlay.json new file mode 100644 index 0000000..4d539cc --- /dev/null +++ b/src/main/resources/assets/kineticbridge/models/block/machine/part/kinetic_output_hatch_overlay.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/machine/part/energy_output_hatch" +}