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:
parent
2805e59d26
commit
7cf182652b
261 changed files with 1161 additions and 902 deletions
|
@ -12,23 +12,20 @@ MOD_JAR=$(filter-out %-sources.jar,$(wildcard build/libs/${MOD_JAR_PREFIX}*.jar)
|
|||
ifeq ($(OS),Windows_NT)
|
||||
GRADLE=gradlew.bat --no-daemon
|
||||
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
|
||||
else
|
||||
GRADLE=./gradlew --no-daemon
|
||||
GRADLE_STOP=./gradlew --stop
|
||||
INSTALL_DIR=~/.minecraft
|
||||
SERVER_INSTALL_DIR=~/.minecraft-server-forge-1.12.2-14.23.5.2768
|
||||
DJS=djs
|
||||
endif
|
||||
TASK=$(DJS) ../meta/lib/tasks.js
|
||||
|
||||
wildcardr=$(foreach d,$(wildcard $1*),$(call wildcardr,$d/,$2) $(filter $(subst *,%,$2),$d))
|
||||
|
||||
#
|
||||
# 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
|
||||
|
||||
|
@ -65,42 +62,28 @@ run:
|
|||
@echo "[1.12] Running client ..."
|
||||
@$(GRADLE) runClient
|
||||
|
||||
install: $(MOD_JAR) |
|
||||
@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:
|
||||
sanitize:
|
||||
@echo "[1.12] Running sanatising tasks ..."
|
||||
@djs tasks.js sanatize
|
||||
@djs tasks.js sync-languages
|
||||
@djs tasks.js version-check
|
||||
@djs tasks.js update-json
|
||||
@$(TASK) sanitize
|
||||
@$(TASK) sync-languages
|
||||
@$(TASK) version-check
|
||||
@$(TASK) update-json
|
||||
@git status -s .
|
||||
|
||||
install: $(MOD_JAR) |
|
||||
@$(TASK) install
|
||||
|
||||
start-server: install
|
||||
@$(TASK) start-server
|
||||
|
||||
dist-check:
|
||||
@echo "[1.12] Running dist checks ..."
|
||||
@djs tasks.js dist-check
|
||||
@$(TASK) dist-check
|
||||
|
||||
dist-files: clean-all init mod
|
||||
@echo "[1.12] Distribution files ..."
|
||||
@mkdir -p dist
|
||||
@cp build/libs/$(MOD_JAR_PREFIX)* dist/
|
||||
@djs tasks.js dist
|
||||
@$(TASK) dist
|
||||
|
||||
dist: sanatize dist-check dist-files
|
||||
|
||||
port-languages:
|
||||
@echo "[1.12] Porting language files to 1.14 ..."
|
||||
@djs tasks.js port-languages
|
||||
dist: sanitize dist-check dist-files
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
|
||||
"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-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.",
|
||||
|
@ -89,6 +90,6 @@
|
|||
},
|
||||
"promos": {
|
||||
"1.12.2-recommended": "1.0.20",
|
||||
"1.12.2-latest": "1.0.20"
|
||||
"1.12.2-latest": "1.1.0-b1"
|
||||
}
|
||||
}
|
|
@ -10,7 +10,9 @@ Mod sources for Minecraft version 1.12.2.
|
|||
----
|
||||
## 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:
|
||||
|
|
|
@ -212,7 +212,7 @@ public class ModContent
|
|||
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",
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT,
|
||||
Material.WOOD, 0.5f, 128f, SoundType.METAL,
|
||||
|
|
|
@ -9,10 +9,8 @@
|
|||
package wile.engineersdecor.blocks;
|
||||
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import wile.engineersdecor.ModContent;
|
||||
import wile.engineersdecor.ModEngineersDecor;
|
||||
|
||||
import net.minecraft.block.SoundType;
|
||||
import net.minecraft.block.material.Material;
|
||||
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.*;
|
||||
import net.minecraft.stats.StatList;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.energy.CapabilityEnergy;
|
||||
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 MAX_ENERGY_TRANSFER = 256;
|
||||
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 SMELTING_INPUT_SLOT_NO = 0;
|
||||
public static final int SMELTING_AUX_SLOT_NO = 1;
|
||||
|
@ -382,7 +381,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
|
|||
proc_time_needed_ = compound.getInteger("CookTimeTotal");
|
||||
energy_stored_ = compound.getInteger("Energy");
|
||||
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)
|
||||
|
@ -391,7 +390,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
|
|||
compound.setInteger("CookTime", MathHelper.clamp(proc_time_elapsed_, 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("SpeedSetting", MathHelper.clamp(speed_, -1, MAX_SPEED_SETTING));
|
||||
compound.setInteger("SpeedSetting", MathHelper.clamp(speed_, 0, MAX_SPEED_SETTING));
|
||||
ItemStackHelper.saveAllItems(compound, stacks_);
|
||||
}
|
||||
|
||||
|
@ -655,7 +654,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
|
|||
@Override
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -761,7 +760,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
|
|||
}
|
||||
final ItemStack last_inp_stack = current_smelting_input_stack_;
|
||||
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_)) {
|
||||
proc_time_elapsed_ = 0;
|
||||
proc_time_needed_ = getCookTime(current_smelting_input_stack_);
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
*/
|
||||
package wile.engineersdecor.blocks;
|
||||
|
||||
import wile.engineersdecor.ModEngineersDecor;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.SoundType;
|
||||
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.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import wile.engineersdecor.ModEngineersDecor;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
||||
public class BlockDecorLabeledCrate
|
||||
public class BlockDecorLabeledCrate extends BlockDecorDirectedHorizontal
|
||||
{
|
||||
public static void on_config(int stack_limit)
|
||||
{
|
||||
|
@ -56,94 +56,129 @@ public class BlockDecorLabeledCrate
|
|||
// 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)
|
||||
{ super(registryName, config, material, hardness, resistance, sound, unrotatedAABB); }
|
||||
if(world.isRemote) return true;
|
||||
player.openGui(ModEngineersDecor.instance, ModEngineersDecor.GuiHandler.GUIID_LABELED_CRATE, world, pos.getX(), pos.getY(), pos.getZ());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(IBlockState state)
|
||||
{ return true; }
|
||||
@Override
|
||||
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
|
||||
{
|
||||
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
|
||||
@Nullable
|
||||
public TileEntity createTileEntity(World world, IBlockState state)
|
||||
{ return new LabeledCrateTileEntity(); }
|
||||
private ItemStack itemize_with_inventory(World world, BlockPos pos)
|
||||
{
|
||||
TileEntity te = world.getTileEntity(pos);
|
||||
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
|
||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
|
||||
@Override
|
||||
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;
|
||||
player.openGui(ModEngineersDecor.instance, ModEngineersDecor.GuiHandler.GUIID_LABELED_CRATE, world, pos.getX(), pos.getY(), pos.getZ());
|
||||
return true;
|
||||
super(new BContainer(playerInventory, world, pos, te));
|
||||
this.te = te;
|
||||
xSize = 213;
|
||||
ySize = 206;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
|
||||
{
|
||||
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();
|
||||
}
|
||||
public void initGui()
|
||||
{ super.initGui(); }
|
||||
|
||||
private ItemStack itemize_with_inventory(World world, BlockPos pos)
|
||||
@Override
|
||||
public void drawScreen(int mouseX, int mouseY, float partialTicks)
|
||||
{
|
||||
TileEntity te = world.getTileEntity(pos);
|
||||
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;
|
||||
drawDefaultBackground();
|
||||
super.drawScreen(mouseX, mouseY, partialTicks);
|
||||
renderHoveredToolTip(mouseX, mouseY);
|
||||
}
|
||||
|
||||
@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;
|
||||
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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
@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
|
||||
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
|
||||
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
|
||||
//--------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -542,7 +538,7 @@ public class BlockDecorLabeledCrate
|
|||
|
||||
@Override
|
||||
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
|
||||
public boolean canMergeSlot(ItemStack stack, Slot slot)
|
||||
|
|
|
@ -28,7 +28,6 @@ import net.minecraft.util.math.MathHelper;
|
|||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import wile.engineersdecor.blocks.BlockDecorLabeledCrate;
|
||||
import wile.engineersdecor.blocks.BlockDecorLabeledCrate.DecorLabeledCrateBlock;
|
||||
import wile.engineersdecor.blocks.BlockDecorTest;
|
||||
|
||||
public class ModTesrs
|
||||
|
@ -114,7 +113,7 @@ public class ModTesrs
|
|||
try {
|
||||
final ItemStack stack = te.getItemFrameStack();
|
||||
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];
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.disableLighting();
|
||||
|
|
|
@ -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);
|
|
@ -18,13 +18,14 @@ GRADLE=./gradlew --no-daemon
|
|||
GRADLE_STOP=./gradlew --stop
|
||||
DJS=djs
|
||||
endif
|
||||
TASK=$(DJS) ../meta/lib/tasks.js
|
||||
|
||||
wildcardr=$(foreach d,$(wildcard $1*),$(call wildcardr,$d/,$2) $(filter $(subst *,%,$2),$d))
|
||||
|
||||
#
|
||||
# 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
|
||||
|
||||
|
@ -34,9 +35,13 @@ mod:
|
|||
@echo "[1.14] Building mod using gradle ..."
|
||||
@$(GRADLE) build $(GRADLE_OPTS)
|
||||
|
||||
assets:
|
||||
@echo "[1.14] Running asset generators ..."
|
||||
@$(TASK) assets
|
||||
|
||||
data:
|
||||
@echo "[1.14] Running data generators ..."
|
||||
@djs tasks.js datagen
|
||||
@$(TASK) datagen
|
||||
|
||||
clean:
|
||||
@echo "[1.14] Cleaning ..."
|
||||
|
@ -64,28 +69,28 @@ init:
|
|||
@echo "[1.14] Initialising eclipse workspace using gradle ..."
|
||||
@$(GRADLE) eclipse
|
||||
|
||||
sanatize:
|
||||
sanitize:
|
||||
@echo "[1.14] Running sanatising tasks ..."
|
||||
@djs tasks.js sanatize
|
||||
@djs tasks.js sync-languages
|
||||
@djs tasks.js version-check
|
||||
@djs tasks.js update-json
|
||||
@$(TASK) sanitize
|
||||
@$(TASK) sync-languages
|
||||
@$(TASK) version-check
|
||||
@$(TASK) update-json
|
||||
@git status -s .
|
||||
|
||||
install: $(MOD_JAR) |
|
||||
@$(TASK) install
|
||||
|
||||
start-server: install
|
||||
@$(TASK) start-server
|
||||
|
||||
dist-check:
|
||||
@echo "[1.14] Running dist checks ..."
|
||||
@djs tasks.js dist-check
|
||||
@$(TASK) dist-check
|
||||
|
||||
dist-files: clean-all init data mod
|
||||
@echo "[1.14] Distribution files ..."
|
||||
@mkdir -p dist
|
||||
@cp build/libs/$(MOD_JAR_PREFIX)* dist/
|
||||
@djs tasks.js dist
|
||||
@$(TASK) dist
|
||||
|
||||
dist: sanatize 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
|
||||
dist: sanitize dist-check dist-files
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
|
||||
"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-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.",
|
||||
|
@ -56,6 +57,6 @@
|
|||
},
|
||||
"promos": {
|
||||
"1.14.4-recommended": "",
|
||||
"1.14.4-latest": "1.0.20-b7"
|
||||
"1.14.4-latest": "1.1.0-b1"
|
||||
}
|
||||
}
|
|
@ -11,7 +11,11 @@ Mod sources for Minecraft version 1.14.4.
|
|||
|
||||
## 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.
|
||||
[!] Variant Slab compatibility fix. *This may alter placed slabs of this mod,
|
||||
|
|
|
@ -12,20 +12,22 @@ package wile.engineersdecor;
|
|||
import wile.engineersdecor.blocks.*;
|
||||
import wile.engineersdecor.libmc.blocks.StandardBlocks;
|
||||
import wile.engineersdecor.libmc.detail.Auxiliaries;
|
||||
import wile.engineersdecor.libmc.detail.OptionalRecipeCondition;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraftforge.common.ForgeConfigSpec;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
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 ServerConfig SERVER;
|
||||
public static final ClientConfig CLIENT;
|
||||
|
@ -61,11 +63,11 @@ public class ModConfig
|
|||
builder.comment("Opt-out settings")
|
||||
.push("optout");
|
||||
without_tooltips = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_tooltips")
|
||||
.translation(MODID + ".config.without_tooltips")
|
||||
.comment("Disable CTRL-SHIFT item tooltip display.")
|
||||
.define("without_tooltips", false);
|
||||
without_ters = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_ters")
|
||||
.translation(MODID + ".config.without_ters")
|
||||
.comment("Disable all TERs (tile entity renderers).")
|
||||
.define("without_ters", false);
|
||||
}
|
||||
|
@ -95,12 +97,14 @@ public class ModConfig
|
|||
public final ForgeConfigSpec.BooleanValue without_clinker_bricks;
|
||||
public final ForgeConfigSpec.BooleanValue without_slag_bricks;
|
||||
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_stairs;
|
||||
public final ForgeConfigSpec.BooleanValue without_ie_concrete_wall;
|
||||
public final ForgeConfigSpec.BooleanValue without_panzer_glass;
|
||||
public final ForgeConfigSpec.BooleanValue without_ladders;
|
||||
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_light_sources;
|
||||
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_milking_machine;
|
||||
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_mob_chair_sitting;
|
||||
public final ForgeConfigSpec.BooleanValue without_ladder_speed_boost;
|
||||
|
@ -166,7 +172,7 @@ public class ModConfig
|
|||
builder.comment("Opt-out settings")
|
||||
.push("optout");
|
||||
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, "
|
||||
+ "comma separated list, whitespaces ignored. You must match the whole name, "
|
||||
+ "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. ")
|
||||
.define("pattern_excludes", "");
|
||||
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, "
|
||||
+ "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: "
|
||||
|
@ -182,153 +188,169 @@ public class ModConfig
|
|||
+ "The matching result is also traced in the log file.")
|
||||
.define("pattern_includes", "");
|
||||
without_clinker_bricks = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_clinker_bricks")
|
||||
.translation(MODID + ".config.without_clinker_bricks")
|
||||
.comment("Disable clinker bricks and derived blocks.")
|
||||
.define("without_clinker_bricks", false);
|
||||
without_slag_bricks = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_slag_bricks")
|
||||
.translation(MODID + ".config.without_slag_bricks")
|
||||
.comment("Disable slag bricks and derived blocks.")
|
||||
.define("without_slag_bricks", false);
|
||||
without_rebar_concrete = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_rebar_concrete")
|
||||
.translation(MODID + ".config.without_rebar_concrete")
|
||||
.comment("Disable rebar concrete and derived blocks.")
|
||||
.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
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_walls")
|
||||
.translation(MODID + ".config.without_walls")
|
||||
.comment("Disable all mod wall blocks.")
|
||||
.define("without_walls", false);
|
||||
without_stairs = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_stairs")
|
||||
.translation(MODID + ".config.without_stairs")
|
||||
.comment("Disable all mod stairs blocks.")
|
||||
.define("without_stairs", false);
|
||||
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.")
|
||||
.define("without_ie_concrete_wall", false);
|
||||
without_panzer_glass = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_panzer_glass")
|
||||
.translation(MODID + ".config.without_panzer_glass")
|
||||
.comment("Disable panzer glass and derived blocks.")
|
||||
.define("without_panzer_glass", false);
|
||||
without_crafting_table = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_crafting_table")
|
||||
.translation(MODID + ".config.without_crafting_table")
|
||||
.comment("Disable treated wood crafting table.")
|
||||
.define("without_crafting_table", false);
|
||||
without_lab_furnace = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_lab_furnace")
|
||||
.translation(MODID + ".config.without_lab_furnace")
|
||||
.comment("Disable small lab furnace.")
|
||||
.define("without_lab_furnace", false);
|
||||
without_electrical_furnace = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_electrical_furnace")
|
||||
.translation(MODID + ".config.without_electrical_furnace")
|
||||
.comment("Disable small electrical pass-through furnace.")
|
||||
.define("without_electrical_furnace", false);
|
||||
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.")
|
||||
.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
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_windows")
|
||||
.translation(MODID + ".config.without_windows")
|
||||
.comment("Disable treated wood window, etc.")
|
||||
.define("without_windows", false);
|
||||
without_light_sources = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_light_sources")
|
||||
.translation(MODID + ".config.without_light_sources")
|
||||
.comment("Disable light sources")
|
||||
.define("without_light_sources", false);
|
||||
without_ladders = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_ladders")
|
||||
.translation(MODID + ".config.without_ladders")
|
||||
.comment("Disable ladders")
|
||||
.define("without_ladders", false);
|
||||
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.")
|
||||
.define("without_chair_sitting", false);
|
||||
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.")
|
||||
.define("without_mob_chair_sitting", false);
|
||||
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.")
|
||||
.define("without_ladder_speed_boost", false);
|
||||
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.")
|
||||
.define("without_crafting_table_history", false);
|
||||
without_valves = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_valves")
|
||||
.translation(MODID + ".config.without_valves")
|
||||
.comment("Disable check valve, and redstone controlled valves.")
|
||||
.define("without_valves", false);
|
||||
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.")
|
||||
.define("without_passive_fluid_accumulator", false);
|
||||
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.")
|
||||
.define("without_waste_incinerator", false);
|
||||
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).")
|
||||
.define("without_sign_plates", false);
|
||||
without_floor_grating = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_floor_grating")
|
||||
.translation(MODID + ".config.without_floor_grating")
|
||||
.comment("Disable floor gratings.")
|
||||
.define("without_floor_grating", false);
|
||||
without_factory_dropper = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_factory_dropper")
|
||||
.translation(MODID + ".config.without_factory_dropper")
|
||||
.comment("Disable the factory dropper.")
|
||||
.define("without_factory_dropper", false);
|
||||
without_factory_hopper = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_factory_hopper")
|
||||
.translation(MODID + ".config.without_factory_hopper")
|
||||
.comment("Disable the factory hopper.")
|
||||
.define("without_factory_hopper", false);
|
||||
without_factory_placer = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_factory_placer")
|
||||
.translation(MODID + ".config.without_factory_placer")
|
||||
.comment("Disable the factory placer.")
|
||||
.define("without_factory_placer", false);
|
||||
without_block_breaker = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_block_breaker")
|
||||
.translation(MODID + ".config.without_block_breaker")
|
||||
.comment("Disable the small block breaker.")
|
||||
.define("without_block_breaker", false);
|
||||
without_solar_panel = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_solar_panel")
|
||||
.translation(MODID + ".config.without_solar_panel")
|
||||
.comment("Disable the small solar panel.")
|
||||
.define("without_solar_panel", false);
|
||||
without_fluid_funnel = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_fluid_funnel")
|
||||
.translation(MODID + ".config.without_fluid_funnel")
|
||||
.comment("Disable the small fluid collection funnel.")
|
||||
.define("without_fluid_funnel", false);
|
||||
without_mineral_smelter = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_mineral_smelter")
|
||||
.translation(MODID + ".config.without_mineral_smelter")
|
||||
.comment("Disable the small mineral smelter.")
|
||||
.define("without_mineral_smelter", false);
|
||||
without_milking_machine = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_milking_machine")
|
||||
.translation(MODID + ".config.without_milking_machine")
|
||||
.comment("Disable the small milking machine.")
|
||||
.define("without_milking_machine", false);
|
||||
without_tree_cutter = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_tree_cutter")
|
||||
.translation(MODID + ".config.without_tree_cutter")
|
||||
.comment("Disable the small tree cutter.")
|
||||
.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
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_slabs")
|
||||
.translation(MODID + ".config.without_slabs")
|
||||
.comment("Disable horizontal half-block slab.")
|
||||
.define("without_slabs", false);
|
||||
without_halfslabs = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_halfslabs")
|
||||
.translation(MODID + ".config.without_halfslabs")
|
||||
.comment("Disable stackable 1/8 block slices.")
|
||||
.define("without_halfslabs", false);
|
||||
without_poles = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_poles")
|
||||
.translation(MODID + ".config.without_poles")
|
||||
.comment("Disable poles of any material.")
|
||||
.define("without_poles", false);
|
||||
without_hsupports = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.without_hsupports")
|
||||
.translation(MODID + ".config.without_hsupports")
|
||||
.comment("Disable horizontal supports like the double-T support.")
|
||||
.define("without_hsupports", false);
|
||||
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.")
|
||||
.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();
|
||||
}
|
||||
// --- MISC ---------------------------------------------------------------
|
||||
|
@ -336,16 +358,16 @@ public class ModConfig
|
|||
builder.comment("Miscellaneous settings")
|
||||
.push("miscellaneous");
|
||||
with_experimental = builder
|
||||
.translation(ModEngineersDecor.MODID + ".config.with_experimental")
|
||||
.translation(MODID + ".config.with_experimental")
|
||||
.comment("Enables experimental features. Use at own risk.")
|
||||
.define("with_experimental", false);
|
||||
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 " +
|
||||
" slices by left clicking while looking up/down.")
|
||||
.define("without_direct_slab_pickup", false);
|
||||
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 " +
|
||||
" to relocate them with contents and settings.")
|
||||
.define("with_creative_mode_device_drops", false);
|
||||
|
@ -356,130 +378,130 @@ public class ModConfig
|
|||
builder.comment("Tweaks")
|
||||
.push("tweaks");
|
||||
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 " +
|
||||
"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.")
|
||||
.defineInRange("furnace_smelting_speed_percent", 130, 50, 800);
|
||||
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 " +
|
||||
"to a vanilla furnace. 100% means vanilla furnace consumiton, 200% means " +
|
||||
"the lab furnace needs about half the fuel of a vanilla furnace, " +
|
||||
"The value can be changed on-the-fly for tuning.")
|
||||
.defineInRange("furnace_fuel_efficiency_percent", 100, 50, 400);
|
||||
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. " +
|
||||
"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 " +
|
||||
"this consumption (fixed threshold value). The value can be changed on-the-fly for tuning. " +
|
||||
"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
|
||||
.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 " +
|
||||
"when colliding with it. Can be changed on-the-fly for tuning.")
|
||||
.defineInRange("chair_mob_sitting_probability_percent", 10.0, 0.0, 80.0);
|
||||
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 " +
|
||||
"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.")
|
||||
.defineInRange("chair_mob_standup_probability_percent", 1.0, 1e-3, 10.0);
|
||||
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. " +
|
||||
"Makes the UI a bit too busy, therefore disabled by default.")
|
||||
.define("with_crafting_quickmove_buttons", false);
|
||||
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.")
|
||||
.define("without_crafting_mouse_scrolling", false);
|
||||
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. " +
|
||||
"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 " +
|
||||
"block), The value can be changed on-the-fly for tuning. ")
|
||||
.defineInRange("pipevalve_max_flowrate", 1000, 1, 32000);
|
||||
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 " +
|
||||
"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 value can be changed on-the-fly for tuning. ")
|
||||
.defineInRange("pipevalve_redstone_gain", 20, 1, 32000);
|
||||
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 " +
|
||||
"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.")
|
||||
.defineInRange("e_furnace_speed_percent", EdElectricalFurnace.ElectricalFurnaceTileEntity.DEFAULT_SPEED_PERCENT, 50, 800);
|
||||
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. " +
|
||||
"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 config value can be changed on-the-fly for tuning.")
|
||||
.defineInRange("e_furnace_power_consumption", EdElectricalFurnace.ElectricalFurnaceTileEntity.DEFAULT_ENERGY_CONSUMPTION, 8, 4096);
|
||||
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." +
|
||||
"The config value can be changed on-the-fly for tuning.")
|
||||
.define("e_furnace_automatic_pulling", false);
|
||||
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. " +
|
||||
"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 " +
|
||||
"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);
|
||||
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. " +
|
||||
"The config value can be changed on-the-fly for tuning.")
|
||||
.defineInRange("block_breaker_power_consumption", EdBreaker.BreakerTileEntity.DEFAULT_BOOST_ENERGY, 4, 1024);
|
||||
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, " +
|
||||
"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.")
|
||||
.defineInRange("block_breaker_reluctance", EdBreaker.BreakerTileEntity.DEFAULT_BREAKING_RELUCTANCE, 5, 50);
|
||||
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: " +
|
||||
"'reluctance' * hardness + min_time, you change the 'min_time' here, value " +
|
||||
"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);
|
||||
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.")
|
||||
.define("block_breaker_requires_power", false);
|
||||
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. " +
|
||||
"The config value can be changed on-the-fly for tuning.")
|
||||
.defineInRange("tree_cuttter_energy_consumption", EdTreeCutter.TreeCutterTileEntity.DEFAULT_BOOST_ENERGY, 4, 1024);
|
||||
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. " +
|
||||
"The value is in seconds. With energy it is 6 times faster. " +
|
||||
"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);
|
||||
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.")
|
||||
.define("tree_cuttter_requires_power", false);
|
||||
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. " +
|
||||
"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. " +
|
||||
"The config value can be changed on-the-fly for tuning.")
|
||||
.defineInRange("milking_machine_energy_consumption", EdMilker.MilkerTileEntity.DEFAULT_ENERGY_CONSUMPTION, 0, 1024);
|
||||
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." )
|
||||
.defineInRange("milking_machine_milking_delay", EdMilker.MilkerTileEntity.DEFAULT_MILKING_DELAY_PER_COW, 1000, 24000);
|
||||
builder.pop();
|
||||
|
@ -492,96 +514,10 @@ public class ModConfig
|
|||
//--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
public static final boolean isOptedOut(final @Nullable Block block)
|
||||
{ return isOptedOut(block, false); }
|
||||
|
||||
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;
|
||||
}
|
||||
{ return isOptedOut(block.asItem()); }
|
||||
|
||||
public static final boolean isOptedOut(final @Nullable Item item)
|
||||
{
|
||||
if(item == null) return true;
|
||||
if(SERVER == null) return false;
|
||||
return false;
|
||||
}
|
||||
{ return (item!=null) && optouts_.contains(item.getRegistryName().getPath()); }
|
||||
|
||||
public static boolean withExperimental()
|
||||
{ return with_experimental_features_; }
|
||||
|
@ -592,26 +528,164 @@ public class ModConfig
|
|||
//--------------------------------------------------------------------------------------------------------------------
|
||||
// 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();
|
||||
public static boolean without_crafting_table = false;
|
||||
public static boolean immersiveengineering_installed = false;
|
||||
public static boolean with_creative_mode_device_drops = false;
|
||||
private static HashSet<String> optouts_ = new HashSet<>();
|
||||
private static boolean with_experimental_features_ = 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.
|
||||
{ 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()
|
||||
{
|
||||
without_crafting_table = isOptedOut(ModContent.TREATED_WOOD_CRAFTING_TABLE);
|
||||
immersiveengineering_installed = Auxiliaries.isModLoaded("immersiveengineering");
|
||||
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_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());
|
||||
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());
|
||||
|
@ -626,34 +700,15 @@ public class ModConfig
|
|||
EdSlabSliceBlock.on_config(!COMMON.without_direct_slab_pickup.get());
|
||||
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.
|
||||
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());
|
||||
{
|
||||
String s = String.join(",", optouts_);
|
||||
server_config_.putString("optout", s);
|
||||
if(!s.isEmpty()) LOGGER.info("Opt-outs:" + s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ package wile.engineersdecor;
|
|||
|
||||
|
||||
import wile.engineersdecor.blocks.*;
|
||||
import wile.engineersdecor.libmc.blocks.StandardBlocks.BaseBlock;
|
||||
import wile.engineersdecor.libmc.detail.Auxiliaries;
|
||||
import wile.engineersdecor.libmc.blocks.StandardBlocks;
|
||||
import net.minecraft.util.Direction;
|
||||
|
@ -44,6 +45,7 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
@ -713,12 +715,12 @@ public class ModContent
|
|||
HALFSLAB_REBARCONCRETE,
|
||||
HALFSLAB_GASCONCRETE,
|
||||
HALFSLAB_CONCRETE,
|
||||
//HALFSLAB_TREATEDWOOD,
|
||||
//HALFSLAB_SHEETMETALIRON,
|
||||
//HALFSLAB_SHEETMETALSTEEL,
|
||||
//HALFSLAB_SHEETMETALCOPPER,
|
||||
//HALFSLAB_SHEETMETALGOLD,
|
||||
//HALFSLAB_SHEETMETALALUMINIUM,
|
||||
HALFSLAB_TREATEDWOOD,
|
||||
HALFSLAB_SHEETMETALIRON,
|
||||
HALFSLAB_SHEETMETALSTEEL,
|
||||
HALFSLAB_SHEETMETALCOPPER,
|
||||
HALFSLAB_SHEETMETALGOLD,
|
||||
HALFSLAB_SHEETMETALALUMINIUM,
|
||||
CONCRETE_WALL,
|
||||
PANZERGLASS_BLOCK,
|
||||
PANZERGLASS_SLAB,
|
||||
|
@ -949,10 +951,25 @@ public class ModContent
|
|||
public static List<Block> getRegisteredBlocks()
|
||||
{ return Collections.unmodifiableList(registeredBlocks); }
|
||||
|
||||
@Nonnull
|
||||
public static List<Item> getRegisteredItems()
|
||||
{ return new ArrayList<>(); }
|
||||
|
||||
public static final void registerBlocks(final RegistryEvent.Register<Block> event)
|
||||
{
|
||||
if(Auxiliaries.isModLoaded("immersiveengineering")) Auxiliaries.logInfo("Immersive Engineering also installed ...");
|
||||
registeredBlocks.addAll(allBlocks());
|
||||
boolean ie_available = Auxiliaries.isModLoaded("immersiveengineering");
|
||||
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);
|
||||
Auxiliaries.logInfo("Registered " + Integer.toString(registeredBlocks.size()) + " blocks.");
|
||||
}
|
||||
|
|
|
@ -123,7 +123,7 @@ public class EdElectricalFurnace
|
|||
public static final int HEAT_INCREMENT = 20;
|
||||
public static final int MAX_ENERGY_TRANSFER = 1024;
|
||||
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 SMELTING_INPUT_SLOT_NO = 0;
|
||||
public static final int SMELTING_AUX_SLOT_NO = 1;
|
||||
|
@ -196,7 +196,7 @@ public class EdElectricalFurnace
|
|||
proc_time_needed_ = nbt.getInt("CookTimeTotal");
|
||||
energy_stored_ = nbt.getInt("Energy");
|
||||
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)
|
||||
|
@ -205,7 +205,7 @@ public class EdElectricalFurnace
|
|||
nbt.putInt("CookTime", MathHelper.clamp(proc_time_elapsed_, 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("SpeedSetting", MathHelper.clamp(speed_, -1, MAX_SPEED_SETTING));
|
||||
nbt.putInt("SpeedSetting", MathHelper.clamp(speed_, 0, MAX_SPEED_SETTING));
|
||||
ItemStackHelper.saveAllItems(nbt, stacks_);
|
||||
}
|
||||
|
||||
|
@ -492,7 +492,7 @@ public class EdElectricalFurnace
|
|||
} else if(energy_stored_ >= (MAX_ENERGY_BUFFER/2)) {
|
||||
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();
|
||||
updateCurrentRecipe();
|
||||
if(currentRecipe() != last_recipe) {
|
||||
|
@ -769,7 +769,7 @@ public class EdElectricalFurnace
|
|||
{
|
||||
if(!(inventory_ instanceof ElectricalFurnaceTileEntity)) return;
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,10 +17,14 @@ import mezz.jei.api.registration.IRecipeTransferRegistration;
|
|||
import mezz.jei.api.constants.VanillaTypes;
|
||||
import mezz.jei.api.runtime.IJeiRuntime;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@mezz.jei.api.JeiPlugin
|
||||
public class JEIPlugin implements mezz.jei.api.IModPlugin
|
||||
|
@ -48,15 +52,21 @@ public class JEIPlugin implements mezz.jei.api.IModPlugin
|
|||
@Override
|
||||
public void onRuntimeAvailable(IJeiRuntime jeiRuntime)
|
||||
{
|
||||
List<ItemStack> blacklisted = new ArrayList<>();
|
||||
HashSet<Item> blacklisted = new HashSet<>();
|
||||
for(Block e: ModContent.getRegisteredBlocks()) {
|
||||
if(ModConfig.isOptedOut(e)) {
|
||||
blacklisted.add(new ItemStack(e.asItem()));
|
||||
if(ModConfig.isOptedOut(e) && (e.asItem().getRegistryName().getPath()).equals((e.getRegistryName().getPath()))) {
|
||||
blacklisted.add(e.asItem());
|
||||
}
|
||||
}
|
||||
for(Item e: ModContent.getRegisteredItems()) {
|
||||
if(ModConfig.isOptedOut(e) && (!(e instanceof BlockItem))) {
|
||||
blacklisted.add(e);
|
||||
}
|
||||
}
|
||||
if(!blacklisted.isEmpty()) {
|
||||
List<ItemStack> blacklist = blacklisted.stream().map(ItemStack::new).collect(Collectors.toList());
|
||||
try {
|
||||
jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(VanillaTypes.ITEM, blacklisted);
|
||||
jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(VanillaTypes.ITEM, blacklist);
|
||||
} catch(Exception e) {
|
||||
ModEngineersDecor.logger().warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI optout processing.");
|
||||
}
|
||||
|
|
|
@ -10,10 +10,12 @@ package wile.engineersdecor.libmc.detail;
|
|||
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.inventory.ItemStackHelper;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
@ -86,7 +88,9 @@ public class Inventories
|
|||
}
|
||||
|
||||
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
|
||||
{
|
||||
|
@ -138,7 +142,7 @@ public class Inventories
|
|||
for(int i = start_slot; i < end_slot; ++i) {
|
||||
final int sno = reverse ? (end_slot-1-i) : (i);
|
||||
final ItemStack stack = inventory.getStackInSlot(sno);
|
||||
if(stack.isEmpty() || (!inventory.isItemValidForSlot(sno, mvstack))) {
|
||||
if(stack.isEmpty()) {
|
||||
empties[sno] = true;
|
||||
} else if(areItemStacksIdentical(stack, mvstack)) {
|
||||
matches[sno] = true;
|
||||
|
@ -148,7 +152,7 @@ public class Inventories
|
|||
// first iteration: fillup existing stacks
|
||||
for(int i = start_slot; i < end_slot; ++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);
|
||||
int nmax = Math.min(limit_left, stack.getMaxStackSize() - stack.getCount());
|
||||
if(mvstack.getCount() <= nmax) {
|
||||
|
@ -180,7 +184,7 @@ public class Inventories
|
|||
}
|
||||
for(i=insert_start;i < insert_end; ++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());
|
||||
ItemStack moved = mvstack.copy();
|
||||
moved.setCount(nmax);
|
||||
|
@ -195,7 +199,7 @@ public class Inventories
|
|||
final int sno = reverse ? (end_slot-1-i) : (i);
|
||||
if(!matches[sno]) continue;
|
||||
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());
|
||||
ItemStack moved = mvstack.copy();
|
||||
moved.setCount(nmax);
|
||||
|
@ -209,7 +213,7 @@ public class Inventories
|
|||
// third iteration: use any empty slots
|
||||
for(int i = start_slot; i < end_slot; ++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());
|
||||
ItemStack placed = mvstack.copy();
|
||||
placed.setCount(nmax);
|
||||
|
@ -303,4 +307,33 @@ public class Inventories
|
|||
{ 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); }
|
||||
|
||||
}
|
||||
|
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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"}}
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue