v1.1.0-b1 commit: E-Furnace fixed (issue #97). 1.14/1.15: Sheet Metal Slab Slices added, Config handling unified, Dense Grid Sand textures tweaked.

This commit is contained in:
stfwi 2020-05-27 20:11:53 +02:00
parent 2805e59d26
commit 7cf182652b
261 changed files with 1161 additions and 902 deletions

View file

@ -12,23 +12,20 @@ MOD_JAR=$(filter-out %-sources.jar,$(wildcard build/libs/${MOD_JAR_PREFIX}*.jar)
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)
GRADLE=gradlew.bat --no-daemon GRADLE=gradlew.bat --no-daemon
GRADLE_STOP=gradlew.bat --stop GRADLE_STOP=gradlew.bat --stop
INSTALL_DIR=$(realpath ${APPDATA}/.minecraft)
SERVER_INSTALL_DIR=$(realpath ${APPDATA}/minecraft-server-forge-1.12.2-14.23.5.2768)
DJS=djs DJS=djs
else else
GRADLE=./gradlew --no-daemon GRADLE=./gradlew --no-daemon
GRADLE_STOP=./gradlew --stop GRADLE_STOP=./gradlew --stop
INSTALL_DIR=~/.minecraft
SERVER_INSTALL_DIR=~/.minecraft-server-forge-1.12.2-14.23.5.2768
DJS=djs DJS=djs
endif endif
TASK=$(DJS) ../meta/lib/tasks.js
wildcardr=$(foreach d,$(wildcard $1*),$(call wildcardr,$d/,$2) $(filter $(subst *,%,$2),$d)) wildcardr=$(foreach d,$(wildcard $1*),$(call wildcardr,$d/,$2) $(filter $(subst *,%,$2),$d))
# #
# Targets # Targets
# #
.PHONY: default mod init clean clean-all mrproper all run install sanatize dist-check dist dist-files start-server port-languages .PHONY: default mod init clean clean-all mrproper all run install sanitize dist-check dist dist-files start-server
default: mod default: mod
@ -65,42 +62,28 @@ run:
@echo "[1.12] Running client ..." @echo "[1.12] Running client ..."
@$(GRADLE) runClient @$(GRADLE) runClient
install: $(MOD_JAR) | sanitize:
@sleep 2s
@if [ ! -d "$(INSTALL_DIR)" ]; then echo "Cannot find installation minecraft directory."; false; fi
@echo "[1.12] Installing '$(MOD_JAR)' to '$(INSTALL_DIR)/mods' ..."
@[ -d "$(INSTALL_DIR)/mods" ] || mkdir "$(INSTALL_DIR)/mods"
@rm -f "$(INSTALL_DIR)/mods/${MOD_JAR_PREFIX}"*.jar
@cp -f "$(MOD_JAR)" "$(INSTALL_DIR)/mods/"
@echo "[1.12] Installing '$(MOD_JAR)' to '$(SERVER_INSTALL_DIR)/mods' ..."
@rm -f "$(SERVER_INSTALL_DIR)/mods/${MOD_JAR_PREFIX}"*.jar
@[ -d "$(SERVER_INSTALL_DIR)/mods" ] && cp -f "$(MOD_JAR)" "$(SERVER_INSTALL_DIR)/mods/"
start-server:
-@make -s install
@echo "[1.12] Starting local dedicated server ..."
@cd "$(SERVER_INSTALL_DIR)" && java -jar forge-1.12.2-14.23.5.2768-universal.jar nogui
sanatize:
@echo "[1.12] Running sanatising tasks ..." @echo "[1.12] Running sanatising tasks ..."
@djs tasks.js sanatize @$(TASK) sanitize
@djs tasks.js sync-languages @$(TASK) sync-languages
@djs tasks.js version-check @$(TASK) version-check
@djs tasks.js update-json @$(TASK) update-json
@git status -s . @git status -s .
install: $(MOD_JAR) |
@$(TASK) install
start-server: install
@$(TASK) start-server
dist-check: dist-check:
@echo "[1.12] Running dist checks ..." @echo "[1.12] Running dist checks ..."
@djs tasks.js dist-check @$(TASK) dist-check
dist-files: clean-all init mod dist-files: clean-all init mod
@echo "[1.12] Distribution files ..." @echo "[1.12] Distribution files ..."
@mkdir -p dist @mkdir -p dist
@cp build/libs/$(MOD_JAR_PREFIX)* dist/ @cp build/libs/$(MOD_JAR_PREFIX)* dist/
@djs tasks.js dist @$(TASK) dist
dist: sanatize dist-check dist-files dist: sanitize dist-check dist-files
port-languages:
@echo "[1.12] Porting language files to 1.14 ..."
@djs tasks.js port-languages

View file

@ -1,6 +1,7 @@
{ {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": { "1.12.2": {
"1.1.0-b1": "[F] Fixed Electrical Furnace speed sanitizing bug (issue #97, thx therobotmenace).\n[M] Changed Labeled Crate Nesting to circumvent server crashing in combination with the Sponge mod.",
"1.0.20": "[R] Release based on v1.0.20-b6. Release-to-release changes: * Manual back ported. * Steel Mesh Fence Gate back ported. * E-Furnace speed selection switch back ported. * Labeled Crate back ported. * Minor bug fixes, compatibility changes.", "1.0.20": "[R] Release based on v1.0.20-b6. Release-to-release changes: * Manual back ported. * Steel Mesh Fence Gate back ported. * E-Furnace speed selection switch back ported. * Labeled Crate back ported. * Minor bug fixes, compatibility changes.",
"1.0.20-b6": "[F] Implemented compat related to issue #91.", "1.0.20-b6": "[F] Implemented compat related to issue #91.",
"1.0.20-b5": "[A] Back-ported Patchouli based Manual (you need to install Vazkii_'s Patchouli, too).\n[A] Back-ported Steel Mesh Fence Gate.\n[M] Minor back-porting compatibility refractoring.", "1.0.20-b5": "[A] Back-ported Patchouli based Manual (you need to install Vazkii_'s Patchouli, too).\n[A] Back-ported Steel Mesh Fence Gate.\n[M] Minor back-porting compatibility refractoring.",
@ -89,6 +90,6 @@
}, },
"promos": { "promos": {
"1.12.2-recommended": "1.0.20", "1.12.2-recommended": "1.0.20",
"1.12.2-latest": "1.0.20" "1.12.2-latest": "1.1.0-b1"
} }
} }

View file

@ -10,7 +10,9 @@ Mod sources for Minecraft version 1.12.2.
---- ----
## Version history ## Version history
~ v1.1.0-b1 [M] - v1.1.0-b1 [F] Fixed Electrical Furnace speed sanitizing bug (issue #97, thx therobotmenace).
[M] Changed Labeled Crate Nesting to circumvent server crashing
in combination with the Sponge mod.
------------------------------------------------------------------- -------------------------------------------------------------------
- v1.0.20 [R] Release based on v1.0.20-b6. Release-to-release changes: - v1.0.20 [R] Release based on v1.0.20-b6. Release-to-release changes:

View file

@ -212,7 +212,7 @@ public class ModContent
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
); );
public static final BlockDecorLabeledCrate.DecorLabeledCrateBlock LABELED_CRATE = new BlockDecorLabeledCrate.DecorLabeledCrateBlock( public static final BlockDecorLabeledCrate LABELED_CRATE = new BlockDecorLabeledCrate(
"labeled_crate", "labeled_crate",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT,
Material.WOOD, 0.5f, 128f, SoundType.METAL, Material.WOOD, 0.5f, 128f, SoundType.METAL,

View file

@ -9,10 +9,8 @@
package wile.engineersdecor.blocks; package wile.engineersdecor.blocks;
import net.minecraft.init.Blocks;
import wile.engineersdecor.ModContent; import wile.engineersdecor.ModContent;
import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.ModEngineersDecor;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
@ -32,6 +30,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.*; import net.minecraft.util.*;
import net.minecraft.stats.StatList; import net.minecraft.stats.StatList;
import net.minecraft.init.Blocks;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.energy.IEnergyStorage;
@ -316,7 +315,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
public static final int HEAT_INCREMENT = 20; public static final int HEAT_INCREMENT = 20;
public static final int MAX_ENERGY_TRANSFER = 256; public static final int MAX_ENERGY_TRANSFER = 256;
public static final int MAX_ENERGY_BUFFER = 32000; public static final int MAX_ENERGY_BUFFER = 32000;
public static final int MAX_SPEED_SETTING = 2; public static final int MAX_SPEED_SETTING = 3;
public static final int NUM_OF_SLOTS = 7; public static final int NUM_OF_SLOTS = 7;
public static final int SMELTING_INPUT_SLOT_NO = 0; public static final int SMELTING_INPUT_SLOT_NO = 0;
public static final int SMELTING_AUX_SLOT_NO = 1; public static final int SMELTING_AUX_SLOT_NO = 1;
@ -382,7 +381,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
proc_time_needed_ = compound.getInteger("CookTimeTotal"); proc_time_needed_ = compound.getInteger("CookTimeTotal");
energy_stored_ = compound.getInteger("Energy"); energy_stored_ = compound.getInteger("Energy");
speed_ = compound.getInteger("SpeedSetting"); speed_ = compound.getInteger("SpeedSetting");
speed_ = (speed_ < 0) ? (1) : ((speed_>3) ? 3 : speed_); speed_ = (speed_ < 0) ? (1) : ((speed_>MAX_SPEED_SETTING) ? MAX_SPEED_SETTING : speed_);
} }
protected void writenbt(NBTTagCompound compound) protected void writenbt(NBTTagCompound compound)
@ -391,7 +390,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
compound.setInteger("CookTime", MathHelper.clamp(proc_time_elapsed_, 0, MAX_BURNTIME)); compound.setInteger("CookTime", MathHelper.clamp(proc_time_elapsed_, 0, MAX_BURNTIME));
compound.setInteger("CookTimeTotal", MathHelper.clamp(proc_time_needed_, 0, MAX_BURNTIME)); compound.setInteger("CookTimeTotal", MathHelper.clamp(proc_time_needed_, 0, MAX_BURNTIME));
compound.setInteger("Energy", MathHelper.clamp(energy_stored_,0 , MAX_ENERGY_BUFFER)); compound.setInteger("Energy", MathHelper.clamp(energy_stored_,0 , MAX_ENERGY_BUFFER));
compound.setInteger("SpeedSetting", MathHelper.clamp(speed_, -1, MAX_SPEED_SETTING)); compound.setInteger("SpeedSetting", MathHelper.clamp(speed_, 0, MAX_SPEED_SETTING));
ItemStackHelper.saveAllItems(compound, stacks_); ItemStackHelper.saveAllItems(compound, stacks_);
} }
@ -655,7 +654,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
@Override @Override
public void onClientPacketReceived(EntityPlayer player, NBTTagCompound nbt) public void onClientPacketReceived(EntityPlayer player, NBTTagCompound nbt)
{ {
if(nbt.hasKey("speed")) speed_ = MathHelper.clamp(nbt.getInteger("speed"), 0, 3); if(nbt.hasKey("speed")) speed_ = MathHelper.clamp(nbt.getInteger("speed"), 0, MAX_SPEED_SETTING);
markDirty(); markDirty();
} }
@ -761,7 +760,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
} }
final ItemStack last_inp_stack = current_smelting_input_stack_; final ItemStack last_inp_stack = current_smelting_input_stack_;
current_smelting_input_stack_ = stacks_.get(SMELTING_INPUT_SLOT_NO); current_smelting_input_stack_ = stacks_.get(SMELTING_INPUT_SLOT_NO);
if((!current_smelting_input_stack_.isEmpty()) && (enabled_) && (speed_>0) && (speed_<4)) { if((!current_smelting_input_stack_.isEmpty()) && (enabled_) && (speed_>0) && (speed_<=MAX_SPEED_SETTING)) {
if(!current_smelting_input_stack_.isItemEqual(current_smelting_input_stack_)) { if(!current_smelting_input_stack_.isItemEqual(current_smelting_input_stack_)) {
proc_time_elapsed_ = 0; proc_time_elapsed_ = 0;
proc_time_needed_ = getCookTime(current_smelting_input_stack_); proc_time_needed_ = getCookTime(current_smelting_input_stack_);

View file

@ -8,6 +8,7 @@
*/ */
package wile.engineersdecor.blocks; package wile.engineersdecor.blocks;
import wile.engineersdecor.ModEngineersDecor;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
@ -40,13 +41,12 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
import wile.engineersdecor.ModEngineersDecor;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class BlockDecorLabeledCrate public class BlockDecorLabeledCrate extends BlockDecorDirectedHorizontal
{ {
public static void on_config(int stack_limit) public static void on_config(int stack_limit)
{ {
@ -56,94 +56,129 @@ public class BlockDecorLabeledCrate
// Block // Block
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
public static class DecorLabeledCrateBlock extends BlockDecorDirectedHorizontal public BlockDecorLabeledCrate(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB)
{ super(registryName, config, material, hardness, resistance, sound, unrotatedAABB); }
@Override
public boolean hasTileEntity(IBlockState state)
{ return true; }
@Override
@Nullable
public TileEntity createTileEntity(World world, IBlockState state)
{ return new LabeledCrateTileEntity(); }
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
{ {
public DecorLabeledCrateBlock(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB) if(world.isRemote) return true;
{ super(registryName, config, material, hardness, resistance, sound, unrotatedAABB); } player.openGui(ModEngineersDecor.instance, ModEngineersDecor.GuiHandler.GUIID_LABELED_CRATE, world, pos.getX(), pos.getY(), pos.getZ());
return true;
}
@Override @Override
public boolean hasTileEntity(IBlockState state) public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
{ return true; } {
if(world.isRemote) return;
if((!stack.hasTagCompound()) || (!stack.getTagCompound().hasKey("inventory"))) return;
NBTTagCompound inventory_nbt = stack.getTagCompound().getCompoundTag("inventory");
if(inventory_nbt.isEmpty()) return;
final TileEntity te = world.getTileEntity(pos);
if(!(te instanceof LabeledCrateTileEntity)) return;
((LabeledCrateTileEntity)te).readnbt(inventory_nbt);
((LabeledCrateTileEntity)te).markDirty();
}
@Override private ItemStack itemize_with_inventory(World world, BlockPos pos)
@Nullable {
public TileEntity createTileEntity(World world, IBlockState state) TileEntity te = world.getTileEntity(pos);
{ return new LabeledCrateTileEntity(); } if(!(te instanceof LabeledCrateTileEntity)) return ItemStack.EMPTY;
ItemStack stack = new ItemStack(this, 1);
NBTTagCompound inventory_nbt = new NBTTagCompound();
ItemStackHelper.saveAllItems(inventory_nbt, ((LabeledCrateTileEntity)te).stacks_, false);
if(!inventory_nbt.isEmpty()) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setTag("inventory", inventory_nbt);
stack.setTagCompound(nbt);
}
return stack;
}
@Override @Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest)
{
if(world.isRemote) return true;
final ItemStack stack = itemize_with_inventory(world, pos);
if(stack != ItemStack.EMPTY) {
world.spawnEntity(new EntityItem(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack));
world.setBlockToAir(pos);
world.removeTileEntity(pos);
return false;
} else {
return super.removedByPlayer(state, world, pos, player, willHarvest);
}
}
@Override
public void onBlockExploded(World world, BlockPos pos, Explosion explosion)
{
if(world.isRemote) return;
TileEntity te = world.getTileEntity(pos);
if(!(te instanceof LabeledCrateTileEntity)) return;
for(ItemStack stack: ((LabeledCrateTileEntity)te).stacks_) {
if(!stack.isEmpty()) world.spawnEntity(new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), stack));
}
((LabeledCrateTileEntity)te).reset();
super.onBlockExploded(world, pos, explosion);
}
@Override
@SuppressWarnings("deprecation")
public boolean hasComparatorInputOverride(IBlockState state)
{ return true; }
@Override
@SuppressWarnings("deprecation")
public int getComparatorInputOverride(IBlockState blockState, World world, BlockPos pos)
{ return Container.calcRedstone(world.getTileEntity(pos)); }
//--------------------------------------------------------------------------------------------------------------------
// GUI
//--------------------------------------------------------------------------------------------------------------------
@SideOnly(Side.CLIENT)
private static class BGui extends GuiContainer
{
private final LabeledCrateTileEntity te;
public BGui(InventoryPlayer playerInventory, World world, BlockPos pos, LabeledCrateTileEntity te)
{ {
if(world.isRemote) return true; super(new BContainer(playerInventory, world, pos, te));
player.openGui(ModEngineersDecor.instance, ModEngineersDecor.GuiHandler.GUIID_LABELED_CRATE, world, pos.getX(), pos.getY(), pos.getZ()); this.te = te;
return true; xSize = 213;
ySize = 206;
} }
@Override @Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) public void initGui()
{ { super.initGui(); }
if(world.isRemote) return;
if((!stack.hasTagCompound()) || (!stack.getTagCompound().hasKey("inventory"))) return;
NBTTagCompound inventory_nbt = stack.getTagCompound().getCompoundTag("inventory");
if(inventory_nbt.isEmpty()) return;
final TileEntity te = world.getTileEntity(pos);
if(!(te instanceof LabeledCrateTileEntity)) return;
((LabeledCrateTileEntity)te).readnbt(inventory_nbt);
((LabeledCrateTileEntity)te).markDirty();
}
private ItemStack itemize_with_inventory(World world, BlockPos pos) @Override
public void drawScreen(int mouseX, int mouseY, float partialTicks)
{ {
TileEntity te = world.getTileEntity(pos); drawDefaultBackground();
if(!(te instanceof LabeledCrateTileEntity)) return ItemStack.EMPTY; super.drawScreen(mouseX, mouseY, partialTicks);
ItemStack stack = new ItemStack(this, 1); renderHoveredToolTip(mouseX, mouseY);
NBTTagCompound inventory_nbt = new NBTTagCompound();
ItemStackHelper.saveAllItems(inventory_nbt, ((LabeledCrateTileEntity)te).stacks_, false);
if(!inventory_nbt.isEmpty()) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setTag("inventory", inventory_nbt);
stack.setTagCompound(nbt);
}
return stack;
} }
@Override @Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY)
{ {
if(world.isRemote) return true; GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
final ItemStack stack = itemize_with_inventory(world, pos); mc.getTextureManager().bindTexture(new ResourceLocation(ModEngineersDecor.MODID, "textures/gui/labeled_crate_gui.png"));
if(stack != ItemStack.EMPTY) { final int x0=guiLeft, y0=guiTop, w=xSize, h=ySize;
world.spawnEntity(new EntityItem(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack)); drawTexturedModalRect(x0, y0, 0, 0, w, h);
world.setBlockToAir(pos);
world.removeTileEntity(pos);
return false;
} else {
return super.removedByPlayer(state, world, pos, player, willHarvest);
}
} }
@Override
public void onBlockExploded(World world, BlockPos pos, Explosion explosion)
{
if(world.isRemote) return;
TileEntity te = world.getTileEntity(pos);
if(!(te instanceof LabeledCrateTileEntity)) return;
for(ItemStack stack: ((LabeledCrateTileEntity)te).stacks_) {
if(!stack.isEmpty()) world.spawnEntity(new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), stack));
}
((LabeledCrateTileEntity)te).reset();
super.onBlockExploded(world, pos, explosion);
}
@Override
@SuppressWarnings("deprecation")
public boolean hasComparatorInputOverride(IBlockState state)
{ return true; }
@Override
@SuppressWarnings("deprecation")
public int getComparatorInputOverride(IBlockState blockState, World world, BlockPos pos)
{ return Container.calcRedstone(world.getTileEntity(pos)); }
} }
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
@ -184,7 +219,7 @@ public class BlockDecorLabeledCrate
@Override @Override
public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns) public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns)
{ return (os.getBlock()!=ns.getBlock())||(!(ns.getBlock() instanceof DecorLabeledCrateBlock));} { return (os.getBlock()!=ns.getBlock())||(!(ns.getBlock() instanceof BlockDecorLabeledCrate));}
@Override @Override
public void readFromNBT(NBTTagCompound compound) public void readFromNBT(NBTTagCompound compound)
@ -445,45 +480,6 @@ public class BlockDecorLabeledCrate
} }
} }
//--------------------------------------------------------------------------------------------------------------------
// GUI
//--------------------------------------------------------------------------------------------------------------------
@SideOnly(Side.CLIENT)
private static class BGui extends GuiContainer
{
private final LabeledCrateTileEntity te;
public BGui(InventoryPlayer playerInventory, World world, BlockPos pos, LabeledCrateTileEntity te)
{
super(new BContainer(playerInventory, world, pos, te));
this.te = te;
xSize = 213;
ySize = 206;
}
@Override
public void initGui()
{ super.initGui(); }
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks)
{
drawDefaultBackground();
super.drawScreen(mouseX, mouseY, partialTicks);
renderHoveredToolTip(mouseX, mouseY);
}
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY)
{
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
mc.getTextureManager().bindTexture(new ResourceLocation(ModEngineersDecor.MODID, "textures/gui/labeled_crate_gui.png"));
final int x0=guiLeft, y0=guiTop, w=xSize, h=ySize;
drawTexturedModalRect(x0, y0, 0, 0, w, h);
}
}
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
// Container // Container
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
@ -542,7 +538,7 @@ public class BlockDecorLabeledCrate
@Override @Override
public boolean canInteractWith(EntityPlayer player) public boolean canInteractWith(EntityPlayer player)
{ return (world.getBlockState(pos).getBlock() instanceof DecorLabeledCrateBlock) && (player.getDistanceSq(pos) <= 64); } { return (world.getBlockState(pos).getBlock() instanceof BlockDecorLabeledCrate) && (player.getDistanceSq(pos) <= 64); }
@Override @Override
public boolean canMergeSlot(ItemStack stack, Slot slot) public boolean canMergeSlot(ItemStack stack, Slot slot)

View file

@ -28,7 +28,6 @@ import net.minecraft.util.math.MathHelper;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import wile.engineersdecor.blocks.BlockDecorLabeledCrate; import wile.engineersdecor.blocks.BlockDecorLabeledCrate;
import wile.engineersdecor.blocks.BlockDecorLabeledCrate.DecorLabeledCrateBlock;
import wile.engineersdecor.blocks.BlockDecorTest; import wile.engineersdecor.blocks.BlockDecorTest;
public class ModTesrs public class ModTesrs
@ -114,7 +113,7 @@ public class ModTesrs
try { try {
final ItemStack stack = te.getItemFrameStack(); final ItemStack stack = te.getItemFrameStack();
if(stack.isEmpty()) return; if(stack.isEmpty()) return;
final int di = MathHelper.clamp(te.getWorld().getBlockState(te.getPos()).getValue(DecorLabeledCrateBlock.FACING).getHorizontalIndex(), 0, 3); final int di = MathHelper.clamp(te.getWorld().getBlockState(te.getPos()).getValue(BlockDecorLabeledCrate.FACING).getHorizontalIndex(), 0, 3);
double ox = tr[di][0], oy = tr[di][1], oz = tr[di][2], ry = tr[di][3]; double ox = tr[di][0], oy = tr[di][1], oz = tr[di][2], ry = tr[di][3];
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
GlStateManager.disableLighting(); GlStateManager.disableLighting();

View file

@ -1,25 +0,0 @@
#!/usr/bin/djs
// Note for reviewers/clones: This file is a auxiliary script for my setup. It's not needed to build the mod.
"use strict";
const constants = include("../meta/lib/constants.js")();
const libtask = include("../meta/lib/libtask.js")(constants);
const liblang = include("../meta/lib/liblang.1.12.js")(constants);
const liblang13 = include("../meta/lib/liblang.1.13.js")(constants);
const liblang14 = include("../meta/lib/liblang.1.13.js")(constants);
var tasks = {};
tasks["sync-languages"] = function() {
liblang.sync_languages();
};
tasks["port-languages"] = function() {
fs.find("src/main/resources/assets/"+ constants.mod_registry_name() +"/lang", '*.lang', function(path){
const unified = liblang.load(path);
path = path.replace(/\.lang$/,"");
liblang13.save("../1.13/"+path+".json", unified);
liblang14.save("../1.14/"+path+".json", unified);
return false;
});
};
libtask.run(tasks, sys.args);

View file

@ -18,13 +18,14 @@ GRADLE=./gradlew --no-daemon
GRADLE_STOP=./gradlew --stop GRADLE_STOP=./gradlew --stop
DJS=djs DJS=djs
endif endif
TASK=$(DJS) ../meta/lib/tasks.js
wildcardr=$(foreach d,$(wildcard $1*),$(call wildcardr,$d/,$2) $(filter $(subst *,%,$2),$d)) wildcardr=$(foreach d,$(wildcard $1*),$(call wildcardr,$d/,$2) $(filter $(subst *,%,$2),$d))
# #
# Targets # Targets
# #
.PHONY: default mod data init clean clean-all mrproper all run install sanatize dist-check dist start-server assets .PHONY: default mod data init clean clean-all mrproper all run install sanitize dist-check dist start-server assets
default: mod default: mod
@ -34,9 +35,13 @@ mod:
@echo "[1.14] Building mod using gradle ..." @echo "[1.14] Building mod using gradle ..."
@$(GRADLE) build $(GRADLE_OPTS) @$(GRADLE) build $(GRADLE_OPTS)
assets:
@echo "[1.14] Running asset generators ..."
@$(TASK) assets
data: data:
@echo "[1.14] Running data generators ..." @echo "[1.14] Running data generators ..."
@djs tasks.js datagen @$(TASK) datagen
clean: clean:
@echo "[1.14] Cleaning ..." @echo "[1.14] Cleaning ..."
@ -64,28 +69,28 @@ init:
@echo "[1.14] Initialising eclipse workspace using gradle ..." @echo "[1.14] Initialising eclipse workspace using gradle ..."
@$(GRADLE) eclipse @$(GRADLE) eclipse
sanatize: sanitize:
@echo "[1.14] Running sanatising tasks ..." @echo "[1.14] Running sanatising tasks ..."
@djs tasks.js sanatize @$(TASK) sanitize
@djs tasks.js sync-languages @$(TASK) sync-languages
@djs tasks.js version-check @$(TASK) version-check
@djs tasks.js update-json @$(TASK) update-json
@git status -s . @git status -s .
install: $(MOD_JAR) |
@$(TASK) install
start-server: install
@$(TASK) start-server
dist-check: dist-check:
@echo "[1.14] Running dist checks ..." @echo "[1.14] Running dist checks ..."
@djs tasks.js dist-check @$(TASK) dist-check
dist-files: clean-all init data mod dist-files: clean-all init data mod
@echo "[1.14] Distribution files ..." @echo "[1.14] Distribution files ..."
@mkdir -p dist @mkdir -p dist
@cp build/libs/$(MOD_JAR_PREFIX)* dist/ @cp build/libs/$(MOD_JAR_PREFIX)* dist/
@djs tasks.js dist @$(TASK) dist
dist: sanatize dist-check dist-files dist: sanitize dist-check dist-files
assets:
@echo "[1.14] Running asset generators ..."
@djs tasks.js create-slab-assets
@djs tasks.js create-half-slab-assets
@djs tasks.js assets

View file

@ -1,6 +1,7 @@
{ {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.14.4": { "1.14.4": {
"1.1.0-b1": "[F] Fixed Electrical Furnace speed sanitizing bug (issue #97, thx therobotmenace).\n[A] Sheet Metal Slab Slices added (only available if IE is installed).\n[M] Config options extended/updated.\n[M] Dense Grit Sand textures altered to get slightly more visible structure from distance.",
"1.0.20-b7": "[A] Dense Grit Sand added.\n[!] Variant Slab compatibility fix. *This may alter placed slabs of this mod, data fixers don't work yet unfortunately*.", "1.0.20-b7": "[A] Dense Grit Sand added.\n[!] Variant Slab compatibility fix. *This may alter placed slabs of this mod, data fixers don't work yet unfortunately*.",
"1.0.20-b6": "[M] Slab Slice placement improved.\n[M] Quite some naming/refractoring under the hood.", "1.0.20-b6": "[M] Slab Slice placement improved.\n[M] Quite some naming/refractoring under the hood.",
"1.0.20-b5": "[A] Electrical Furnace can draw in smelting input items from an adjacent inventory when a Hopper is placed in the auxiliary slot.\n[M] Wrapped Labeled Crate label slot to prevent sorting mods from altering the label.", "1.0.20-b5": "[A] Electrical Furnace can draw in smelting input items from an adjacent inventory when a Hopper is placed in the auxiliary slot.\n[M] Wrapped Labeled Crate label slot to prevent sorting mods from altering the label.",
@ -56,6 +57,6 @@
}, },
"promos": { "promos": {
"1.14.4-recommended": "", "1.14.4-recommended": "",
"1.14.4-latest": "1.0.20-b7" "1.14.4-latest": "1.1.0-b1"
} }
} }

View file

@ -11,7 +11,11 @@ Mod sources for Minecraft version 1.14.4.
## Version history ## Version history
~ v1.1.0-b1 [M] - v1.1.0-b1 [F] Fixed Electrical Furnace speed sanitizing bug (issue #97, thx therobotmenace).
[A] Sheet Metal Slab Slices added (only available if IE is installed).
[M] Config options extended/updated.
[M] Dense Grit Sand textures altered to get slightly more visible structure
from distance.
- v1.0.20-b7 [A] Dense Grit Sand added. - v1.0.20-b7 [A] Dense Grit Sand added.
[!] Variant Slab compatibility fix. *This may alter placed slabs of this mod, [!] Variant Slab compatibility fix. *This may alter placed slabs of this mod,

View file

@ -12,20 +12,22 @@ package wile.engineersdecor;
import wile.engineersdecor.blocks.*; import wile.engineersdecor.blocks.*;
import wile.engineersdecor.libmc.blocks.StandardBlocks; import wile.engineersdecor.libmc.blocks.StandardBlocks;
import wile.engineersdecor.libmc.detail.Auxiliaries; import wile.engineersdecor.libmc.detail.Auxiliaries;
import wile.engineersdecor.libmc.detail.OptionalRecipeCondition;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.common.ForgeConfigSpec;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.Logger;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
public class ModConfig public class ModConfig
{ {
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
private static final Logger LOGGER = ModEngineersDecor.logger();
private static final String MODID = ModEngineersDecor.MODID;
public static final CommonConfig COMMON; public static final CommonConfig COMMON;
public static final ServerConfig SERVER; public static final ServerConfig SERVER;
public static final ClientConfig CLIENT; public static final ClientConfig CLIENT;
@ -61,11 +63,11 @@ public class ModConfig
builder.comment("Opt-out settings") builder.comment("Opt-out settings")
.push("optout"); .push("optout");
without_tooltips = builder without_tooltips = builder
.translation(ModEngineersDecor.MODID + ".config.without_tooltips") .translation(MODID + ".config.without_tooltips")
.comment("Disable CTRL-SHIFT item tooltip display.") .comment("Disable CTRL-SHIFT item tooltip display.")
.define("without_tooltips", false); .define("without_tooltips", false);
without_ters = builder without_ters = builder
.translation(ModEngineersDecor.MODID + ".config.without_ters") .translation(MODID + ".config.without_ters")
.comment("Disable all TERs (tile entity renderers).") .comment("Disable all TERs (tile entity renderers).")
.define("without_ters", false); .define("without_ters", false);
} }
@ -95,12 +97,14 @@ public class ModConfig
public final ForgeConfigSpec.BooleanValue without_clinker_bricks; public final ForgeConfigSpec.BooleanValue without_clinker_bricks;
public final ForgeConfigSpec.BooleanValue without_slag_bricks; public final ForgeConfigSpec.BooleanValue without_slag_bricks;
public final ForgeConfigSpec.BooleanValue without_rebar_concrete; public final ForgeConfigSpec.BooleanValue without_rebar_concrete;
public final ForgeConfigSpec.BooleanValue without_gas_concrete;
public final ForgeConfigSpec.BooleanValue without_walls; public final ForgeConfigSpec.BooleanValue without_walls;
public final ForgeConfigSpec.BooleanValue without_stairs; public final ForgeConfigSpec.BooleanValue without_stairs;
public final ForgeConfigSpec.BooleanValue without_ie_concrete_wall; public final ForgeConfigSpec.BooleanValue without_ie_concrete_wall;
public final ForgeConfigSpec.BooleanValue without_panzer_glass; public final ForgeConfigSpec.BooleanValue without_panzer_glass;
public final ForgeConfigSpec.BooleanValue without_ladders; public final ForgeConfigSpec.BooleanValue without_ladders;
public final ForgeConfigSpec.BooleanValue without_treated_wood_furniture; public final ForgeConfigSpec.BooleanValue without_treated_wood_furniture;
public final ForgeConfigSpec.BooleanValue without_metal_furniture;
public final ForgeConfigSpec.BooleanValue without_windows; public final ForgeConfigSpec.BooleanValue without_windows;
public final ForgeConfigSpec.BooleanValue without_light_sources; public final ForgeConfigSpec.BooleanValue without_light_sources;
public final ForgeConfigSpec.BooleanValue without_slabs; public final ForgeConfigSpec.BooleanValue without_slabs;
@ -124,6 +128,8 @@ public class ModConfig
public final ForgeConfigSpec.BooleanValue without_mineral_smelter; public final ForgeConfigSpec.BooleanValue without_mineral_smelter;
public final ForgeConfigSpec.BooleanValue without_milking_machine; public final ForgeConfigSpec.BooleanValue without_milking_machine;
public final ForgeConfigSpec.BooleanValue without_tree_cutter; public final ForgeConfigSpec.BooleanValue without_tree_cutter;
public final ForgeConfigSpec.BooleanValue without_labeled_crate;
public final ForgeConfigSpec.BooleanValue without_fences;
public final ForgeConfigSpec.BooleanValue without_chair_sitting; public final ForgeConfigSpec.BooleanValue without_chair_sitting;
public final ForgeConfigSpec.BooleanValue without_mob_chair_sitting; public final ForgeConfigSpec.BooleanValue without_mob_chair_sitting;
public final ForgeConfigSpec.BooleanValue without_ladder_speed_boost; public final ForgeConfigSpec.BooleanValue without_ladder_speed_boost;
@ -166,7 +172,7 @@ public class ModConfig
builder.comment("Opt-out settings") builder.comment("Opt-out settings")
.push("optout"); .push("optout");
pattern_excludes = builder pattern_excludes = builder
.translation(ModEngineersDecor.MODID + ".config.pattern_excludes") .translation(MODID + ".config.pattern_excludes")
.comment("Opt-out any block by its registry name ('*' wildcard matching, " .comment("Opt-out any block by its registry name ('*' wildcard matching, "
+ "comma separated list, whitespaces ignored. You must match the whole name, " + "comma separated list, whitespaces ignored. You must match the whole name, "
+ "means maybe add '*' also at the begin and end. Example: '*wood*,*steel*' " + "means maybe add '*' also at the begin and end. Example: '*wood*,*steel*' "
@ -174,7 +180,7 @@ public class ModConfig
+ "The matching result is also traced in the log file. ") + "The matching result is also traced in the log file. ")
.define("pattern_excludes", ""); .define("pattern_excludes", "");
pattern_includes = builder pattern_includes = builder
.translation(ModEngineersDecor.MODID + ".config.pattern_includes") .translation(MODID + ".config.pattern_includes")
.comment("Prevent blocks from being opt'ed by registry name ('*' wildcard matching, " .comment("Prevent blocks from being opt'ed by registry name ('*' wildcard matching, "
+ "comma separated list, whitespaces ignored. Evaluated before all other opt-out checks. " + "comma separated list, whitespaces ignored. Evaluated before all other opt-out checks. "
+ "You must match the whole name, means maybe add '*' also at the begin and end. Example: " + "You must match the whole name, means maybe add '*' also at the begin and end. Example: "
@ -182,153 +188,169 @@ public class ModConfig
+ "The matching result is also traced in the log file.") + "The matching result is also traced in the log file.")
.define("pattern_includes", ""); .define("pattern_includes", "");
without_clinker_bricks = builder without_clinker_bricks = builder
.translation(ModEngineersDecor.MODID + ".config.without_clinker_bricks") .translation(MODID + ".config.without_clinker_bricks")
.comment("Disable clinker bricks and derived blocks.") .comment("Disable clinker bricks and derived blocks.")
.define("without_clinker_bricks", false); .define("without_clinker_bricks", false);
without_slag_bricks = builder without_slag_bricks = builder
.translation(ModEngineersDecor.MODID + ".config.without_slag_bricks") .translation(MODID + ".config.without_slag_bricks")
.comment("Disable slag bricks and derived blocks.") .comment("Disable slag bricks and derived blocks.")
.define("without_slag_bricks", false); .define("without_slag_bricks", false);
without_rebar_concrete = builder without_rebar_concrete = builder
.translation(ModEngineersDecor.MODID + ".config.without_rebar_concrete") .translation(MODID + ".config.without_rebar_concrete")
.comment("Disable rebar concrete and derived blocks.") .comment("Disable rebar concrete and derived blocks.")
.define("without_rebar_concrete", false); .define("without_rebar_concrete", false);
without_gas_concrete = builder
.translation(MODID + ".config.without_gas_concrete")
.comment("Disable gas concrete and derived blocks.")
.define("without_gas_concrete", false);
without_walls = builder without_walls = builder
.translation(ModEngineersDecor.MODID + ".config.without_walls") .translation(MODID + ".config.without_walls")
.comment("Disable all mod wall blocks.") .comment("Disable all mod wall blocks.")
.define("without_walls", false); .define("without_walls", false);
without_stairs = builder without_stairs = builder
.translation(ModEngineersDecor.MODID + ".config.without_stairs") .translation(MODID + ".config.without_stairs")
.comment("Disable all mod stairs blocks.") .comment("Disable all mod stairs blocks.")
.define("without_stairs", false); .define("without_stairs", false);
without_ie_concrete_wall = builder without_ie_concrete_wall = builder
.translation(ModEngineersDecor.MODID + ".config.without_ie_concrete_wall") .translation(MODID + ".config.without_ie_concrete_wall")
.comment("Disable IE concrete wall.") .comment("Disable IE concrete wall.")
.define("without_ie_concrete_wall", false); .define("without_ie_concrete_wall", false);
without_panzer_glass = builder without_panzer_glass = builder
.translation(ModEngineersDecor.MODID + ".config.without_panzer_glass") .translation(MODID + ".config.without_panzer_glass")
.comment("Disable panzer glass and derived blocks.") .comment("Disable panzer glass and derived blocks.")
.define("without_panzer_glass", false); .define("without_panzer_glass", false);
without_crafting_table = builder without_crafting_table = builder
.translation(ModEngineersDecor.MODID + ".config.without_crafting_table") .translation(MODID + ".config.without_crafting_table")
.comment("Disable treated wood crafting table.") .comment("Disable treated wood crafting table.")
.define("without_crafting_table", false); .define("without_crafting_table", false);
without_lab_furnace = builder without_lab_furnace = builder
.translation(ModEngineersDecor.MODID + ".config.without_lab_furnace") .translation(MODID + ".config.without_lab_furnace")
.comment("Disable small lab furnace.") .comment("Disable small lab furnace.")
.define("without_lab_furnace", false); .define("without_lab_furnace", false);
without_electrical_furnace = builder without_electrical_furnace = builder
.translation(ModEngineersDecor.MODID + ".config.without_electrical_furnace") .translation(MODID + ".config.without_electrical_furnace")
.comment("Disable small electrical pass-through furnace.") .comment("Disable small electrical pass-through furnace.")
.define("without_electrical_furnace", false); .define("without_electrical_furnace", false);
without_treated_wood_furniture = builder without_treated_wood_furniture = builder
.translation(ModEngineersDecor.MODID + ".config.without_treated_wood_furniture") .translation(MODID + ".config.without_treated_wood_furniture")
.comment("Disable treated wood table, stool, windowsill, etc.") .comment("Disable treated wood table, stool, windowsill, etc.")
.define("without_treated_wood_furniture", false); .define("without_treated_wood_furniture", false);
without_metal_furniture = builder
.translation(MODID + ".config.without_metal_furniture")
.comment("Disable metal tables, etc.")
.define("without_metal_furniture", false);
without_windows = builder without_windows = builder
.translation(ModEngineersDecor.MODID + ".config.without_windows") .translation(MODID + ".config.without_windows")
.comment("Disable treated wood window, etc.") .comment("Disable treated wood window, etc.")
.define("without_windows", false); .define("without_windows", false);
without_light_sources = builder without_light_sources = builder
.translation(ModEngineersDecor.MODID + ".config.without_light_sources") .translation(MODID + ".config.without_light_sources")
.comment("Disable light sources") .comment("Disable light sources")
.define("without_light_sources", false); .define("without_light_sources", false);
without_ladders = builder without_ladders = builder
.translation(ModEngineersDecor.MODID + ".config.without_ladders") .translation(MODID + ".config.without_ladders")
.comment("Disable ladders") .comment("Disable ladders")
.define("without_ladders", false); .define("without_ladders", false);
without_chair_sitting = builder without_chair_sitting = builder
.translation(ModEngineersDecor.MODID + ".config.without_chair_sitting") .translation(MODID + ".config.without_chair_sitting")
.comment("Disable possibility to sit on stools and chairs.") .comment("Disable possibility to sit on stools and chairs.")
.define("without_chair_sitting", false); .define("without_chair_sitting", false);
without_mob_chair_sitting = builder without_mob_chair_sitting = builder
.translation(ModEngineersDecor.MODID + ".config.without_mob_chair_sitting") .translation(MODID + ".config.without_mob_chair_sitting")
.comment("Disable that mobs will sit on chairs and stools.") .comment("Disable that mobs will sit on chairs and stools.")
.define("without_mob_chair_sitting", false); .define("without_mob_chair_sitting", false);
without_ladder_speed_boost = builder without_ladder_speed_boost = builder
.translation(ModEngineersDecor.MODID + ".config.without_ladder_speed_boost") .translation(MODID + ".config.without_ladder_speed_boost")
.comment("Disable the speed boost of ladders in this mod.") .comment("Disable the speed boost of ladders in this mod.")
.define("without_ladder_speed_boost", false); .define("without_ladder_speed_boost", false);
without_crafting_table_history = builder without_crafting_table_history = builder
.translation(ModEngineersDecor.MODID + ".config.without_crafting_table_history") .translation(MODID + ".config.without_crafting_table_history")
.comment("Disable history refabrication feature of the treated wood crafting table.") .comment("Disable history refabrication feature of the treated wood crafting table.")
.define("without_crafting_table_history", false); .define("without_crafting_table_history", false);
without_valves = builder without_valves = builder
.translation(ModEngineersDecor.MODID + ".config.without_valves") .translation(MODID + ".config.without_valves")
.comment("Disable check valve, and redstone controlled valves.") .comment("Disable check valve, and redstone controlled valves.")
.define("without_valves", false); .define("without_valves", false);
without_passive_fluid_accumulator = builder without_passive_fluid_accumulator = builder
.translation(ModEngineersDecor.MODID + ".config.without_passive_fluid_accumulator") .translation(MODID + ".config.without_passive_fluid_accumulator")
.comment("Disable the passive fluid accumulator.") .comment("Disable the passive fluid accumulator.")
.define("without_passive_fluid_accumulator", false); .define("without_passive_fluid_accumulator", false);
without_waste_incinerator = builder without_waste_incinerator = builder
.translation(ModEngineersDecor.MODID + ".config.without_waste_incinerator") .translation(MODID + ".config.without_waste_incinerator")
.comment("Disable item disposal/trash/void incinerator device.") .comment("Disable item disposal/trash/void incinerator device.")
.define("without_waste_incinerator", false); .define("without_waste_incinerator", false);
without_sign_plates = builder without_sign_plates = builder
.translation(ModEngineersDecor.MODID + ".config.without_sign_plates") .translation(MODID + ".config.without_sign_plates")
.comment("Disable decorative sign plates (caution, hazards, etc).") .comment("Disable decorative sign plates (caution, hazards, etc).")
.define("without_sign_plates", false); .define("without_sign_plates", false);
without_floor_grating = builder without_floor_grating = builder
.translation(ModEngineersDecor.MODID + ".config.without_floor_grating") .translation(MODID + ".config.without_floor_grating")
.comment("Disable floor gratings.") .comment("Disable floor gratings.")
.define("without_floor_grating", false); .define("without_floor_grating", false);
without_factory_dropper = builder without_factory_dropper = builder
.translation(ModEngineersDecor.MODID + ".config.without_factory_dropper") .translation(MODID + ".config.without_factory_dropper")
.comment("Disable the factory dropper.") .comment("Disable the factory dropper.")
.define("without_factory_dropper", false); .define("without_factory_dropper", false);
without_factory_hopper = builder without_factory_hopper = builder
.translation(ModEngineersDecor.MODID + ".config.without_factory_hopper") .translation(MODID + ".config.without_factory_hopper")
.comment("Disable the factory hopper.") .comment("Disable the factory hopper.")
.define("without_factory_hopper", false); .define("without_factory_hopper", false);
without_factory_placer = builder without_factory_placer = builder
.translation(ModEngineersDecor.MODID + ".config.without_factory_placer") .translation(MODID + ".config.without_factory_placer")
.comment("Disable the factory placer.") .comment("Disable the factory placer.")
.define("without_factory_placer", false); .define("without_factory_placer", false);
without_block_breaker = builder without_block_breaker = builder
.translation(ModEngineersDecor.MODID + ".config.without_block_breaker") .translation(MODID + ".config.without_block_breaker")
.comment("Disable the small block breaker.") .comment("Disable the small block breaker.")
.define("without_block_breaker", false); .define("without_block_breaker", false);
without_solar_panel = builder without_solar_panel = builder
.translation(ModEngineersDecor.MODID + ".config.without_solar_panel") .translation(MODID + ".config.without_solar_panel")
.comment("Disable the small solar panel.") .comment("Disable the small solar panel.")
.define("without_solar_panel", false); .define("without_solar_panel", false);
without_fluid_funnel = builder without_fluid_funnel = builder
.translation(ModEngineersDecor.MODID + ".config.without_fluid_funnel") .translation(MODID + ".config.without_fluid_funnel")
.comment("Disable the small fluid collection funnel.") .comment("Disable the small fluid collection funnel.")
.define("without_fluid_funnel", false); .define("without_fluid_funnel", false);
without_mineral_smelter = builder without_mineral_smelter = builder
.translation(ModEngineersDecor.MODID + ".config.without_mineral_smelter") .translation(MODID + ".config.without_mineral_smelter")
.comment("Disable the small mineral smelter.") .comment("Disable the small mineral smelter.")
.define("without_mineral_smelter", false); .define("without_mineral_smelter", false);
without_milking_machine = builder without_milking_machine = builder
.translation(ModEngineersDecor.MODID + ".config.without_milking_machine") .translation(MODID + ".config.without_milking_machine")
.comment("Disable the small milking machine.") .comment("Disable the small milking machine.")
.define("without_milking_machine", false); .define("without_milking_machine", false);
without_tree_cutter = builder without_tree_cutter = builder
.translation(ModEngineersDecor.MODID + ".config.without_tree_cutter") .translation(MODID + ".config.without_tree_cutter")
.comment("Disable the small tree cutter.") .comment("Disable the small tree cutter.")
.define("without_tree_cutter", false); .define("without_tree_cutter", false);
without_labeled_crate = builder
.translation(MODID + ".config.without_labeled_crate")
.comment("Disable labeled crate.")
.define("without_labeled_crate", false);
without_slabs = builder without_slabs = builder
.translation(ModEngineersDecor.MODID + ".config.without_slabs") .translation(MODID + ".config.without_slabs")
.comment("Disable horizontal half-block slab.") .comment("Disable horizontal half-block slab.")
.define("without_slabs", false); .define("without_slabs", false);
without_halfslabs = builder without_halfslabs = builder
.translation(ModEngineersDecor.MODID + ".config.without_halfslabs") .translation(MODID + ".config.without_halfslabs")
.comment("Disable stackable 1/8 block slices.") .comment("Disable stackable 1/8 block slices.")
.define("without_halfslabs", false); .define("without_halfslabs", false);
without_poles = builder without_poles = builder
.translation(ModEngineersDecor.MODID + ".config.without_poles") .translation(MODID + ".config.without_poles")
.comment("Disable poles of any material.") .comment("Disable poles of any material.")
.define("without_poles", false); .define("without_poles", false);
without_hsupports = builder without_hsupports = builder
.translation(ModEngineersDecor.MODID + ".config.without_hsupports") .translation(MODID + ".config.without_hsupports")
.comment("Disable horizontal supports like the double-T support.") .comment("Disable horizontal supports like the double-T support.")
.define("without_hsupports", false); .define("without_hsupports", false);
without_recipes = builder without_recipes = builder
.translation(ModEngineersDecor.MODID + ".config.without_recipes") .translation(MODID + ".config.without_recipes")
.comment("Disable all internal recipes, allowing to use alternative pack recipes.") .comment("Disable all internal recipes, allowing to use alternative pack recipes.")
.define("without_recipes", false); .define("without_recipes", false);
without_fences = builder
.translation(MODID + ".config.without_fences")
.comment("Disable all fences and fence gates.")
.define("without_fences", false);
builder.pop(); builder.pop();
} }
// --- MISC --------------------------------------------------------------- // --- MISC ---------------------------------------------------------------
@ -336,16 +358,16 @@ public class ModConfig
builder.comment("Miscellaneous settings") builder.comment("Miscellaneous settings")
.push("miscellaneous"); .push("miscellaneous");
with_experimental = builder with_experimental = builder
.translation(ModEngineersDecor.MODID + ".config.with_experimental") .translation(MODID + ".config.with_experimental")
.comment("Enables experimental features. Use at own risk.") .comment("Enables experimental features. Use at own risk.")
.define("with_experimental", false); .define("with_experimental", false);
without_direct_slab_pickup = builder without_direct_slab_pickup = builder
.translation(ModEngineersDecor.MODID + ".config.without_direct_slab_pickup") .translation(MODID + ".config.without_direct_slab_pickup")
.comment("Disable directly picking up layers from slabs and slab " + .comment("Disable directly picking up layers from slabs and slab " +
" slices by left clicking while looking up/down.") " slices by left clicking while looking up/down.")
.define("without_direct_slab_pickup", false); .define("without_direct_slab_pickup", false);
with_creative_mode_device_drops = builder with_creative_mode_device_drops = builder
.translation(ModEngineersDecor.MODID + ".config.with_creative_mode_device_drops") .translation(MODID + ".config.with_creative_mode_device_drops")
.comment("Enable that devices are dropped as item also in creative mode, allowing " + .comment("Enable that devices are dropped as item also in creative mode, allowing " +
" to relocate them with contents and settings.") " to relocate them with contents and settings.")
.define("with_creative_mode_device_drops", false); .define("with_creative_mode_device_drops", false);
@ -356,130 +378,130 @@ public class ModConfig
builder.comment("Tweaks") builder.comment("Tweaks")
.push("tweaks"); .push("tweaks");
furnace_smelting_speed_percent = builder furnace_smelting_speed_percent = builder
.translation(ModEngineersDecor.MODID + ".config.furnace_smelting_speed_percent") .translation(MODID + ".config.furnace_smelting_speed_percent")
.comment("Defines, in percent, how fast the lab furnace smelts compared to " + .comment("Defines, in percent, how fast the lab furnace smelts compared to " +
"a vanilla furnace. 100% means vanilla furnace speed, 150% means the " + "a vanilla furnace. 100% means vanilla furnace speed, 150% means the " +
"lab furnace is faster. The value can be changed on-the-fly for tuning.") "lab furnace is faster. The value can be changed on-the-fly for tuning.")
.defineInRange("furnace_smelting_speed_percent", 130, 50, 800); .defineInRange("furnace_smelting_speed_percent", 130, 50, 800);
furnace_fuel_efficiency_percent = builder furnace_fuel_efficiency_percent = builder
.translation(ModEngineersDecor.MODID + ".config.furnace_fuel_efficiency_percent") .translation(MODID + ".config.furnace_fuel_efficiency_percent")
.comment("Defines, in percent, how fuel efficient the lab furnace is, compared " + .comment("Defines, in percent, how fuel efficient the lab furnace is, compared " +
"to a vanilla furnace. 100% means vanilla furnace consumiton, 200% means " + "to a vanilla furnace. 100% means vanilla furnace consumiton, 200% means " +
"the lab furnace needs about half the fuel of a vanilla furnace, " + "the lab furnace needs about half the fuel of a vanilla furnace, " +
"The value can be changed on-the-fly for tuning.") "The value can be changed on-the-fly for tuning.")
.defineInRange("furnace_fuel_efficiency_percent", 100, 50, 400); .defineInRange("furnace_fuel_efficiency_percent", 100, 50, 400);
furnace_boost_energy_consumption = builder furnace_boost_energy_consumption = builder
.translation(ModEngineersDecor.MODID + ".config.furnace_boost_energy_consumption") .translation(MODID + ".config.furnace_boost_energy_consumption")
.comment("Defines the energy consumption (per tick) for speeding up the smelting process. " + .comment("Defines the energy consumption (per tick) for speeding up the smelting process. " +
"If IE is installed, an external heater has to be inserted into an auxiliary slot " + "If IE is installed, an external heater has to be inserted into an auxiliary slot " +
"of the lab furnace. The power source needs to be able to provide at least 4 times " + "of the lab furnace. The power source needs to be able to provide at least 4 times " +
"this consumption (fixed threshold value). The value can be changed on-the-fly for tuning. " + "this consumption (fixed threshold value). The value can be changed on-the-fly for tuning. " +
"The default value corresponds to the IE heater consumption.") "The default value corresponds to the IE heater consumption.")
.defineInRange("furnace_boost_energy_consumption", 24, 8, 1024); .defineInRange("furnace_boost_energy_consumption", 24, 2, 1024);
chair_mob_sitting_probability_percent = builder chair_mob_sitting_probability_percent = builder
.translation(ModEngineersDecor.MODID + ".config.chair_mob_sitting_probability_percent") .translation(MODID + ".config.chair_mob_sitting_probability_percent")
.comment("Defines, in percent, how high the probability is that a mob sits on a chair " + .comment("Defines, in percent, how high the probability is that a mob sits on a chair " +
"when colliding with it. Can be changed on-the-fly for tuning.") "when colliding with it. Can be changed on-the-fly for tuning.")
.defineInRange("chair_mob_sitting_probability_percent", 10.0, 0.0, 80.0); .defineInRange("chair_mob_sitting_probability_percent", 10.0, 0.0, 80.0);
chair_mob_standup_probability_percent = builder chair_mob_standup_probability_percent = builder
.translation(ModEngineersDecor.MODID + ".config.chair_mob_standup_probability_percent") .translation(MODID + ".config.chair_mob_standup_probability_percent")
.comment("Defines, in percent, probable it is that a mob leaves a chair when sitting " + .comment("Defines, in percent, probable it is that a mob leaves a chair when sitting " +
"on it. The 'dice is rolled' about every 20 ticks. There is also a minimum " + "on it. The 'dice is rolled' about every 20 ticks. There is also a minimum " +
"Sitting time of about 3s. The config value can be changed on-the-fly for tuning.") "Sitting time of about 3s. The config value can be changed on-the-fly for tuning.")
.defineInRange("chair_mob_standup_probability_percent", 1.0, 1e-3, 10.0); .defineInRange("chair_mob_standup_probability_percent", 1.0, 1e-3, 10.0);
with_crafting_quickmove_buttons = builder with_crafting_quickmove_buttons = builder
.translation(ModEngineersDecor.MODID + ".config.with_crafting_quickmove_buttons") .translation(MODID + ".config.with_crafting_quickmove_buttons")
.comment("Enables small quick-move arrows from/to player/block storage. " + .comment("Enables small quick-move arrows from/to player/block storage. " +
"Makes the UI a bit too busy, therefore disabled by default.") "Makes the UI a bit too busy, therefore disabled by default.")
.define("with_crafting_quickmove_buttons", false); .define("with_crafting_quickmove_buttons", false);
without_crafting_mouse_scrolling = builder without_crafting_mouse_scrolling = builder
.translation(ModEngineersDecor.MODID + ".config.without_crafting_mouse_scrolling") .translation(MODID + ".config.without_crafting_mouse_scrolling")
.comment("Disables increasing/decreasing the crafting grid items by scrolling over the crafting result slot.") .comment("Disables increasing/decreasing the crafting grid items by scrolling over the crafting result slot.")
.define("without_crafting_mouse_scrolling", false); .define("without_crafting_mouse_scrolling", false);
pipevalve_max_flowrate = builder pipevalve_max_flowrate = builder
.translation(ModEngineersDecor.MODID + ".config.pipevalve_max_flowrate") .translation(MODID + ".config.pipevalve_max_flowrate")
.comment("Defines how many millibuckets can be transferred (per tick) through the valves. " + .comment("Defines how many millibuckets can be transferred (per tick) through the valves. " +
"That is technically the 'storage size' specified for blocks that want to fill " + "That is technically the 'storage size' specified for blocks that want to fill " +
"fluids into the valve (the valve has no container and forward that to the output " + "fluids into the valve (the valve has no container and forward that to the output " +
"block), The value can be changed on-the-fly for tuning. ") "block), The value can be changed on-the-fly for tuning. ")
.defineInRange("pipevalve_max_flowrate", 1000, 1, 32000); .defineInRange("pipevalve_max_flowrate", 1000, 1, 32000);
pipevalve_redstone_gain = builder pipevalve_redstone_gain = builder
.translation(ModEngineersDecor.MODID + ".config.pipevalve_redstone_gain") .translation(MODID + ".config.pipevalve_redstone_gain")
.comment("Defines how many millibuckets per redstone signal strength can be transferred per tick " + .comment("Defines how many millibuckets per redstone signal strength can be transferred per tick " +
"through the analog redstone controlled valves. Note: power 0 is always off, power 15 is always " + "through the analog redstone controlled valves. Note: power 0 is always off, power 15 is always " +
"the max flow rate. Between power 1 and 14 this scaler will result in a flow = 'redstone slope' * 'current redstone power'. " + "the max flow rate. Between power 1 and 14 this scaler will result in a flow = 'redstone slope' * 'current redstone power'. " +
"The value can be changed on-the-fly for tuning. ") "The value can be changed on-the-fly for tuning. ")
.defineInRange("pipevalve_redstone_gain", 20, 1, 32000); .defineInRange("pipevalve_redstone_gain", 20, 1, 32000);
e_furnace_speed_percent = builder e_furnace_speed_percent = builder
.translation(ModEngineersDecor.MODID + ".config.e_furnace_speed_percent") .translation(MODID + ".config.e_furnace_speed_percent")
.comment("Defines, in percent, how fast the electrical furnace smelts compared to " + .comment("Defines, in percent, how fast the electrical furnace smelts compared to " +
"a vanilla furnace. 100% means vanilla furnace speed, 150% means the " + "a vanilla furnace. 100% means vanilla furnace speed, 150% means the " +
"electrical furnace is faster. The value can be changed on-the-fly for tuning.") "electrical furnace is faster. The value can be changed on-the-fly for tuning.")
.defineInRange("e_furnace_speed_percent", EdElectricalFurnace.ElectricalFurnaceTileEntity.DEFAULT_SPEED_PERCENT, 50, 800); .defineInRange("e_furnace_speed_percent", EdElectricalFurnace.ElectricalFurnaceTileEntity.DEFAULT_SPEED_PERCENT, 50, 800);
e_furnace_power_consumption = builder e_furnace_power_consumption = builder
.translation(ModEngineersDecor.MODID + ".config.e_furnace_power_consumption") .translation(MODID + ".config.e_furnace_power_consumption")
.comment("Defines how much RF per tick the the electrical furnace consumed (average) for smelting. " + .comment("Defines how much RF per tick the the electrical furnace consumed (average) for smelting. " +
"The feeders transferring items from/to adjacent have this consumption/8 for each stack transaction. " + "The feeders transferring items from/to adjacent have this consumption/8 for each stack transaction. " +
"The default value is only slightly higher than a furnace with an IE external heater (and no burning fuel inside)." + "The default value is only slightly higher than a furnace with an IE external heater (and no burning fuel inside)." +
"The config value can be changed on-the-fly for tuning.") "The config value can be changed on-the-fly for tuning.")
.defineInRange("e_furnace_power_consumption", EdElectricalFurnace.ElectricalFurnaceTileEntity.DEFAULT_ENERGY_CONSUMPTION, 8, 4096); .defineInRange("e_furnace_power_consumption", EdElectricalFurnace.ElectricalFurnaceTileEntity.DEFAULT_ENERGY_CONSUMPTION, 8, 4096);
e_furnace_automatic_pulling = builder e_furnace_automatic_pulling = builder
.translation(ModEngineersDecor.MODID + ".config.e_furnace_automatic_pulling") .translation(MODID + ".config.e_furnace_automatic_pulling")
.comment("Defines if the electrical furnace automatically pulls items from an inventory at the input side." + .comment("Defines if the electrical furnace automatically pulls items from an inventory at the input side." +
"The config value can be changed on-the-fly for tuning.") "The config value can be changed on-the-fly for tuning.")
.define("e_furnace_automatic_pulling", false); .define("e_furnace_automatic_pulling", false);
small_solar_panel_peak_production = builder small_solar_panel_peak_production = builder
.translation(ModEngineersDecor.MODID + ".config.small_solar_panel_peak_production") .translation(MODID + ".config.small_solar_panel_peak_production")
.comment("Defines the peak power production (at noon) of the Small Solar Panel. " + .comment("Defines the peak power production (at noon) of the Small Solar Panel. " +
"Note that the agerage power is much less, as no power is produced at all during the night, " + "Note that the agerage power is much less, as no power is produced at all during the night, " +
"and the power curve is nonlinear rising/falling during the day. Bad weather conditions also " + "and the power curve is nonlinear rising/falling during the day. Bad weather conditions also " +
"decrease the production. The config value can be changed on-the-fly for tuning.") "decrease the production. The config value can be changed on-the-fly for tuning.")
.defineInRange("small_solar_panel_peak_production", EdSolarPanel.SolarPanelTileEntity.DEFAULT_PEAK_POWER, 2, 4096); .defineInRange("small_solar_panel_peak_production", EdSolarPanel.SolarPanelTileEntity.DEFAULT_PEAK_POWER, 2, 4096);
block_breaker_power_consumption = builder block_breaker_power_consumption = builder
.translation(ModEngineersDecor.MODID + ".config.block_breaker_power_consumption") .translation(MODID + ".config.block_breaker_power_consumption")
.comment("Defines how much RF power the Small Block Breaker requires to magnificently increase the processing speed. " + .comment("Defines how much RF power the Small Block Breaker requires to magnificently increase the processing speed. " +
"The config value can be changed on-the-fly for tuning.") "The config value can be changed on-the-fly for tuning.")
.defineInRange("block_breaker_power_consumption", EdBreaker.BreakerTileEntity.DEFAULT_BOOST_ENERGY, 4, 1024); .defineInRange("block_breaker_power_consumption", EdBreaker.BreakerTileEntity.DEFAULT_BOOST_ENERGY, 4, 1024);
block_breaker_reluctance = builder block_breaker_reluctance = builder
.translation(ModEngineersDecor.MODID + ".config.block_breaker_reluctance") .translation(MODID + ".config.block_breaker_reluctance")
.comment("Defines how much time the Small Block Breaker needs per block hardness, " + .comment("Defines how much time the Small Block Breaker needs per block hardness, " +
"means: 'reluctance' * hardness + min_time, you change the 'reluctance' here." + "means: 'reluctance' * hardness + min_time, you change the 'reluctance' here." +
"The unit is ticks/hardness. " + "The config value can be changed on-the-fly for tuning.") "The unit is ticks/hardness. " + "The config value can be changed on-the-fly for tuning.")
.defineInRange("block_breaker_reluctance", EdBreaker.BreakerTileEntity.DEFAULT_BREAKING_RELUCTANCE, 5, 50); .defineInRange("block_breaker_reluctance", EdBreaker.BreakerTileEntity.DEFAULT_BREAKING_RELUCTANCE, 5, 50);
block_breaker_min_breaking_time = builder block_breaker_min_breaking_time = builder
.translation(ModEngineersDecor.MODID + ".config.block_breaker_min_breaking_time") .translation(MODID + ".config.block_breaker_min_breaking_time")
.comment("Defines how much time the Small Block Breaker needs at least, better said it's an offset: " + .comment("Defines how much time the Small Block Breaker needs at least, better said it's an offset: " +
"'reluctance' * hardness + min_time, you change the 'min_time' here, value " + "'reluctance' * hardness + min_time, you change the 'min_time' here, value " +
"in ticks." + "The config value can be changed on-the-fly for tuning.") "in ticks." + "The config value can be changed on-the-fly for tuning.")
.defineInRange("block_breaker_min_breaking_time", EdBreaker.BreakerTileEntity.DEFAULT_MIN_BREAKING_TIME, 10, 100); .defineInRange("block_breaker_min_breaking_time", EdBreaker.BreakerTileEntity.DEFAULT_MIN_BREAKING_TIME, 10, 100);
block_breaker_requires_power = builder block_breaker_requires_power = builder
.translation(ModEngineersDecor.MODID + ".config.block_breaker_requires_power") .translation(MODID + ".config.block_breaker_requires_power")
.comment("Defines if the Small Block Breaker does not work without RF power.") .comment("Defines if the Small Block Breaker does not work without RF power.")
.define("block_breaker_requires_power", false); .define("block_breaker_requires_power", false);
tree_cuttter_energy_consumption = builder tree_cuttter_energy_consumption = builder
.translation(ModEngineersDecor.MODID + ".config.tree_cuttter_energy_consumption") .translation(MODID + ".config.tree_cuttter_energy_consumption")
.comment("Defines how much RF power the Small Tree Cutter requires to magnificently increase the processing speed. " + .comment("Defines how much RF power the Small Tree Cutter requires to magnificently increase the processing speed. " +
"The config value can be changed on-the-fly for tuning.") "The config value can be changed on-the-fly for tuning.")
.defineInRange("tree_cuttter_energy_consumption", EdTreeCutter.TreeCutterTileEntity.DEFAULT_BOOST_ENERGY, 4, 1024); .defineInRange("tree_cuttter_energy_consumption", EdTreeCutter.TreeCutterTileEntity.DEFAULT_BOOST_ENERGY, 4, 1024);
tree_cuttter_cutting_time_needed = builder tree_cuttter_cutting_time_needed = builder
.translation(ModEngineersDecor.MODID + ".config.tree_cuttter_cutting_time_needed") .translation(MODID + ".config.tree_cuttter_cutting_time_needed")
.comment("Defines how much time the Small Tree Cutter needs to cut a tree without RF power. " + .comment("Defines how much time the Small Tree Cutter needs to cut a tree without RF power. " +
"The value is in seconds. With energy it is 6 times faster. " + "The value is in seconds. With energy it is 6 times faster. " +
"The config value can be changed on-the-fly for tuning.") "The config value can be changed on-the-fly for tuning.")
.defineInRange("tree_cuttter_cutting_time_needed", EdTreeCutter.TreeCutterTileEntity.DEFAULT_CUTTING_TIME_NEEDED, 10, 240); .defineInRange("tree_cuttter_cutting_time_needed", EdTreeCutter.TreeCutterTileEntity.DEFAULT_CUTTING_TIME_NEEDED, 10, 240);
tree_cuttter_requires_power = builder tree_cuttter_requires_power = builder
.translation(ModEngineersDecor.MODID + ".config.tree_cuttter_requires_power") .translation(MODID + ".config.tree_cuttter_requires_power")
.comment("Defines if the Small Tree Cutter does not work without RF power.") .comment("Defines if the Small Tree Cutter does not work without RF power.")
.define("tree_cuttter_requires_power", false); .define("tree_cuttter_requires_power", false);
milking_machine_energy_consumption = builder milking_machine_energy_consumption = builder
.translation(ModEngineersDecor.MODID + ".config.milking_machine_energy_consumption") .translation(MODID + ".config.milking_machine_energy_consumption")
.comment("Defines how much time the Small Milking Machine needs work. " + .comment("Defines how much time the Small Milking Machine needs work. " +
"Note this is a permanent standby power, not only when the device does something. " + "Note this is a permanent standby power, not only when the device does something. " +
"Use zero to disable energy dependency and energy handling of the machine. " + "Use zero to disable energy dependency and energy handling of the machine. " +
"The config value can be changed on-the-fly for tuning.") "The config value can be changed on-the-fly for tuning.")
.defineInRange("milking_machine_energy_consumption", EdMilker.MilkerTileEntity.DEFAULT_ENERGY_CONSUMPTION, 0, 1024); .defineInRange("milking_machine_energy_consumption", EdMilker.MilkerTileEntity.DEFAULT_ENERGY_CONSUMPTION, 0, 1024);
milking_machine_milking_delay = builder milking_machine_milking_delay = builder
.translation(ModEngineersDecor.MODID + ".config.milking_machine_milking_delay") .translation(MODID + ".config.milking_machine_milking_delay")
.comment("Defines (for each individual cow) the minimum time between milking." ) .comment("Defines (for each individual cow) the minimum time between milking." )
.defineInRange("milking_machine_milking_delay", EdMilker.MilkerTileEntity.DEFAULT_MILKING_DELAY_PER_COW, 1000, 24000); .defineInRange("milking_machine_milking_delay", EdMilker.MilkerTileEntity.DEFAULT_MILKING_DELAY_PER_COW, 1000, 24000);
builder.pop(); builder.pop();
@ -492,96 +514,10 @@ public class ModConfig
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
public static final boolean isOptedOut(final @Nullable Block block) public static final boolean isOptedOut(final @Nullable Block block)
{ return isOptedOut(block, false); } { return isOptedOut(block.asItem()); }
public static final boolean isOptedOut(final @Nullable Block block, boolean with_log_details)
{
if(block == null) return true;
if(block == ModContent.SIGN_MODLOGO) return true;
if(COMMON == null) return false;
try {
if(!COMMON.with_experimental.get()) {
if(block instanceof Auxiliaries.IExperimentalFeature) return true;
if(ModContent.isExperimentalBlock(block)) return true;
}
final String rn = block.getRegistryName().getPath();
// Hard IE dependent blocks
if(!immersiveengineering_installed) {
if(block == ModContent.CONCRETE_WALL) return true;
if((block instanceof DecorBlock.Normal) && ((((DecorBlock.Normal)block).config & DecorBlock.CFG_HARD_IE_DEPENDENT) != 0)) return true;
if((block instanceof StandardBlocks.BaseBlock) && ((((StandardBlocks.BaseBlock)block).config & DecorBlock.CFG_HARD_IE_DEPENDENT) != 0)) return true;
}
// Force-include/exclude pattern matching
try {
for(String e:includes_) {
if(rn.matches(e)) {
if(with_log_details) ModEngineersDecor.logger().info("Optout force include: " + rn);
return false;
}
}
for(String e:excludes_) {
if(rn.matches(e)) {
if(with_log_details) ModEngineersDecor.logger().info("Optout force exclude: " + rn);
return true;
}
}
} catch(Throwable ex) {
ModEngineersDecor.logger().error("optout include pattern failed, disabling.");
includes_.clear();
excludes_.clear();
}
// Early non-opt out type based evaluation
if(block instanceof EdCraftingTable.CraftingTableBlock) return COMMON.without_crafting_table.get();
if(block instanceof EdElectricalFurnace.ElectricalFurnaceBlock) return COMMON.without_electrical_furnace.get();
if((block instanceof EdFurnace.FurnaceBlock) && (!(block instanceof EdElectricalFurnace.ElectricalFurnaceBlock))) return COMMON.without_lab_furnace.get();
if(block instanceof EdFluidAccumulator.FluidAccumulatorBlock) return COMMON.without_passive_fluid_accumulator.get();
if(block instanceof EdWasteIncinerator.WasteIncineratorBlock) return COMMON.without_waste_incinerator.get();
if(block instanceof EdDropper.DropperBlock) return COMMON.without_factory_dropper.get();
if(block instanceof EdPlacer.PlacerBlock) return COMMON.without_factory_placer.get();
if(block instanceof EdBreaker.BreakerBlock) return COMMON.without_block_breaker.get();
if(block instanceof EdSlabSliceBlock) return COMMON.without_halfslabs.get();
if(block instanceof EdLadderBlock) return COMMON.without_ladders.get();
if(block instanceof EdWindowBlock) return COMMON.without_windows.get();
if(block instanceof EdPipeValve.PipeValveBlock) return COMMON.without_valves.get();
if(block instanceof EdHorizontalSupportBlock) return COMMON.without_hsupports.get();
if(block instanceof EdFloorGratingBlock) return COMMON.without_floor_grating.get();
if(block instanceof EdHopper.HopperBlock) return COMMON.without_factory_hopper.get();
if(block instanceof EdFluidFunnel.FluidFunnelBlock) return COMMON.without_fluid_funnel.get();
if(block instanceof EdSolarPanel.SolarPanelBlock) return COMMON.without_solar_panel.get();
if(block instanceof EdMineralSmelter.MineralSmelterBlock) return COMMON.without_mineral_smelter.get();
if(block instanceof EdMilker.MilkerBlock) return COMMON.without_milking_machine.get();
if(block instanceof EdTreeCutter.TreeCutterBlock) return COMMON.without_tree_cutter.get();
// Type based evaluation where later filters may match, too
if(COMMON.without_slabs.get() && (block instanceof EdSlabBlock)) return true;
if(COMMON.without_stairs.get() && (block instanceof EdStairsBlock)) return true;
if(COMMON.without_walls.get() && (block instanceof EdWallBlock)) return true;
if(COMMON.without_poles.get() && (block instanceof EdStraightPoleBlock)) return true;
// String matching based evaluation
if(COMMON.without_clinker_bricks.get() && (rn.startsWith("clinker_brick_"))) return true;
if(COMMON.without_slag_bricks.get() && rn.startsWith("slag_brick_")) return true;
if(COMMON.without_rebar_concrete.get() && rn.startsWith("rebar_concrete")) return true;
if(COMMON.without_ie_concrete_wall.get() && rn.startsWith("concrete_wall")) return true;
if(COMMON.without_panzer_glass.get() && rn.startsWith("panzerglass_")) return true;
if(COMMON.without_light_sources.get() && rn.endsWith("_light")) return true;
if(COMMON.without_sign_plates.get() && rn.startsWith("sign_")) return true;
if(COMMON.without_treated_wood_furniture.get()) {
if(block instanceof EdChair.ChairBlock) return true;
if(rn.equals("treated_wood_table")) return true;
if(rn.equals("treated_wood_stool")) return true;
if(rn.equals("treated_wood_windowsill")) return true;
}
} catch(Exception ex) {
ModEngineersDecor.logger().error("Exception evaluating the optout config: '" + ex.getMessage() + "'");
}
return false;
}
public static final boolean isOptedOut(final @Nullable Item item) public static final boolean isOptedOut(final @Nullable Item item)
{ { return (item!=null) && optouts_.contains(item.getRegistryName().getPath()); }
if(item == null) return true;
if(SERVER == null) return false;
return false;
}
public static boolean withExperimental() public static boolean withExperimental()
{ return with_experimental_features_; } { return with_experimental_features_; }
@ -592,26 +528,164 @@ public class ModConfig
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
// Cache // Cache
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
private static final ArrayList<String> includes_ = new ArrayList<String>();
private static final ArrayList<String> excludes_ = new ArrayList<String>();
private static final CompoundNBT server_config_ = new CompoundNBT(); private static final CompoundNBT server_config_ = new CompoundNBT();
public static boolean without_crafting_table = false; private static HashSet<String> optouts_ = new HashSet<>();
public static boolean immersiveengineering_installed = false;
public static boolean with_creative_mode_device_drops = false;
private static boolean with_experimental_features_ = false; private static boolean with_experimental_features_ = false;
private static boolean without_recipes_ = false; private static boolean without_recipes_ = false;
public static boolean without_crafting_table = false;
public static boolean immersiveengineering_installed = false;
public static boolean without_direct_slab_pickup = false;
public static boolean with_creative_mode_device_drops = false;
public static final CompoundNBT getServerConfig() // config that may be synchronized from server to client via net pkg. public static final CompoundNBT getServerConfig() // config that may be synchronized from server to client via net pkg.
{ return server_config_; } { return server_config_; }
private static final void updateOptouts()
{
final ArrayList<String> includes_ = new ArrayList<String>();
final ArrayList<String> excludes_ = new ArrayList<String>();
{
String inc = COMMON.pattern_includes.get().toLowerCase().replaceAll(MODID+":", "").replaceAll("[^*_,a-z0-9]", "");
if(COMMON.pattern_includes.get() != inc) COMMON.pattern_includes.set(inc);
if(!inc.isEmpty()) LOGGER.info("Config pattern includes: '" + inc + "'");
String[] incl = inc.split(",");
includes_.clear();
for(int i=0; i< incl.length; ++i) {
incl[i] = incl[i].replaceAll("[*]", ".*?");
if(!incl[i].isEmpty()) includes_.add(incl[i]);
}
}
{
String exc = COMMON.pattern_excludes.get().toLowerCase().replaceAll(MODID+":", "").replaceAll("[^*_,a-z0-9]", "");
if(!exc.isEmpty()) LOGGER.info("Config pattern excludes: '" + exc + "'");
String[] excl = exc.split(",");
excludes_.clear();
for(int i=0; i< excl.length; ++i) {
excl[i] = excl[i].replaceAll("[*]", ".*?");
if(!excl[i].isEmpty()) excludes_.add(excl[i]);
}
}
{
boolean with_log_details = false;
HashSet<String> optouts = new HashSet<>();
ModContent.getRegisteredItems().stream().filter((Item item) -> {
if(item == null) return true;
if(SERVER == null) return false;
return false;
}).forEach(
e -> optouts.add(e.getRegistryName().getPath())
);
ModContent.getRegisteredBlocks().stream().filter((Block block) -> {
if(block==null) return true;
if(block==ModContent.SIGN_MODLOGO) return true;
if(COMMON==null) return false;
try {
if(!COMMON.with_experimental.get()) {
if(block instanceof Auxiliaries.IExperimentalFeature) return true;
if(ModContent.isExperimentalBlock(block)) return true;
}
final String rn = block.getRegistryName().getPath();
// Hard IE dependent blocks
if(!immersiveengineering_installed) {
if(block==ModContent.CONCRETE_WALL) return true;
if((block instanceof DecorBlock.Normal)&&((((DecorBlock.Normal)block).config&DecorBlock.CFG_HARD_IE_DEPENDENT)!=0))
return true;
if((block instanceof StandardBlocks.BaseBlock)&&((((StandardBlocks.BaseBlock)block).config&DecorBlock.CFG_HARD_IE_DEPENDENT)!=0))
return true;
}
// Force-include/exclude pattern matching
try {
for(String e : includes_) {
if(rn.matches(e)) {
if(with_log_details) LOGGER.info("Optout force include: "+rn);
return false;
}
}
for(String e : excludes_) {
if(rn.matches(e)) {
if(with_log_details) LOGGER.info("Optout force exclude: "+rn);
return true;
}
}
} catch(Throwable ex) {
LOGGER.error("optout include pattern failed, disabling.");
includes_.clear();
excludes_.clear();
}
// Early non-opt out type based evaluation
if(block instanceof EdCraftingTable.CraftingTableBlock) return COMMON.without_crafting_table.get();
if(block instanceof EdElectricalFurnace.ElectricalFurnaceBlock) return COMMON.without_electrical_furnace.get();
if((block instanceof EdFurnace.FurnaceBlock)&&(!(block instanceof EdElectricalFurnace.ElectricalFurnaceBlock))) return COMMON.without_lab_furnace.get();
if(block instanceof EdFluidAccumulator.FluidAccumulatorBlock) return COMMON.without_passive_fluid_accumulator.get();
if(block instanceof EdWasteIncinerator.WasteIncineratorBlock) return COMMON.without_waste_incinerator.get();
if(block instanceof EdDropper.DropperBlock) return COMMON.without_factory_dropper.get();
if(block instanceof EdPlacer.PlacerBlock) return COMMON.without_factory_placer.get();
if(block instanceof EdBreaker.BreakerBlock) return COMMON.without_block_breaker.get();
if(block instanceof EdSlabSliceBlock) return COMMON.without_halfslabs.get();
if(block instanceof EdLadderBlock) return COMMON.without_ladders.get();
if(block instanceof EdWindowBlock) return COMMON.without_windows.get();
if(block instanceof EdPipeValve.PipeValveBlock) return COMMON.without_valves.get();
if(block instanceof EdHorizontalSupportBlock) return COMMON.without_hsupports.get();
if(block instanceof EdFloorGratingBlock) return COMMON.without_floor_grating.get();
if(block instanceof EdHopper.HopperBlock) return COMMON.without_factory_hopper.get();
if(block instanceof EdFluidFunnel.FluidFunnelBlock) return COMMON.without_fluid_funnel.get();
if(block instanceof EdSolarPanel.SolarPanelBlock) return COMMON.without_solar_panel.get();
if(block instanceof EdMineralSmelter.MineralSmelterBlock) return COMMON.without_mineral_smelter.get();
if(block instanceof EdMilker.MilkerBlock) return COMMON.without_milking_machine.get();
if(block instanceof EdTreeCutter.TreeCutterBlock) return COMMON.without_tree_cutter.get();
if(block instanceof EdLabeledCrate.LabeledCrateBlock) return COMMON.without_labeled_crate.get();
// Type based evaluation where later filters may match, too
if(COMMON.without_slabs.get()&&(block instanceof EdSlabBlock)) return true;
if(COMMON.without_stairs.get()&&(block instanceof EdStairsBlock)) return true;
if(COMMON.without_walls.get()&&(block instanceof EdWallBlock)) return true;
if(COMMON.without_poles.get()&&(block instanceof EdStraightPoleBlock)) return true;
// String matching based evaluation
if(COMMON.without_clinker_bricks.get()&&(rn.startsWith("clinker_brick_"))) return true;
if(COMMON.without_slag_bricks.get()&&rn.startsWith("slag_brick_")) return true;
if(COMMON.without_rebar_concrete.get()&&rn.startsWith("rebar_concrete")) return true;
if(COMMON.without_gas_concrete.get()&&rn.startsWith("gas_concrete")) return true;
if(COMMON.without_ie_concrete_wall.get()&&rn.startsWith("concrete_wall")) return true;
if(COMMON.without_panzer_glass.get()&&rn.startsWith("panzerglass_")) return true;
if(COMMON.without_light_sources.get()&&rn.endsWith("_light")) return true;
if(COMMON.without_sign_plates.get()&&rn.startsWith("sign_")) return true;
if(COMMON.without_treated_wood_furniture.get()) {
if(block instanceof EdChair.ChairBlock) return true;
if(rn.equals("treated_wood_table")) return true;
if(rn.equals("treated_wood_stool")) return true;
if(rn.equals("treated_wood_windowsill")) return true;
if(rn.equals("treated_wood_broad_windowsill")) return true;
if(rn.equals("treated_wood_side_table")) return true;
}
if(COMMON.without_metal_furniture.get()) {
if(rn.equals("steel_table")) return true;
}
if(COMMON.without_fences.get()) {
if(block instanceof EdFenceBlock) return true;
if(block instanceof EdDoubleGateBlock) return true;
}
} catch(Exception ex) {
LOGGER.error("Exception evaluating the optout config: '"+ex.getMessage()+"'");
}
return false;
}).forEach(
e -> optouts.add(e.getRegistryName().getPath())
);
optouts_ = optouts;
}
}
public static final void apply() public static final void apply()
{ {
without_crafting_table = isOptedOut(ModContent.TREATED_WOOD_CRAFTING_TABLE);
immersiveengineering_installed = Auxiliaries.isModLoaded("immersiveengineering");
with_experimental_features_ = COMMON.with_experimental.get(); with_experimental_features_ = COMMON.with_experimental.get();
if(with_experimental_features_) LOGGER.info("Config: EXPERIMENTAL FEATURES ENABLED.");
immersiveengineering_installed = Auxiliaries.isModLoaded("immersiveengineering");
updateOptouts();
without_crafting_table = isOptedOut(ModContent.TREATED_WOOD_CRAFTING_TABLE);
without_recipes_ = COMMON.without_recipes.get(); without_recipes_ = COMMON.without_recipes.get();
without_direct_slab_pickup = COMMON.without_direct_slab_pickup.get();
// ----------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------
OptionalRecipeCondition.on_config(with_experimental_features_, without_recipes_, ModConfig::isOptedOut, ModConfig::isOptedOut);
EdFurnace.FurnaceTileEntity.on_config(COMMON.furnace_smelting_speed_percent.get(), COMMON.furnace_fuel_efficiency_percent.get(), COMMON.furnace_boost_energy_consumption.get()); EdFurnace.FurnaceTileEntity.on_config(COMMON.furnace_smelting_speed_percent.get(), COMMON.furnace_fuel_efficiency_percent.get(), COMMON.furnace_boost_energy_consumption.get());
EdChair.on_config(COMMON.without_chair_sitting.get(), COMMON.without_mob_chair_sitting.get(), COMMON.chair_mob_sitting_probability_percent.get(), COMMON.chair_mob_standup_probability_percent.get()); EdChair.on_config(COMMON.without_chair_sitting.get(), COMMON.without_mob_chair_sitting.get(), COMMON.chair_mob_sitting_probability_percent.get(), COMMON.chair_mob_standup_probability_percent.get());
EdLadderBlock.on_config(COMMON.without_ladder_speed_boost.get()); EdLadderBlock.on_config(COMMON.without_ladder_speed_boost.get());
@ -626,34 +700,15 @@ public class ModConfig
EdSlabSliceBlock.on_config(!COMMON.without_direct_slab_pickup.get()); EdSlabSliceBlock.on_config(!COMMON.without_direct_slab_pickup.get());
EdLabeledCrate.on_config(false); EdLabeledCrate.on_config(false);
// ----------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------
if(with_experimental_features_) {
ModEngineersDecor.logger().info("Config: EXPERIMENTAL FEATURES ENABLED.");
}
{
String inc = COMMON.pattern_includes.get().toLowerCase().replaceAll(ModEngineersDecor.MODID+":", "").replaceAll("[^*_,a-z0-9]", "");
if(COMMON.pattern_includes.get() != inc) COMMON.pattern_includes.set(inc);
if(!inc.isEmpty()) ModEngineersDecor.logger().info("Config pattern includes: '" + inc + "'");
String[] incl = inc.split(",");
includes_.clear();
for(int i=0; i< incl.length; ++i) {
incl[i] = incl[i].replaceAll("[*]", ".*?");
if(!incl[i].isEmpty()) includes_.add(incl[i]);
}
}
{
String exc = COMMON.pattern_includes.get().toLowerCase().replaceAll(ModEngineersDecor.MODID+":", "").replaceAll("[^*_,a-z0-9]", "");
if(!exc.isEmpty()) ModEngineersDecor.logger().info("Config pattern excludes: '" + exc + "'");
String[] excl = exc.split(",");
excludes_.clear();
for(int i=0; i< excl.length; ++i) {
excl[i] = excl[i].replaceAll("[*]", ".*?");
if(!excl[i].isEmpty()) excludes_.add(excl[i]);
}
}
{ {
// Check if the config is already synchronized or has to be synchronised. // Check if the config is already synchronized or has to be synchronised.
server_config_.putBoolean("tree_cuttter_requires_power", COMMON.tree_cuttter_requires_power.get()); server_config_.putBoolean("tree_cuttter_requires_power", COMMON.tree_cuttter_requires_power.get());
server_config_.putBoolean("block_breaker_requires_power", COMMON.block_breaker_requires_power.get()); server_config_.putBoolean("block_breaker_requires_power", COMMON.block_breaker_requires_power.get());
{
String s = String.join(",", optouts_);
server_config_.putString("optout", s);
if(!s.isEmpty()) LOGGER.info("Opt-outs:" + s);
}
} }
} }
} }

