From 016e425423a4b698ef83faa5b6b237c2304868c3 Mon Sep 17 00:00:00 2001 From: Thiakil Date: Sat, 16 Mar 2019 22:30:02 +0800 Subject: [PATCH] add wind generator blacklist --- .../common/config/GeneratorsConfig.java | 2 + .../mekanism/common/config/IntSetOption.java | 104 ++++++++++++++++++ .../client/gui/GuiWindGenerator.java | 3 +- .../common/tile/TileEntityWindGenerator.java | 11 +- .../resources/assets/mekanism/lang/en_us.lang | 1 + 5 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 src/main/java/mekanism/common/config/IntSetOption.java diff --git a/src/main/java/mekanism/common/config/GeneratorsConfig.java b/src/main/java/mekanism/common/config/GeneratorsConfig.java index adca7fd00d0..87fbe6f5ebb 100644 --- a/src/main/java/mekanism/common/config/GeneratorsConfig.java +++ b/src/main/java/mekanism/common/config/GeneratorsConfig.java @@ -39,6 +39,8 @@ public class GeneratorsConfig extends BaseConfig public final IntOption windGenerationMaxY = new IntOption(this, "generation", "WindGenerationMaxY", 255); + public final IntSetOption windGenerationBlacklist = new IntSetOption(this, "generation", "WindGenerationDimBlacklist", new int[0], "List of dimension ids where Wind Generator will not function and instead report that there is no wind"); + public TypeConfigManager generatorsManager = new TypeConfigManager<>(this, "generators", BlockStateGenerator.GeneratorType.class, BlockStateGenerator.GeneratorType::getGeneratorsForConfig, t->t.blockName); @Override diff --git a/src/main/java/mekanism/common/config/IntSetOption.java b/src/main/java/mekanism/common/config/IntSetOption.java new file mode 100644 index 00000000000..525a25ea5fb --- /dev/null +++ b/src/main/java/mekanism/common/config/IntSetOption.java @@ -0,0 +1,104 @@ +package mekanism.common.config; + +import io.netty.buffer.ByteBuf; +import it.unimi.dsi.fastutil.ints.IntArraySet; +import it.unimi.dsi.fastutil.ints.IntSet; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + +/** + * Created by Thiakil on 15/03/2019. + */ +@ParametersAreNonnullByDefault +public class IntSetOption extends Option +{ + private final int[] defaultValue; + private IntSet value; + private boolean hasRange = false; + private int min; + private int max; + + IntSetOption(BaseConfig owner, String category, String key, int[] defaultValue, @Nullable String comment) + { + super(owner, category, key, comment); + this.defaultValue = defaultValue; + this.value = new IntArraySet(); + for(int i : defaultValue) + { + this.value.add(i); + } + } + + IntSetOption(BaseConfig owner, String category, String key, int[] defaultValue){ + this(owner, category, key, defaultValue, null); + } + + IntSetOption(BaseConfig owner, String category, String key){ + this(owner, category, key, new int[0], null); + } + + IntSetOption(BaseConfig owner, String category, String key, int[] defaultValue, @Nullable String comment, int min, int max) + { + this(owner, category, key, defaultValue, comment); + this.hasRange = true; + this.min = min; + this.max = max; + } + + public IntSet val() + { + return value; + } + + public void set(IntSet value) + { + this.value = value; + } + + @SuppressWarnings("Duplicates")//types are different + @Override + protected void load(Configuration config) + { + Property prop; + + if (hasRange) + { + prop = config.get(this.category, this.key, this.defaultValue, this.comment, this.min, this.max); + } else { + prop = config.get(this.category, this.key, this.defaultValue, this.comment); + } + + prop.setRequiresMcRestart(this.requiresGameRestart); + prop.setRequiresWorldRestart(this.requiresWorldRestart); + + this.value.clear(); + for(int i : prop.getIntList()) + { + this.value.add(i); + } + } + + @Override + protected void write(ByteBuf buf) + { + buf.writeInt(this.value.size()); + for(int i : value) + { + buf.writeInt(i); + } + } + + @Override + protected void read(ByteBuf buf) + { + int size = buf.readInt(); + this.value.clear(); + for(int i = 0; i < size; i++) + { + this.value.add(buf.readInt()); + } + } +} diff --git a/src/main/java/mekanism/generators/client/gui/GuiWindGenerator.java b/src/main/java/mekanism/generators/client/gui/GuiWindGenerator.java index 6161c16909b..d4159b0b875 100644 --- a/src/main/java/mekanism/generators/client/gui/GuiWindGenerator.java +++ b/src/main/java/mekanism/generators/client/gui/GuiWindGenerator.java @@ -58,7 +58,8 @@ protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) if(!tileEntity.getActive()) { size += 9; - fontRenderer.drawString(EnumColor.DARK_RED + LangUtils.localize("gui.skyBlocked"), 51, size, 0x00CD00); + final String message = LangUtils.localize(tileEntity.isInBlacklistedDimension() ? "mekanism.gui.noWind" : "gui.skyBlocked"); + fontRenderer.drawString(EnumColor.DARK_RED + message, 51, size, 0x00CD00); } super.drawGuiContainerForegroundLayer(mouseX, mouseY); diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityWindGenerator.java b/src/main/java/mekanism/generators/common/tile/TileEntityWindGenerator.java index 44f7310755a..7b89d14ac16 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityWindGenerator.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityWindGenerator.java @@ -81,7 +81,11 @@ public TileNetworkList getNetworkedData(TileNetworkList data) /** Determines the current output multiplier, taking sky visibility and height into account. **/ public float getMultiplier() { - if(world.canSeeSky(getPos().add(0, 4, 0))) + if (isInBlacklistedDimension()) + { + return 0; + } + if(world.canSeeSky(getPos().add(0, 4, 0))) { final float minY = (float) MekanismConfig.current().generators.windGenerationMinY.val(); final float maxY = (float) MekanismConfig.current().generators.windGenerationMaxY.val(); @@ -101,6 +105,11 @@ public float getMultiplier() } } + public boolean isInBlacklistedDimension() + { + return MekanismConfig.current().generators.windGenerationBlacklist.val().contains(world.provider.getDimension()); + } + @Override @SideOnly(Side.CLIENT) public float getVolume() diff --git a/src/main/resources/assets/mekanism/lang/en_us.lang b/src/main/resources/assets/mekanism/lang/en_us.lang index f74d659e28b..25dbb903d04 100644 --- a/src/main/resources/assets/mekanism/lang/en_us.lang +++ b/src/main/resources/assets/mekanism/lang/en_us.lang @@ -511,6 +511,7 @@ gui.producing=Producing gui.maxOutput=Max Output gui.storing=Storing gui.skyBlocked=Sky blocked +mekanism.gui.noWind=No wind gui.using=Using gui.needed=Needed mekanism.gui.bufferfree=Free Buffer