diff --git a/README.md b/README.md index 3aad04a..06b0ddf 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +![Poster](images/poster.png) + # EnergonRelics TBD @@ -5,4 +7,5 @@ TBD [View Changelog](CHANGELOG.md) ## Credits -- ``@PoeticRainbow#5928`` on Discord For The Logo \ No newline at end of file +- ``@PoeticRainbow#5928`` on Discord For The Logo And Poster +- ``@PoeticRainbow#5928`` on Discord For Their Texture Set \ No newline at end of file diff --git a/TODO b/TODO deleted file mode 100644 index ac889e6..0000000 --- a/TODO +++ /dev/null @@ -1,24 +0,0 @@ -Network Chips: -- Contain a Network ID In NBT -- When Held, Highlights Supported Blocks -- When Right-Cliking On A Supported-Block Add it To The Network -Energy Recievers: -- Conatin network ID(s) -- Requests a certain amount of power every tick -- Spreads out power ewuest over all networks -- Chunk loads unloaded networks -- No energy transfer speed restrictions -Energy Providers: -- Contaisn Network Chip -- Can only provide power to recievers within 60 blocks -- Can be an energy reciever -Battery: -- Surrounded on all but one sides by Battery casing, last side covered by battery controller -- Energy reiever for charging -- Energy prvodier for usage -- Highlight covers entire multi-block -Reactor: -- Temporary battery -- Refreshes battery every 10 ticks, no fuel set battery to 0, if fuel fill battery - -On each tick an energy receiver can add an "action", an action has a success function, a fail function, and a cost, the action is propagated up to the energy provider, which will either execute the success function and deduct the energy amount, or execute the fail function. \ No newline at end of file diff --git a/assets/battery_casing.png b/assets/battery_casing.png deleted file mode 100644 index 908a50b..0000000 Binary files a/assets/battery_casing.png and /dev/null differ diff --git a/assets/battery_controller.png b/assets/battery_controller.png deleted file mode 100644 index 5199859..0000000 Binary files a/assets/battery_controller.png and /dev/null differ diff --git a/assets/battery_core.png b/assets/battery_core.png deleted file mode 100644 index 87b904b..0000000 Binary files a/assets/battery_core.png and /dev/null differ diff --git a/assets/network_chip.png b/assets/network_chip.png deleted file mode 100644 index facb1a8..0000000 Binary files a/assets/network_chip.png and /dev/null differ diff --git a/assets/switch_off.png b/assets/switch_off.png deleted file mode 100644 index 1ffbe5f..0000000 Binary files a/assets/switch_off.png and /dev/null differ diff --git a/assets/switch_on.png b/assets/switch_on.png deleted file mode 100644 index 6646c58..0000000 Binary files a/assets/switch_on.png and /dev/null differ diff --git a/assets/switch_side.png b/assets/switch_side.png deleted file mode 100644 index f25515f..0000000 Binary files a/assets/switch_side.png and /dev/null differ diff --git a/build.gradle b/build.gradle index f7dee83..fac9e77 100644 --- a/build.gradle +++ b/build.gradle @@ -16,9 +16,17 @@ minecraft { dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.minecraft_version}+build.${project.yarn_build}:v2" - modCompile "net.fabricmc:fabric-loader:${project.fabric_loader_version}" + modImplementation "net.fabricmc:fabric-loader:${project.fabric_loader_version}" - modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" + + modImplementation "io.github.prospector:modmenu:${project.modmenu_version}" + + modImplementation "me.shedaniel.cloth:config-2:${project.cloth_config_version}" + include "me.shedaniel.cloth:config-2:${project.cloth_config_version}" + + modImplementation "me.sargunvohra.mcmods:autoconfig1u:${project.autoconfig_version}" + include "me.sargunvohra.mcmods:autoconfig1u:${project.autoconfig_version}" } processResources { diff --git a/gradle.properties b/gradle.properties index 081d2cf..a9dd889 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,3 +14,6 @@ org.gradle.jvmargs = -Xmx1G # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api fabric_api_version = 0.14.6+build.377-1.16 + modmenu_version = 1.14.5+build.30 + cloth_config_version = 4.6.0 + autoconfig_version = 3.2.0-unstable diff --git a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java index 9888a6a..a5cd9dd 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java +++ b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java @@ -13,8 +13,11 @@ import com.thebrokenrail.energonrelics.block.EnergonLightBlock; import com.thebrokenrail.energonrelics.block.SolarPanelBlock; import com.thebrokenrail.energonrelics.block.SwitchBlock; import com.thebrokenrail.energonrelics.block.util.SimpleBlock; +import com.thebrokenrail.energonrelics.client.config.UserConfig; import com.thebrokenrail.energonrelics.item.MultimeterItem; import com.thebrokenrail.energonrelics.item.NetworkChipItem; +import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; +import me.sargunvohra.mcmods.autoconfig1u.serializer.GsonConfigSerializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/DefensiveLaserBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/DefensiveLaserBlock.java index 658108a..1410601 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/DefensiveLaserBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/DefensiveLaserBlock.java @@ -26,7 +26,7 @@ public class DefensiveLaserBlock extends EnergyProviderBlock { public static final BooleanProperty POWERED = Properties.POWERED; public DefensiveLaserBlock() { - super(FabricBlockSettings.of(Material.GLASS, MaterialColor.BLACK).requiresTool().strength(50.0F, 1200.0F)); + super(FabricBlockSettings.of(Material.GLASS, MaterialColor.BLACK).requiresTool().strength(50.0F, 1200.0F).nonOpaque().allowsSpawning((state, world, pos, type) -> false).solidBlock((state, world, pos) -> false).suffocates((state, world, pos) -> false).lightLevel(state -> state.get(POWERED) ? 7 : 0)); setDefaultState(getDefaultState().with(POWERED, false)); } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/DefensiveLaserBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/DefensiveLaserBlockEntity.java index 9ae3d8a..b8661fb 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/DefensiveLaserBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/DefensiveLaserBlockEntity.java @@ -1,6 +1,6 @@ package com.thebrokenrail.energonrelics.block.entity; -import com.thebrokenrail.energonrelics.Config; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.DefensiveLaserBlock; import com.thebrokenrail.energonrelics.energy.core.EnergyReceiverBlockEntity; @@ -157,7 +157,7 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { private Predicate getTargetPredicate(boolean useCurrentRotation) { return entity -> { - if (entity.isAlive() && (!(entity instanceof PlayerEntity) || !((PlayerEntity) entity).isCreative()) && !entity.isInvisible() && entity.getPos().distanceTo(getPosVec()) <= Config.DEFENSIVE_LASER_RANGE) { + if (entity.isAlive() && (!(entity instanceof PlayerEntity) || !((PlayerEntity) entity).isCreative()) && !entity.isInvisible() && entity.getPos().distanceTo(getPosVec()) <= HardcodedConfig.DEFENSIVE_LASER_RANGE) { Vec3d entityPos = entity.getPos(); Vec3d start; if (useCurrentRotation) { @@ -174,7 +174,7 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { } private List getEntities(Predicate predicate) { - return Objects.requireNonNull(getWorld()).getEntitiesByClass(LivingEntity.class, new Box(getPos()).expand(Config.DEFENSIVE_LASER_RANGE), predicate); + return Objects.requireNonNull(getWorld()).getEntitiesByClass(LivingEntity.class, new Box(getPos()).expand(HardcodedConfig.DEFENSIVE_LASER_RANGE), predicate); } private Entity getDummyEntity() { @@ -187,7 +187,7 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { Vec3d posVec = getPosVec(pos); Vec3d collision = null; for (LivingEntity entity : entities) { - Optional optional = entity.getBoundingBox().rayTrace(posVec, posVec.add(rotation.getRayVector().multiply(Config.DEFENSIVE_LASER_RANGE))); + Optional optional = entity.getBoundingBox().rayTrace(posVec, posVec.add(rotation.getRayVector().multiply(HardcodedConfig.DEFENSIVE_LASER_RANGE))); if (optional.isPresent()) { Vec3d vec = optional.get(); if (collision == null || vec.distanceTo(posVec) < collision.distanceTo(posVec)) { @@ -198,7 +198,7 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { Vec3d rotationVec = rotation.getRayVector(); Vec3d start = rotationVec.add(posVec); - Vec3d end = rotationVec.multiply(Config.DEFENSIVE_LASER_RANGE).add(posVec); + Vec3d end = rotationVec.multiply(HardcodedConfig.DEFENSIVE_LASER_RANGE).add(posVec); HitResult result = world.rayTrace(new RayTraceContext(start, end, RayTraceContext.ShapeType.COLLIDER, RayTraceContext.FluidHandling.ANY, getDummyEntity())); if (result.getType() != HitResult.Type.MISS && (collision == null || result.getPos().distanceTo(posVec) < collision.distanceTo(posVec))) { collision = result.getPos(); @@ -206,31 +206,31 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { double distance; if (collision != null) { - world.createExplosion(null, collision.getX(), collision.getY(), collision.getZ(), 1, Explosion.DestructionType.NONE); + world.createExplosion(null, collision.getX(), collision.getY(), collision.getZ(), 2f, Explosion.DestructionType.NONE); distance = posVec.distanceTo(collision); } else { - distance = Config.DEFENSIVE_LASER_RANGE; + distance = HardcodedConfig.DEFENSIVE_LASER_RANGE; } - double multiplier = 6d; + double multiplier = 4d; distance = distance * multiplier; for (int i = 0; i < distance; i++) { Vec3d vec = rotationVec.multiply(i / multiplier).add(posVec); - ((ServerWorld) world).spawnParticles(ParticleTypes.END_ROD, vec.getX(), vec.getY(), vec.getZ(), 1, 0, 0, 0, 0.1f); + ((ServerWorld) world).spawnParticles(ParticleTypes.END_ROD, vec.getX(), vec.getY(), vec.getZ(), 1, 0, 0, 0, 0.4f); } } @Override protected void tickEnergy() { assert getWorld() != null; - addAction(Action.createBlockStatePropertyAction(Config.DEFENSIVE_LASER_IDLE_ENERGY_REQUIRED, DefensiveLaserBlock.POWERED, true, false)); + addAction(Action.createBlockStatePropertyAction(HardcodedConfig.DEFENSIVE_LASER_IDLE_ENERGY_REQUIRED, DefensiveLaserBlock.POWERED, true, false)); if (getCachedState().get(DefensiveLaserBlock.POWERED)) { if (countdown > 0) { countdown--; } if (countdown == 1) { - addAction(new Action(Config.DEFENSIVE_LASER_FIRE_ENERGY_REQUIRED, (world, pos, state) -> { + addAction(new Action(HardcodedConfig.DEFENSIVE_LASER_FIRE_ENERGY_REQUIRED, (world, pos, state) -> { firing = false; fire(world, pos); }, (world, pos, state) -> firing = false)); @@ -246,7 +246,7 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { } } else { if (getTargetPredicate(false).test(target)) { - Optional optional = target.getBoundingBox().rayTrace(getPosVec(), getPosVec().add(rotation.getRayVector().multiply(Config.DEFENSIVE_LASER_RANGE))); + Optional optional = target.getBoundingBox().rayTrace(getPosVec(), getPosVec().add(rotation.getRayVector().multiply(HardcodedConfig.DEFENSIVE_LASER_RANGE))); if (optional.isPresent() && getTargetPredicate(true).test(target)) { countdown = COUNTDOWN; } else { diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/EnergonLightBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/EnergonLightBlockEntity.java index 7a475ff..0ee5ebe 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/EnergonLightBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/EnergonLightBlockEntity.java @@ -1,6 +1,6 @@ package com.thebrokenrail.energonrelics.block.entity; -import com.thebrokenrail.energonrelics.Config; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; import com.thebrokenrail.energonrelics.block.EnergonLightBlock; import com.thebrokenrail.energonrelics.energy.core.EnergyReceiverBlockEntity; import com.thebrokenrail.energonrelics.energy.core.util.Action; @@ -13,6 +13,6 @@ public class EnergonLightBlockEntity extends EnergyReceiverBlockEntity { @Override protected void tickEnergy() { - addAction(Action.createBlockStatePropertyAction(Config.ENERGON_LIGHT_ENERGY_REQUIRED, EnergonLightBlock.POWERED, true, false)); + addAction(Action.createBlockStatePropertyAction(HardcodedConfig.ENERGON_LIGHT_ENERGY_REQUIRED, EnergonLightBlock.POWERED, true, false)); } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/SolarPanelBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/SolarPanelBlockEntity.java index bbbc005..c534802 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/SolarPanelBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/SolarPanelBlockEntity.java @@ -1,6 +1,6 @@ package com.thebrokenrail.energonrelics.block.entity; -import com.thebrokenrail.energonrelics.Config; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; import com.thebrokenrail.energonrelics.energy.helper.EnergyGeneratorBlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.Direction; @@ -30,7 +30,7 @@ public class SolarPanelBlockEntity extends EnergyGeneratorBlockEntity { public long getDisplayEnergy() { if (hasWorld() && Objects.requireNonNull(getWorld()).getDimension().hasSkyLight()) { int light = getLight(); - return (long) ((float) Config.SOLAR_PANEL_MAX_ENERGY_OUTPUT * ((float) light / 15f)); + return (long) ((float) HardcodedConfig.SOLAR_PANEL_MAX_ENERGY_OUTPUT * ((float) light / 15f)); } else { return 0; } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/battery/PassiveBatteryControllerBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/battery/PassiveBatteryControllerBlockEntity.java index b5d801d..35901ef 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/battery/PassiveBatteryControllerBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/battery/PassiveBatteryControllerBlockEntity.java @@ -1,6 +1,6 @@ package com.thebrokenrail.energonrelics.block.entity.battery; -import com.thebrokenrail.energonrelics.Config; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.battery.PassiveBatteryControllerBlock; import com.thebrokenrail.energonrelics.energy.core.EnergyReceiverBlockEntity; @@ -48,7 +48,7 @@ public class PassiveBatteryControllerBlockEntity extends EnergyReceiverBlockEnti @Override protected void tickEnergy() { - long charge = Config.BATTERY_CHARGE_RATE; + long charge = HardcodedConfig.BATTERY_CHARGE_RATE; if (!isActiveController()) { addAction(new Action(charge, (world, pos, state) -> { BlockEntity entity = world.getBlockEntity(pos); diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorControllerBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorControllerBlockEntity.java index d65f5ac..13be87f 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorControllerBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorControllerBlockEntity.java @@ -1,6 +1,6 @@ package com.thebrokenrail.energonrelics.block.entity.reactor; -import com.thebrokenrail.energonrelics.Config; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.battery.PassiveBatteryControllerBlock; import com.thebrokenrail.energonrelics.block.entity.battery.PassiveBatteryControllerBlockEntity; @@ -55,9 +55,13 @@ public class ReactorControllerBlockEntity extends EnergyGeneratorBlockEntity { @Override public long getDisplayEnergy() { - Reactor reactor = getReactor(); - if (reactor != null && reactor.core.isReacting()) { - return Config.REACTOR_ENERGY_OUTPUT; + if (getCachedState().get(ReactorControllerBlock.POWERED)) { + Reactor reactor = getReactor(); + if (reactor != null && reactor.core.isReacting()) { + return HardcodedConfig.REACTOR_ENERGY_OUTPUT; + } else { + return 0; + } } else { return 0; } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorCoreBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorCoreBlockEntity.java index 8df44bf..c61bdb2 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorCoreBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorCoreBlockEntity.java @@ -1,6 +1,6 @@ package com.thebrokenrail.energonrelics.block.entity.reactor; -import com.thebrokenrail.energonrelics.Config; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; @@ -32,7 +32,7 @@ public class ReactorCoreBlockEntity extends BlockEntity implements Tickable { } void startReaction() { - reactionTime = Config.REACTOR_TIME; + reactionTime = HardcodedConfig.REACTOR_TIME; } @Override diff --git a/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java b/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java index 52c5c11..46f6879 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java +++ b/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java @@ -2,18 +2,42 @@ package com.thebrokenrail.energonrelics.client; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.util.EnergyProviderBlock; +import com.thebrokenrail.energonrelics.client.config.UserConfig; +import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; +import me.sargunvohra.mcmods.autoconfig1u.ConfigData; +import me.sargunvohra.mcmods.autoconfig1u.annotation.Config; +import me.sargunvohra.mcmods.autoconfig1u.serializer.GsonConfigSerializer; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.RenderLayer; @Environment(EnvType.CLIENT) public class EnergonRelicsClient implements ClientModInitializer { + @Environment(EnvType.CLIENT) + private static class ReloadSerializer extends GsonConfigSerializer { + public ReloadSerializer(Config definition, Class configClass) { + super(definition, configClass); + } + + @Override + public void serialize(T config) throws SerializationException { + super.serialize(config); + MinecraftClient client = MinecraftClient.getInstance(); + if (client.getResourceManager() != null) { + client.reloadResources(); + } + } + } + @Override public void onInitializeClient() { EnergyProviderBlock.initRenderer(); BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.THERMAL_GLASS_BLOCK, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.DEFENSIVE_LASER_BLOCK, RenderLayer.getCutout()); + + AutoConfig.register(UserConfig.class, ReloadSerializer::new); } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/client/ModMenu.java b/src/main/java/com/thebrokenrail/energonrelics/client/ModMenu.java new file mode 100644 index 0000000..1da3335 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/client/ModMenu.java @@ -0,0 +1,16 @@ +package com.thebrokenrail.energonrelics.client; + +import com.thebrokenrail.energonrelics.client.config.UserConfig; +import io.github.prospector.modmenu.api.ConfigScreenFactory; +import io.github.prospector.modmenu.api.ModMenuApi; +import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +@Environment(EnvType.CLIENT) +public class ModMenu implements ModMenuApi { + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return screen -> AutoConfig.getConfigScreen(UserConfig.class, screen).get(); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/client/config/UserConfig.java b/src/main/java/com/thebrokenrail/energonrelics/client/config/UserConfig.java new file mode 100644 index 0000000..17ec604 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/client/config/UserConfig.java @@ -0,0 +1,24 @@ +package com.thebrokenrail.energonrelics.client.config; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import me.sargunvohra.mcmods.autoconfig1u.ConfigData; +import me.sargunvohra.mcmods.autoconfig1u.annotation.Config; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +import java.util.Locale; + +@Environment(EnvType.CLIENT) +@Config(name = EnergonRelics.NAMESPACE) +public class UserConfig implements ConfigData { + public enum TextureSet { + TheBrokenRail, + PoeticRainbow; + + public String namespace() { + return EnergonRelics.NAMESPACE + '-' + name().toLowerCase(Locale.ROOT); + } + } + + public TextureSet textureSet = TextureSet.TheBrokenRail; +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/Config.java b/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java similarity index 78% rename from src/main/java/com/thebrokenrail/energonrelics/Config.java rename to src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java index e7b3fc1..fa16076 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/Config.java +++ b/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java @@ -1,6 +1,6 @@ -package com.thebrokenrail.energonrelics; +package com.thebrokenrail.energonrelics.config; -public class Config { +public class HardcodedConfig { public static final int POWER_RANGE = 64; public static final int ENERGON_LIGHT_ENERGY_REQUIRED = 5; @@ -12,7 +12,7 @@ public class Config { public static final int REACTOR_TIME = 2400; public static final int REACTOR_ENERGY_OUTPUT = 250; - public static final int DEFENSIVE_LASER_RANGE = 18; + public static final int DEFENSIVE_LASER_RANGE = 28; public static final int DEFENSIVE_LASER_IDLE_ENERGY_REQUIRED = 32; public static final int DEFENSIVE_LASER_FIRE_ENERGY_REQUIRED = 64; } diff --git a/src/main/java/com/thebrokenrail/energonrelics/energy/core/EnergyProviderBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/energy/core/EnergyProviderBlockEntity.java index 588d135..08f04fc 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/energy/core/EnergyProviderBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/energy/core/EnergyProviderBlockEntity.java @@ -1,6 +1,6 @@ package com.thebrokenrail.energonrelics.energy.core; -import com.thebrokenrail.energonrelics.Config; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.component.NetworkComponent; import com.thebrokenrail.energonrelics.energy.core.util.Action; @@ -55,7 +55,7 @@ public class EnergyProviderBlockEntity extends BlockEntity implements EnergyProv @Override public final boolean isWithinDistance(Vec3d pos) { - return getPos().isWithinDistance(pos, Config.POWER_RANGE); + return getPos().isWithinDistance(pos, HardcodedConfig.POWER_RANGE); } private ItemStack stack = ItemStack.EMPTY; diff --git a/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinAbstractFileResourcePack.java b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinAbstractFileResourcePack.java new file mode 100644 index 0000000..789e028 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinAbstractFileResourcePack.java @@ -0,0 +1,46 @@ +package com.thebrokenrail.energonrelics.mixin; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import com.thebrokenrail.energonrelics.client.config.UserConfig; +import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.resource.AbstractFileResourcePack; +import net.minecraft.resource.ResourceType; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.io.IOException; +import java.io.InputStream; + +@Environment(EnvType.CLIENT) +@Mixin(AbstractFileResourcePack.class) +public class MixinAbstractFileResourcePack { + @Inject(at = @At("HEAD"), method = "open", cancellable = true) + public void injectOpen(ResourceType type, Identifier id, CallbackInfoReturnable info) { + if (id.getNamespace().equals(EnergonRelics.NAMESPACE)) { + try { + Identifier newID = new Identifier(AutoConfig.getConfigHolder(UserConfig.class).getConfig().textureSet.namespace(), id.getPath()); + InputStream in = ((AbstractFileResourcePack) (Object) this).open(type, newID); + if (in != null) { + info.setReturnValue(in); + } + } catch (IOException ignored) { + } + } + } + + @Inject(at = @At("HEAD"), method = "contains", cancellable = true) + public void injectContains(ResourceType type, Identifier id, CallbackInfoReturnable info) { + if (id.getNamespace().equals(EnergonRelics.NAMESPACE)) { + Identifier newID = new Identifier(AutoConfig.getConfigHolder(UserConfig.class).getConfig().textureSet.namespace(), id.getPath()); + boolean out = ((AbstractFileResourcePack) (Object) this).contains(type, newID); + if (out) { + info.setReturnValue(true); + } + } + } +} diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/models/block/active_battery_controller.json b/src/main/resources/assets/energonrelics-poeticrainbow/models/block/active_battery_controller.json new file mode 100644 index 0000000..ff2142f --- /dev/null +++ b/src/main/resources/assets/energonrelics-poeticrainbow/models/block/active_battery_controller.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "energonrelics:block/thermal_casing", + "front": "energonrelics:block/active_battery_controller", + "side": "energonrelics:block/thermal_casing" + } +} diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/models/block/passive_battery_controller.json b/src/main/resources/assets/energonrelics-poeticrainbow/models/block/passive_battery_controller.json new file mode 100644 index 0000000..25ce873 --- /dev/null +++ b/src/main/resources/assets/energonrelics-poeticrainbow/models/block/passive_battery_controller.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "energonrelics:block/thermal_casing", + "front": "energonrelics:block/passive_battery_controller", + "side": "energonrelics:block/thermal_casing" + } +} diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/models/block/reactor_controller_off.json b/src/main/resources/assets/energonrelics-poeticrainbow/models/block/reactor_controller_off.json new file mode 100644 index 0000000..6b90170 --- /dev/null +++ b/src/main/resources/assets/energonrelics-poeticrainbow/models/block/reactor_controller_off.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "energonrelics:block/thermal_casing", + "front": "energonrelics:block/reactor_controller", + "side": "energonrelics:block/thermal_casing" + } +} diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/models/block/reactor_controller_on.json b/src/main/resources/assets/energonrelics-poeticrainbow/models/block/reactor_controller_on.json new file mode 100644 index 0000000..6b90170 --- /dev/null +++ b/src/main/resources/assets/energonrelics-poeticrainbow/models/block/reactor_controller_on.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "energonrelics:block/thermal_casing", + "front": "energonrelics:block/reactor_controller", + "side": "energonrelics:block/thermal_casing" + } +} diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/active_battery_controller.png b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/active_battery_controller.png new file mode 100644 index 0000000..14906b2 Binary files /dev/null and b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/active_battery_controller.png differ diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/battery_core.png b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/battery_core.png new file mode 100644 index 0000000..62d48a9 Binary files /dev/null and b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/battery_core.png differ diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/passive_battery_controller.png b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/passive_battery_controller.png new file mode 100644 index 0000000..3f40c12 Binary files /dev/null and b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/passive_battery_controller.png differ diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_controller.png b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_controller.png new file mode 100644 index 0000000..0483f11 Binary files /dev/null and b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_controller.png differ diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_core.png b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_core.png new file mode 100644 index 0000000..02d72c8 Binary files /dev/null and b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_core.png differ diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_input.png b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_input.png new file mode 100644 index 0000000..2ee1baf Binary files /dev/null and b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/reactor_input.png differ diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/thermal_casing.png b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/thermal_casing.png new file mode 100644 index 0000000..1be0047 Binary files /dev/null and b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/thermal_casing.png differ diff --git a/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/thermal_glass.png b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/thermal_glass.png new file mode 100644 index 0000000..c6c7ff9 Binary files /dev/null and b/src/main/resources/assets/energonrelics-poeticrainbow/textures/block/thermal_glass.png differ diff --git a/src/main/resources/assets/energonrelics/blockstates/defensive_laser.json b/src/main/resources/assets/energonrelics/blockstates/defensive_laser.json index a0bf225..b2130f7 100644 --- a/src/main/resources/assets/energonrelics/blockstates/defensive_laser.json +++ b/src/main/resources/assets/energonrelics/blockstates/defensive_laser.json @@ -1,7 +1,10 @@ { "variants": { - "": { - "model": "energonrelics:block/defensive_laser" + "powered=false": { + "model": "energonrelics:block/defensive_laser_off" + }, + "powered=true": { + "model": "energonrelics:block/defensive_laser_on" } } } diff --git a/src/main/resources/assets/energonrelics/lang/en_us.json b/src/main/resources/assets/energonrelics/lang/en_us.json index 51eeef5..85e56cc 100644 --- a/src/main/resources/assets/energonrelics/lang/en_us.json +++ b/src/main/resources/assets/energonrelics/lang/en_us.json @@ -21,5 +21,7 @@ "block.energonrelics.veridium_ore": "Veridium Ore", "block.energonrelics.veridium_block": "Veridium Block", "item.energonrelics.defensive_laser_core": "Defensive laser Core", - "block.energonrelics.defensive_laser": "Defensive Laser" + "block.energonrelics.defensive_laser": "Defensive Laser", + "text.autoconfig.energonrelics.title": "EnergonRelics", + "text.autoconfig.energonrelics.option.textureSet": "Texture Set" } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/block/defensive_laser_off.json b/src/main/resources/assets/energonrelics/models/block/defensive_laser_off.json new file mode 100644 index 0000000..f5c44a3 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/defensive_laser_off.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "energonrelics:block/defensive_laser_off" + } +} diff --git a/src/main/resources/assets/energonrelics/models/block/defensive_laser.json b/src/main/resources/assets/energonrelics/models/block/defensive_laser_on.json similarity index 55% rename from src/main/resources/assets/energonrelics/models/block/defensive_laser.json rename to src/main/resources/assets/energonrelics/models/block/defensive_laser_on.json index 2fc3d31..c5b3f17 100644 --- a/src/main/resources/assets/energonrelics/models/block/defensive_laser.json +++ b/src/main/resources/assets/energonrelics/models/block/defensive_laser_on.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cube_all", "textures": { - "all": "energonrelics:block/defensive_laser" + "all": "energonrelics:block/defensive_laser_on" } } diff --git a/src/main/resources/assets/energonrelics/models/item/defensive_laser.json b/src/main/resources/assets/energonrelics/models/item/defensive_laser.json index 3fb009d..cb866b7 100644 --- a/src/main/resources/assets/energonrelics/models/item/defensive_laser.json +++ b/src/main/resources/assets/energonrelics/models/item/defensive_laser.json @@ -1,3 +1,3 @@ { - "parent": "energonrelics:block/defensive_laser" + "parent": "energonrelics:block/defensive_laser_on" } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/textures/block/defensive_laser.png b/src/main/resources/assets/energonrelics/textures/block/defensive_laser_off.png similarity index 100% rename from src/main/resources/assets/energonrelics/textures/block/defensive_laser.png rename to src/main/resources/assets/energonrelics/textures/block/defensive_laser_off.png diff --git a/src/main/resources/assets/energonrelics/textures/block/defensive_laser_on.png b/src/main/resources/assets/energonrelics/textures/block/defensive_laser_on.png new file mode 100644 index 0000000..6811fe2 Binary files /dev/null and b/src/main/resources/assets/energonrelics/textures/block/defensive_laser_on.png differ diff --git a/src/main/resources/energonrelics.mixins.json b/src/main/resources/energonrelics.mixins.json index adb49e7..4723d98 100644 --- a/src/main/resources/energonrelics.mixins.json +++ b/src/main/resources/energonrelics.mixins.json @@ -3,6 +3,7 @@ "package": "com.thebrokenrail.energonrelics.mixin", "compatibilityLevel": "JAVA_8", "client": [ + "MixinAbstractFileResourcePack" ], "mixins": [ "MixinDefaultBiomeFeatures", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b8181ea..ad80dd4 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -21,6 +21,9 @@ ], "client": [ "com.thebrokenrail.energonrelics.client.EnergonRelicsClient" + ], + "modmenu": [ + "com.thebrokenrail.energonrelics.client.ModMenu" ] }, "mixins": [