View file

@ -14,6 +14,7 @@ package wile.engineersdecor;
import wile.engineersdecor.blocks.*; import wile.engineersdecor.blocks.*;
import wile.engineersdecor.libmc.blocks.StandardBlocks.BaseBlock;
import wile.engineersdecor.libmc.detail.Auxiliaries; import wile.engineersdecor.libmc.detail.Auxiliaries;
import wile.engineersdecor.libmc.blocks.StandardBlocks; import wile.engineersdecor.libmc.blocks.StandardBlocks;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
@ -44,6 +45,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Collections; import java.util.Collections;
import java.util.stream.Collectors;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@SuppressWarnings("unused") @SuppressWarnings("unused")
@ -713,12 +715,12 @@ public class ModContent
HALFSLAB_REBARCONCRETE, HALFSLAB_REBARCONCRETE,
HALFSLAB_GASCONCRETE, HALFSLAB_GASCONCRETE,
HALFSLAB_CONCRETE, HALFSLAB_CONCRETE,
//HALFSLAB_TREATEDWOOD, HALFSLAB_TREATEDWOOD,
//HALFSLAB_SHEETMETALIRON, HALFSLAB_SHEETMETALIRON,
//HALFSLAB_SHEETMETALSTEEL, HALFSLAB_SHEETMETALSTEEL,
//HALFSLAB_SHEETMETALCOPPER, HALFSLAB_SHEETMETALCOPPER,
//HALFSLAB_SHEETMETALGOLD, HALFSLAB_SHEETMETALGOLD,
//HALFSLAB_SHEETMETALALUMINIUM, HALFSLAB_SHEETMETALALUMINIUM,
CONCRETE_WALL, CONCRETE_WALL,
PANZERGLASS_BLOCK, PANZERGLASS_BLOCK,
PANZERGLASS_SLAB, PANZERGLASS_SLAB,
@ -949,10 +951,25 @@ public class ModContent
public static List<Block> getRegisteredBlocks() public static List<Block> getRegisteredBlocks()
{ return Collections.unmodifiableList(registeredBlocks); } { return Collections.unmodifiableList(registeredBlocks); }
@Nonnull
public static List<Item> getRegisteredItems()
{ return new ArrayList<>(); }
public static final void registerBlocks(final RegistryEvent.Register<Block> event) public static final void registerBlocks(final RegistryEvent.Register<Block> event)
{ {
if(Auxiliaries.isModLoaded("immersiveengineering")) Auxiliaries.logInfo("Immersive Engineering also installed ..."); boolean ie_available = Auxiliaries.isModLoaded("immersiveengineering");
registeredBlocks.addAll(allBlocks()); if(ie_available) {
Auxiliaries.logInfo("Immersive Engineering also installed ...");
registeredBlocks.addAll(allBlocks());
} else {
registeredBlocks.addAll(allBlocks().stream()
.filter(block->
((!(block instanceof BaseBlock)) || ((((BaseBlock)block).config & DecorBlock.CFG_HARD_IE_DEPENDENT)==0))
|| (block == HALFSLAB_CONCRETE) // special case for 1.14 to prevent mod update issues
)
.collect(Collectors.toList())
);
}
for(Block e:registeredBlocks) event.getRegistry().register(e); for(Block e:registeredBlocks) event.getRegistry().register(e);
Auxiliaries.logInfo("Registered " + Integer.toString(registeredBlocks.size()) + " blocks."); Auxiliaries.logInfo("Registered " + Integer.toString(registeredBlocks.size()) + " blocks.");
} }

View file

@ -123,7 +123,7 @@ public class EdElectricalFurnace
public static final int HEAT_INCREMENT = 20; public static final int HEAT_INCREMENT = 20;
public static final int MAX_ENERGY_TRANSFER = 1024; public static final int MAX_ENERGY_TRANSFER = 1024;
public static final int MAX_ENERGY_BUFFER = 32000; public static final int MAX_ENERGY_BUFFER = 32000;
public static final int MAX_SPEED_SETTING = 2; public static final int MAX_SPEED_SETTING = 3;
public static final int NUM_OF_SLOTS = 7; public static final int NUM_OF_SLOTS = 7;
public static final int SMELTING_INPUT_SLOT_NO = 0; public static final int SMELTING_INPUT_SLOT_NO = 0;
public static final int SMELTING_AUX_SLOT_NO = 1; public static final int SMELTING_AUX_SLOT_NO = 1;
@ -196,7 +196,7 @@ public class EdElectricalFurnace
proc_time_needed_ = nbt.getInt("CookTimeTotal"); proc_time_needed_ = nbt.getInt("CookTimeTotal");
energy_stored_ = nbt.getInt("Energy"); energy_stored_ = nbt.getInt("Energy");
speed_ = nbt.getInt("SpeedSetting"); speed_ = nbt.getInt("SpeedSetting");
speed_ = (speed_ < 0) ? (1) : ((speed_>3) ? 3 : speed_); speed_ = (speed_ < 0) ? (1) : ((speed_>MAX_SPEED_SETTING) ? MAX_SPEED_SETTING : speed_);
} }
protected void writenbt(CompoundNBT nbt) protected void writenbt(CompoundNBT nbt)
@ -205,7 +205,7 @@ public class EdElectricalFurnace
nbt.putInt("CookTime", MathHelper.clamp(proc_time_elapsed_, 0, MAX_BURNTIME)); nbt.putInt("CookTime", MathHelper.clamp(proc_time_elapsed_, 0, MAX_BURNTIME));
nbt.putInt("CookTimeTotal", MathHelper.clamp(proc_time_needed_, 0, MAX_BURNTIME)); nbt.putInt("CookTimeTotal", MathHelper.clamp(proc_time_needed_, 0, MAX_BURNTIME));
nbt.putInt("Energy", MathHelper.clamp(energy_stored_, 0, MAX_ENERGY_BUFFER)); nbt.putInt("Energy", MathHelper.clamp(energy_stored_, 0, MAX_ENERGY_BUFFER));
nbt.putInt("SpeedSetting", MathHelper.clamp(speed_, -1, MAX_SPEED_SETTING)); nbt.putInt("SpeedSetting", MathHelper.clamp(speed_, 0, MAX_SPEED_SETTING));
ItemStackHelper.saveAllItems(nbt, stacks_); ItemStackHelper.saveAllItems(nbt, stacks_);
} }
@ -492,7 +492,7 @@ public class EdElectricalFurnace
} else if(energy_stored_ >= (MAX_ENERGY_BUFFER/2)) { } else if(energy_stored_ >= (MAX_ENERGY_BUFFER/2)) {
enabled_ = true; enabled_ = true;
} }
if((!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty()) && (enabled_) && (speed_>0) && (speed_<4)) { if((!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty()) && (enabled_) && (speed_>0) && (speed_<=MAX_SPEED_SETTING)) {
IRecipe last_recipe = currentRecipe(); IRecipe last_recipe = currentRecipe();
updateCurrentRecipe(); updateCurrentRecipe();
if(currentRecipe() != last_recipe) { if(currentRecipe() != last_recipe) {
@ -769,7 +769,7 @@ public class EdElectricalFurnace
{ {
if(!(inventory_ instanceof ElectricalFurnaceTileEntity)) return; if(!(inventory_ instanceof ElectricalFurnaceTileEntity)) return;
ElectricalFurnaceTileEntity te = (ElectricalFurnaceTileEntity)inventory_; ElectricalFurnaceTileEntity te = (ElectricalFurnaceTileEntity)inventory_;
if(nbt.contains("speed")) te.speed_ = MathHelper.clamp(nbt.getInt("speed"), 0, 3); if(nbt.contains("speed")) te.speed_ = MathHelper.clamp(nbt.getInt("speed"), 0, ElectricalFurnaceTileEntity.MAX_SPEED_SETTING);
te.markDirty(); te.markDirty();
} }
} }

View file

@ -17,10 +17,14 @@ import mezz.jei.api.registration.IRecipeTransferRegistration;
import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.runtime.IJeiRuntime; import mezz.jei.api.runtime.IJeiRuntime;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import java.util.ArrayList; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@mezz.jei.api.JeiPlugin @mezz.jei.api.JeiPlugin
public class JEIPlugin implements mezz.jei.api.IModPlugin public class JEIPlugin implements mezz.jei.api.IModPlugin
@ -48,15 +52,21 @@ public class JEIPlugin implements mezz.jei.api.IModPlugin
@Override @Override
public void onRuntimeAvailable(IJeiRuntime jeiRuntime) public void onRuntimeAvailable(IJeiRuntime jeiRuntime)
{ {
List<ItemStack> blacklisted = new ArrayList<>(); HashSet<Item> blacklisted = new HashSet<>();
for(Block e: ModContent.getRegisteredBlocks()) { for(Block e: ModContent.getRegisteredBlocks()) {
if(ModConfig.isOptedOut(e)) { if(ModConfig.isOptedOut(e) && (e.asItem().getRegistryName().getPath()).equals((e.getRegistryName().getPath()))) {
blacklisted.add(new ItemStack(e.asItem())); blacklisted.add(e.asItem());
}
}
for(Item e: ModContent.getRegisteredItems()) {
if(ModConfig.isOptedOut(e) && (!(e instanceof BlockItem))) {
blacklisted.add(e);
} }
} }
if(!blacklisted.isEmpty()) { if(!blacklisted.isEmpty()) {
List<ItemStack> blacklist = blacklisted.stream().map(ItemStack::new).collect(Collectors.toList());
try { try {
jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(VanillaTypes.ITEM, blacklisted); jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(VanillaTypes.ITEM, blacklist);
} catch(Exception e) { } catch(Exception e) {
ModEngineersDecor.logger().warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI optout processing."); ModEngineersDecor.logger().warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI optout processing.");
} }

View file

@ -10,10 +10,12 @@ package wile.engineersdecor.libmc.detail;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.ItemStackHelper;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
@ -86,7 +88,9 @@ public class Inventories
} }
private static ItemStack checked(ItemStack stack) private static ItemStack checked(ItemStack stack)
{ return stack.isEmpty() ? ItemStack.EMPTY : stack; } // explicit EMPTY return { return stack.isEmpty() ? ItemStack.EMPTY : stack; }
//--------------------------------------------------------------------------------------------------------------------
public static class SlotRange public static class SlotRange
{ {
@ -138,7 +142,7 @@ public class Inventories
for(int i = start_slot; i < end_slot; ++i) { for(int i = start_slot; i < end_slot; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i); final int sno = reverse ? (end_slot-1-i) : (i);
final ItemStack stack = inventory.getStackInSlot(sno); final ItemStack stack = inventory.getStackInSlot(sno);
if(stack.isEmpty() || (!inventory.isItemValidForSlot(sno, mvstack))) { if(stack.isEmpty()) {
empties[sno] = true; empties[sno] = true;
} else if(areItemStacksIdentical(stack, mvstack)) { } else if(areItemStacksIdentical(stack, mvstack)) {
matches[sno] = true; matches[sno] = true;
@ -148,7 +152,7 @@ public class Inventories
// first iteration: fillup existing stacks // first iteration: fillup existing stacks
for(int i = start_slot; i < end_slot; ++i) { for(int i = start_slot; i < end_slot; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i); final int sno = reverse ? (end_slot-1-i) : (i);
if(empties[sno] || !matches[sno]) continue; if((empties[sno]) || (!matches[sno])) continue;
final ItemStack stack = inventory.getStackInSlot(sno); final ItemStack stack = inventory.getStackInSlot(sno);
int nmax = Math.min(limit_left, stack.getMaxStackSize() - stack.getCount()); int nmax = Math.min(limit_left, stack.getMaxStackSize() - stack.getCount());
if(mvstack.getCount() <= nmax) { if(mvstack.getCount() <= nmax) {
@ -180,7 +184,7 @@ public class Inventories
} }
for(i=insert_start;i < insert_end; ++i) { for(i=insert_start;i < insert_end; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i); final int sno = reverse ? (end_slot-1-i) : (i);
if(!empties[sno]) continue; if((!empties[sno]) || (!inventory.isItemValidForSlot(sno, mvstack))) continue;
int nmax = Math.min(limit_left, mvstack.getCount()); int nmax = Math.min(limit_left, mvstack.getCount());
ItemStack moved = mvstack.copy(); ItemStack moved = mvstack.copy();
moved.setCount(nmax); moved.setCount(nmax);
@ -195,7 +199,7 @@ public class Inventories
final int sno = reverse ? (end_slot-1-i) : (i); final int sno = reverse ? (end_slot-1-i) : (i);
if(!matches[sno]) continue; if(!matches[sno]) continue;
int ii = (empties[sno-1]) ? (sno-1) : (empties[sno+1] ? (sno+1) : -1); int ii = (empties[sno-1]) ? (sno-1) : (empties[sno+1] ? (sno+1) : -1);
if(ii >= 0) { if((ii >= 0) && (inventory.isItemValidForSlot(ii, mvstack))) {
int nmax = Math.min(limit_left, mvstack.getCount()); int nmax = Math.min(limit_left, mvstack.getCount());
ItemStack moved = mvstack.copy(); ItemStack moved = mvstack.copy();
moved.setCount(nmax); moved.setCount(nmax);
@ -209,7 +213,7 @@ public class Inventories
// third iteration: use any empty slots // third iteration: use any empty slots
for(int i = start_slot; i < end_slot; ++i) { for(int i = start_slot; i < end_slot; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i); final int sno = reverse ? (end_slot-1-i) : (i);
if(!empties[sno]) continue; if((!empties[sno]) || (!inventory.isItemValidForSlot(sno, mvstack))) continue;
int nmax = Math.min(limit_left, mvstack.getCount()); int nmax = Math.min(limit_left, mvstack.getCount());
ItemStack placed = mvstack.copy(); ItemStack placed = mvstack.copy();
placed.setCount(nmax); placed.setCount(nmax);
@ -303,4 +307,33 @@ public class Inventories
{ return inventory.isItemValidForSlot(offset+index, stack); } { return inventory.isItemValidForSlot(offset+index, stack); }
} }
//--------------------------------------------------------------------------------------------------------------------
public static NonNullList<ItemStack> readNbtStacks(CompoundNBT nbt, String key, int size)
{
NonNullList<ItemStack> stacks = NonNullList.withSize(size, ItemStack.EMPTY);
if((nbt == null) || (!nbt.contains(key,10))) return stacks;
CompoundNBT stacknbt = nbt.getCompound(key);
ItemStackHelper.loadAllItems(stacknbt, stacks);
return stacks;
}
public static CompoundNBT writeNbtStacks(CompoundNBT nbt, String key, NonNullList<ItemStack> stacks, boolean omit_trailing_empty)
{
CompoundNBT stacknbt = new CompoundNBT();
if(omit_trailing_empty) {
for(int i=stacks.size()-1; i>=0; --i) {
if(!stacks.get(i).isEmpty()) break;
stacks.remove(i);
}
}
ItemStackHelper.saveAllItems(stacknbt, stacks);
if(nbt == null) nbt = new CompoundNBT();
nbt.put(key, stacknbt);
return nbt;
}
public static CompoundNBT writeNbtStacks(CompoundNBT nbt, String key, NonNullList<ItemStack> stacks)
{ return writeNbtStacks(nbt, key, stacks, false); }
} }

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_aluminum"}} {"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_aluminum"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_copper"}} {"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_copper"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_gold"}} {"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_gold"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_iron"}} {"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_iron"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:blocks/sheetmetal_steel"}} {"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"immersiveengineering:block/metal/sheetmetal_steel"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

View file

@ -1 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:blocks/treated_wood"}} {"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"immersiveengineering:block/wooden_decoration/treated_wood"}}

Some files were not shown because too many files have changed in this diff Show more