From a847e1827ab7ecc8413cb3add709b972f20aa1cf Mon Sep 17 00:00:00 2001 From: stfwi Date: Tue, 16 Apr 2019 22:03:41 +0200 Subject: [PATCH 01/15] Crafting table: History refab and JEI integration. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 8 + .../blocks/BlockDecorCraftingTable.java | 640 +++++++++++++++--- .../wile/engineersdecor/detail/ModConfig.java | 11 +- .../engineersdecor/eapi/jei/JEIPlugin.java | 23 +- .../treated_wood_crafting_table_front.png | Bin 516 -> 521 bytes .../treated_wood_crafting_table_side.png | Bin 483 -> 489 bytes .../treated_wood_crafting_table_top.png | Bin 601 -> 604 bytes .../treated_wood_crafting_table_tray.png | Bin 529 -> 532 bytes .../blocks/furnace/small_lab_furnace_back.png | Bin 574 -> 550 bytes .../furnace/small_lab_furnace_bottom.png | Bin 504 -> 489 bytes .../furnace/small_lab_furnace_front.png | Bin 534 -> 518 bytes .../small_lab_furnace_front_gloom_off.png | Bin 537 -> 184 bytes .../small_lab_furnace_front_gloom_on.png | Bin 667 -> 693 bytes .../furnace/small_lab_furnace_handles.png | Bin 417 -> 399 bytes .../blocks/furnace/small_lab_furnace_left.png | Bin 557 -> 533 bytes .../furnace/small_lab_furnace_right.png | Bin 550 -> 539 bytes .../blocks/furnace/small_lab_furnace_top.png | Bin 515 -> 503 bytes .../gui/treated_wood_crafting_table.png | Bin 25665 -> 27102 bytes meta/update.json | 3 +- 21 files changed, 605 insertions(+), 85 deletions(-) diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 44450e2..a1820e4 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.3 +version_engineersdecor=1.0.4-b1 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index f4ccff1..7748218 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b1": "[A] Crafting table: JEI integration for recipe placement added.\n[A] Crafting table: History re-fab added, allowing to quickly select and re-craft recent recipes. Selection with arrow buttons, ingredient placement by clicking the result slot. Automatic item distribution on shift-click. Quick-move buttons.\n[F] Crafting table textures modified to prevent optifine glitches on the edges of the legs.", "1.0.3": "[R] Release based on v1.0.3-b5. Release-to-release changes: * Small laboratory furnace added. * Extensive config options for mod packing and tuning added. * Rendering issues fixes (window bleeding, optifine). * Steel framed window added. * Treated wood pole \"end pieces\" added (two support variants). * Sitting on treated wood stool added including mobs (but not villagers, as these are obviously very upright people). * Lang ru_ru added (github contribution from Yaroslavik). * Creative tab logo changed to mod logo. * Table/crafting table bounding boxes refined. * Standalone \"escape\" recipes added if IE is not installed.", "1.0.3-b5": "[F] Fixed typo in en-en lang file.\n[F] Fixed IE concrete texture missing bailout in log if IE is not installed.\n[F] Using forge multi-layer models for windows to circumvent glitches.\n[M] Changed creative tab logo to the mod logo.\n[A] Added alternative recipes for crafting table and furnace if main IE ingredients are missing (for \"stand-alone\" mod usage).", "1.0.3-b4": "[A] Lab furnace supports electrical speedup when a IE external is placed in one of the two auxiliary slots.\n[F] Fixed window rendering issue (issue #15, thanks to ILLOMIURGE).\n[M] Updated ru_ru lang file (Yaroslavik).", @@ -24,6 +25,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.3" + "1.12.2-latest": "1.0.4-b1" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index d307c08..c3d1e3e 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,14 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b1 [A] Crafting table: JEI integration for recipe placement added. + [A] Crafting table: History re-fab added, allowing to quickly select + and re-craft recent recipes. Selection with arrow buttons, + ingredient placement by clicking the result slot. Automatic + item distribution on shift-click. Quick-move buttons. + [F] Crafting table textures modified to prevent optifine glitches + on the edges of the legs. + ------------------------------------------------------------------- - v1.0.3 [R] Release based on v1.0.3-b5. Release-to-release changes: * Small laboratory furnace added. diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java index d9a7d74..c7e4f87 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java @@ -9,7 +9,6 @@ */ package wile.engineersdecor.blocks; -import net.minecraft.client.gui.GuiButtonImage; import wile.engineersdecor.ModEngineersDecor; import net.minecraft.block.Block; import net.minecraft.block.SoundType; @@ -25,6 +24,8 @@ import net.minecraft.inventory.*; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.init.Items; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.*; @@ -37,8 +38,11 @@ import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiButtonImage; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.registries.IForgeRegistry; import com.google.common.collect.ImmutableList; import wile.engineersdecor.detail.Networking; import javax.annotation.Nonnull; @@ -51,10 +55,14 @@ import java.util.List; public class BlockDecorCraftingTable extends BlockDecorDirected { public static boolean with_assist = true; + public static boolean with_assist_direct_history_refab = false; + public static boolean with_assist_quickmove_buttons = false; - public static final void on_config(boolean without_crafting_assist) + public static final void on_config(boolean without_crafting_assist, boolean with_assist_immediate_history_refab, boolean with_quickmove_buttons) { with_assist = !without_crafting_assist; + with_assist_direct_history_refab = with_assist_immediate_history_refab; + with_assist_quickmove_buttons = with_quickmove_buttons; CraftingHistory.max_history_size(32); } @@ -157,11 +165,15 @@ public class BlockDecorCraftingTable extends BlockDecorDirected private static class CraftingHistory { + public static final int RESULT_STACK_INDEX = 0; + public static final int INPUT_STACKS_BEGIN = 1; public static final List NOTHING = new ArrayList(); + private static int max_history_size_ = 5; private List history_ = new ArrayList(); private int current_ = -1; - private static int max_history_size_ = 5; + private List current_stacks_ = new ArrayList(); + private IRecipe current_recipe_ = null; public CraftingHistory() {} @@ -186,6 +198,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected } } current_ = (!subsect.hasKey("current")) ? (-1) : MathHelper.clamp(subsect.getInteger("current"), -1, history_.size()-1); + update_current(); } catch(Throwable ex) { ModEngineersDecor.logger.error("Exception reading crafting table history NBT, resetting, exception is:" + ex.getMessage()); clear(); @@ -201,27 +214,39 @@ public class BlockDecorCraftingTable extends BlockDecorDirected } public void clear() - { current_ = -1; history_.clear(); } + { reset_current(); history_.clear(); } - public void reset_curent() - { current_ = -1; } + public void reset_current() + { current_ = -1; current_stacks_ = NOTHING; current_recipe_ = null; } - public void add(final List grid_stacks) + void update_current() { - if(!with_assist) { clear(); return; } - String s = stacks2str(grid_stacks); - if(s.isEmpty()) return; - history_.removeIf(e->e.equals(s)); - history_.add(s); - while(history_.size() > max_history_size()) history_.remove(0); - if(current_ >= history_.size()) current_ = -1; + if((current_ < 0) || (current_ >= history_.size())) { reset_current(); return; } + Tuple> data = str2stacks(history_.get(current_)); + if(data == null) { reset_current(); return; } + current_recipe_ = data.getFirst(); + current_stacks_ = data.getSecond(); } - public String stacks2str(final List grid_stacks) + public void add(final List grid_stacks, IRecipe recipe) { - if((grid_stacks==null) || (grid_stacks.size() != 10)) return ""; + if(!with_assist) { clear(); return; } + String s = stacks2str(grid_stacks, recipe); + String recipe_filter = recipe.getRegistryName().toString() + ";"; + if(s.isEmpty()) return; + history_.removeIf(e->e.equals(s)); + history_.removeIf(e->e.startsWith(recipe_filter)); + history_.add(s); + while(history_.size() > max_history_size()) history_.remove(0); + if(current_ >= history_.size()) reset_current(); + } + + public String stacks2str(final List grid_stacks, IRecipe recipe) + { + if((grid_stacks==null) || (grid_stacks.size() != 10) || (recipe==null)) return ""; if(grid_stacks.get(0).isEmpty()) return ""; final ArrayList items = new ArrayList(); + items.add(recipe.getRegistryName().toString().trim()); for(ItemStack st:grid_stacks) { int meta = st.getMetadata(); items.add( (st.isEmpty()) ? ("") : ((st.getItem().getRegistryName().toString().trim()) + ((meta==0)?(""):("/"+meta)) )); @@ -229,13 +254,21 @@ public class BlockDecorCraftingTable extends BlockDecorDirected return String.join(";", items); } - public List str2stacks(final String entry) + public @Nullable Tuple> str2stacks(final String entry) { try { - if((entry == null) || (entry.isEmpty())) return NOTHING; + if((entry == null) || (entry.isEmpty())) return null; ArrayList item_regnames = new ArrayList(Arrays.asList(entry.split("[;]"))); - if((item_regnames == null) || (item_regnames.size() > 10)) return NOTHING; - while(item_regnames.size() < 10) item_regnames.add(""); + if((item_regnames == null) || (item_regnames.size() < 2) || (item_regnames.size() > 11)) return null; + while(item_regnames.size() < 11) item_regnames.add(""); + IRecipe recipe = null; + try { + final IForgeRegistry recipe_registry = GameRegistry.findRegistry(IRecipe.class); + recipe = recipe_registry.getValue(new ResourceLocation(item_regnames.remove(0))); + } catch(Throwable e) { + ModEngineersDecor.logger.error("Recipe lookup failed: " + e.getMessage()); + } + if(recipe==null) return null; List stacks = new ArrayList(); for(String regname : item_regnames) { ItemStack stack = ItemStack.EMPTY; @@ -244,42 +277,54 @@ public class BlockDecorCraftingTable extends BlockDecorDirected if(regname.indexOf('/') >= 0) { String[] itemdetails = regname.split("[/]"); if(itemdetails.length>0) regname = itemdetails[0]; - try { if(itemdetails.length>1) meta = Integer.parseInt(itemdetails[1]); } catch(Throwable e){meta=0;} // ignore exception here + if(itemdetails.length>1) try { meta=Integer.parseInt(itemdetails[1]); } catch(Throwable e){ meta=0; } // ignore exception here } final Item item = Item.REGISTRY.getObject(new ResourceLocation(regname)); stack = ((item == null) || (item == Items.AIR)) ? ItemStack.EMPTY : (new ItemStack(item, 1, meta)); } stacks.add(stack); } - if((stacks.size() != 10) || (stacks.get(0).isEmpty())) return NOTHING; // invalid size or no result - return stacks; + if((stacks.size() != 10) || (stacks.get(0).isEmpty())) return null; // invalid size or no result + return new Tuple>(recipe, stacks); } catch(Throwable ex) { ModEngineersDecor.logger.error("History stack building failed: " + ex.getMessage()); - return NOTHING; + return null; } } public List current() - { - if((current_ < 0) || (current_ >= history_.size())) { current_ = -1; return NOTHING; } - return str2stacks(history_.get(current_)); - } + { return current_stacks_; } + + public IRecipe current_recipe() + { return current_recipe_; } public void next() { - if(history_.isEmpty()) { current_ = -1; return; } - current_ = ((++current_) >= history_.size()) ? (-1) : (current_); + if(history_.isEmpty()) { + current_ = -1; + } else { + current_ = ((++current_) >= history_.size()) ? (-1) : (current_); + } + update_current(); } public void prev() { - if(history_.isEmpty()) { current_ = -1; return; } - current_ = ((--current_) < -1) ? (history_.size()-1) : (current_); + if(history_.isEmpty()) { + current_ = -1; + } else { + current_ = ((--current_) < -1) ? (history_.size()-1) : (current_); + } + update_current(); } + public void reset_selection() + { current_ = -1; update_current(); } + public String toString() { - StringBuilder s = new StringBuilder("{ current:" + current_ + ", elements:[ "); + String rec = (current_recipe_==null) ? "none" : (current_recipe_.getRegistryName().toString()); + StringBuilder s = new StringBuilder("{ current:" + current_ + ", recipe:'" + rec + "', elements:[ "); for(int i=0; i buttons = new ArrayList(); + protected final boolean history_slot_tooltip[] = {false,false,false,false,false,false,false,false,false,false}; public BGui(InventoryPlayer playerInventory, World world, BlockPos pos, BTileEntity te) - { super(new BContainer(playerInventory, world, pos, te)); this.te = te; } + { super(new BContainer(playerInventory, world, pos, te)); this.te = te; this.player=playerInventory.player; } @Override @SuppressWarnings("unused") @@ -315,12 +366,15 @@ public class BlockDecorCraftingTable extends BlockDecorDirected final int x0=((width - xSize)/2), y0=((height - ySize)/2); buttons.clear(); if(with_assist) { - buttons.add(addButton(new GuiButtonImage(BUTTON_NEXT, x0+156,y0+44, 12,12, 194,44, 12, BACKGROUND))); - buttons.add(addButton(new GuiButtonImage(BUTTON_PREV, x0+156,y0+30, 12,12, 180,30, 12, BACKGROUND))); - // buttons.add(addButton(new GuiButtonImage(BUTTON_FROM_STORAGE, x0+49,y0+34, 9,17, 219,34, 17, BACKGROUND))); - // buttons.add(addButton(new GuiButtonImage(BUTTON_TO_STORAGE, x0+49,y0+52, 9,17, 208,16, 17, BACKGROUND))); - // buttons.add(addButton(new GuiButtonImage(BUTTON_FROM_PLAYER, x0+77,y0+71, 17,9, 198,71, 9, BACKGROUND))); - // buttons.add(addButton(new GuiButtonImage(BUTTON_TO_PLAYER, x0+59,y0+71, 17,9, 180,71, 9, BACKGROUND))); + buttons.add(addButton(new GuiButtonImage(BUTTON_NEXT, x0+158,y0+44, 12,12, 194,44, 12, BACKGROUND))); + buttons.add(addButton(new GuiButtonImage(BUTTON_PREV, x0+158,y0+30, 12,12, 180,30, 12, BACKGROUND))); + buttons.add(addButton(new GuiButtonImage(BUTTON_CLEAR_GRID, x0+158,y0+58, 12,12, 194,8, 12, BACKGROUND))); + if(with_assist_quickmove_buttons) { + buttons.add(addButton(new GuiButtonImage(BUTTON_FROM_STORAGE, x0+49, y0+34, 9,17, 219,34, 17, BACKGROUND))); + buttons.add(addButton(new GuiButtonImage(BUTTON_TO_STORAGE, x0+49, y0+52, 9,17, 208,16, 17, BACKGROUND))); + buttons.add(addButton(new GuiButtonImage(BUTTON_FROM_PLAYER, x0+77, y0+71, 17,9, 198,71, 9, BACKGROUND))); + buttons.add(addButton(new GuiButtonImage(BUTTON_TO_PLAYER, x0+59, y0+71, 17,9, 180,71, 9, BACKGROUND))); + } } } @@ -332,6 +386,26 @@ public class BlockDecorCraftingTable extends BlockDecorDirected renderHoveredToolTip(mouseX, mouseY); } + @Override + protected void renderHoveredToolTip(int mouseX, int mouseY) + { + if((!player.inventory.getItemStack().isEmpty()) || (getSlotUnderMouse() == null)) return; + final Slot slot = getSlotUnderMouse(); + if(!slot.getStack().isEmpty()) { renderToolTip(slot.getStack(), mouseX, mouseY); return; } + if(with_assist) { + int hist_index = -1; + if(slot instanceof BSlotCrafting) { + hist_index = 0; + } else if(slot.inventory instanceof BInventoryCrafting) { + hist_index = slot.getSlotIndex() + 1; + } + if((hist_index < 0) || (hist_index >= history_slot_tooltip.length)) return; + if(!history_slot_tooltip[hist_index]) return; + ItemStack hist_stack = te.history.current().get(hist_index); + if(!hist_stack.isEmpty()) renderToolTip(hist_stack, mouseX, mouseY); + } + } + @Override protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { @@ -340,14 +414,15 @@ public class BlockDecorCraftingTable extends BlockDecorDirected final int x0=((width - xSize)/2), y0=((height - ySize)/2); drawTexturedModalRect(x0, y0, 0, 0, xSize, ySize); if(with_assist) { + for(int i=0; i crafting_template = te.history.current(); if((crafting_template == null) || (crafting_template.isEmpty())) return; - if(inventorySlots.getSlot(0).getHasStack()) return; { int i = 0; for(Tuple e : ((BContainer) inventorySlots).CRAFTING_SLOT_POSITIONS) { + if(i==0) continue; // explicitly here, that is the result slot. if((inventorySlots.getSlot(i).getHasStack())) { - if(!inventorySlots.getSlot(i).getStack().getItem().equals(crafting_template.get(i).getItem())) { + if(!inventorySlots.getSlot(i).getStack().isItemEqual(crafting_template.get(i))) { return; // user has placed another recipe } } @@ -358,7 +433,14 @@ public class BlockDecorCraftingTable extends BlockDecorDirected int i = 0; for(Tuple e : ((BContainer) inventorySlots).CRAFTING_SLOT_POSITIONS) { final ItemStack stack = crafting_template.get(i); - if(!stack.isEmpty()) drawTemplateItemAt(stack, x0, y0, e.getFirst(), e.getSecond()); + if(!stack.isEmpty()) { + if(!inventorySlots.getSlot(i).getHasStack()) history_slot_tooltip[i] = true; + if((i==0) && inventorySlots.getSlot(i).getStack().isItemEqual(crafting_template.get(i))) { + continue; // don't shade the output slot if the result can be crafted. + } else { + drawTemplateItemAt(stack, x0, y0, e.getFirst(), e.getSecond()); + } + } ++i; } } @@ -367,9 +449,10 @@ public class BlockDecorCraftingTable extends BlockDecorDirected protected void drawTemplateItemAt(ItemStack stack, int x0, int y0, int x, int y) { + final float main_zl = zLevel; RenderHelper.disableStandardItemLighting(); RenderHelper.enableGUIStandardItemLighting(); - float zl = itemRender.zLevel; + final float zl = itemRender.zLevel; itemRender.zLevel = -50; itemRender.renderItemIntoGUI(stack, x0+x, y0+y); itemRender.zLevel = zl; @@ -377,7 +460,9 @@ public class BlockDecorCraftingTable extends BlockDecorDirected GlStateManager.color(0.7f, 0.7f, 0.7f, 0.8f); mc.getTextureManager().bindTexture(BACKGROUND); drawTexturedModalRect(x0+x, y0+y, x, y, 16, 16); + RenderHelper.enableGUIStandardItemLighting(); RenderHelper.enableStandardItemLighting(); + zLevel = main_zl; } @Override @@ -386,17 +471,58 @@ public class BlockDecorCraftingTable extends BlockDecorDirected switch(button.id) { case BUTTON_NEXT: case BUTTON_PREV: + case BUTTON_CLEAR_GRID: case BUTTON_FROM_STORAGE: case BUTTON_TO_STORAGE: case BUTTON_FROM_PLAYER: - case BUTTON_TO_PLAYER: { + case BUTTON_TO_PLAYER: + case ACTION_PLACE_CURRENT_HISTORY_SEL: { NBTTagCompound nbt = new NBTTagCompound(); - nbt.setInteger("button", button.id); + nbt.setInteger("action", button.id); Networking.PacketTileNotify.sendToServer(te, nbt); break; } } } + + @Override + protected void handleMouseClick(Slot slot, int slotId, int mouseButton, ClickType type) + { + if(type == ClickType.PICKUP) { + boolean place_refab = (slot instanceof BSlotCrafting) && (!slot.getHasStack()); + if(place_refab && with_assist_direct_history_refab) onHistoryItemPlacement(); // place before crafting -> direct item pick + super.handleMouseClick(slot, slotId, mouseButton, type); + if(place_refab && (!with_assist_direct_history_refab)) onHistoryItemPlacement(); // place after crafting -> confirmation first + return; + } + if((type == ClickType.QUICK_MOVE) && (slotId > 9) && (slot.getHasStack())) { // container slots 0..9 are crafting output and grid + List history = te.history.current(); + boolean palce_in_crafting_grid = (!history.isEmpty()); + if(!palce_in_crafting_grid) { + for(int i=0; i<9; ++i) { + if(!(te.getStackInSlot(i).isEmpty())) { palce_in_crafting_grid = true; break; } + } + } + if(palce_in_crafting_grid) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("action", ACTION_PLACE_SHIFTCLICKED_STACK); + nbt.setInteger("containerslot", slotId); + Networking.PacketTileNotify.sendToServer(te, nbt); + return; + } + } + super.handleMouseClick(slot, slotId, mouseButton, type); + } + + private void onHistoryItemPlacement() + { + if(te.history.current().isEmpty()) return; + final Slot resultSlot = this.getSlotUnderMouse(); // double check + if(!(resultSlot instanceof BSlotCrafting)) return; + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("action", ACTION_PLACE_CURRENT_HISTORY_SEL); + Networking.PacketTileNotify.sendToServer(te, nbt); + } } //-------------------------------------------------------------------------------------------------------------------- @@ -415,11 +541,12 @@ public class BlockDecorCraftingTable extends BlockDecorDirected protected void onCrafting(ItemStack stack) { if((with_assist) && ((player.world!=null) && (!(player.world.isRemote))) && (!stack.isEmpty())) { + final IRecipe recipe = ((InventoryCraftResult)this.inventory).getRecipeUsed(); final ArrayList grid = new ArrayList(); grid.add(stack); for(int i = 0; i < 9; ++i) grid.add(te.stacks.get(i)); - te.history.add(grid); - te.history.reset_curent(); + te.history.add(grid, recipe); + te.history.reset_current(); te.syncHistory(player); } super.onCrafting(stack); @@ -430,7 +557,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected // Crafting container //-------------------------------------------------------------------------------------------------------------------- - private static class BContainer extends Container + public static class BContainer extends Container { private final World world; private final BlockPos pos; @@ -449,28 +576,33 @@ public class BlockDecorCraftingTable extends BlockDecorDirected this.te = te; craftMatrix = new BInventoryCrafting(this, te); craftMatrix.openInventory(player); + // container slotId 0 === crafting output addSlotToContainer(new BSlotCrafting(te, playerInventory.player, craftMatrix, craftResult, 0, 134, 35)); slotpositions.add(new Tuple<>(134, 35)); + // container slotId 1..9 === TE slots 0..8 for(int y=0; y<3; ++y) { for(int x=0; x<3; ++x) { int xpos = 60+x*18; int ypos = 17+y*18; - addSlotToContainer(new Slot(craftMatrix, x+y*3, xpos, ypos)); // block slots 0..8 + addSlotToContainer(new Slot(craftMatrix, x+y*3, xpos, ypos)); slotpositions.add(new Tuple<>(xpos, ypos)); } } CRAFTING_SLOT_POSITIONS = ImmutableList.copyOf(slotpositions); + // container slotId 10..36 === player slots: 9..35 for(int y=0; y<3; ++y) { - for (int x=0; x<9; ++x) { - addSlotToContainer(new Slot(playerInventory, x+y*9+9, 8+x*18, 86+y*18)); // player slots: 9..35 + for(int x=0; x<9; ++x) { + addSlotToContainer(new Slot(playerInventory, x+y*9+9, 8+x*18, 86+y*18)); } } + // container slotId 37..45 === player slots: 0..8 for(int x=0; x<9; ++x) { - addSlotToContainer(new Slot(playerInventory, x, 8+x*18, 144)); // player slots: 0..8 + addSlotToContainer(new Slot(playerInventory, x, 8+x*18, 144)); } + // container slotId 46..53 === TE slots 9..17 (storage) for(int y=0; y<4; ++y) { - for (int x=0; x<2; ++x) { - addSlotToContainer(new Slot(craftMatrix, x+y*2+9, 8+x*18, 9+y*18)); // block slots 9..17 + for(int x=0; x<2; ++x) { + addSlotToContainer(new Slot(craftMatrix, x+y*2+9, 8+x*18, 9+y*18)); } } onCraftMatrixChanged(craftMatrix); @@ -541,6 +673,9 @@ public class BlockDecorCraftingTable extends BlockDecorDirected } return stack; } + + public void setCraftingMatrixSlot(int slot_index, ItemStack stack) + { craftMatrix.setInventorySlotContents(slot_index, stack.copy()); } } //-------------------------------------------------------------------------------------------------------------------- @@ -599,7 +734,9 @@ public class BlockDecorCraftingTable extends BlockDecorDirected //-------------------------------------------------------------------------------------------------------------------- public static class BTileEntity extends TileEntity implements IInventory, Networking.IPacketReceiver { + public static final int CRAFTING_SLOTS_BEGIN = 0; public static final int NUM_OF_CRAFTING_SLOTS = 9; + public static final int STORAGE_SLOTS_BEGIN = NUM_OF_CRAFTING_SLOTS; public static final int NUM_OF_STORAGE_SLOTS = 8; public static final int NUM_OF_SLOTS = NUM_OF_CRAFTING_SLOTS+NUM_OF_STORAGE_SLOTS; protected NonNullList stacks; @@ -625,35 +762,384 @@ public class BlockDecorCraftingTable extends BlockDecorDirected history.write(compound); } + // private aux methods --------------------------------------------------------------------- + + private boolean itemstack_recipe_match(ItemStack grid_stack, ItemStack history_stack) + { + if(history.current_recipe()!=null) { + boolean grid_match, dist_match; + for(final Ingredient ingredient:history.current_recipe().getIngredients()) { + grid_match = false; dist_match = false; + for(final ItemStack match:ingredient.getMatchingStacks()) { + if(match.isItemEqualIgnoreDurability(grid_stack)) dist_match = true; + if(match.isItemEqualIgnoreDurability(history_stack)) grid_match = true; + if(dist_match && grid_match) return true; + } + } + } + return false; + } + + private List crafting_slot_stacks_to_add() + { + final ArrayList slots = new ArrayList(); + final List tocraft = history.current(); + final int stack_sizes[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; + if(tocraft.isEmpty()) return slots; + for(int i=0; i<9; ++i) { + if((i+CraftingHistory.INPUT_STACKS_BEGIN) >= tocraft.size()) break; + final ItemStack needed = tocraft.get(i+CraftingHistory.INPUT_STACKS_BEGIN); + final ItemStack palced = getStackInSlot(i+CRAFTING_SLOTS_BEGIN); + if(needed.isEmpty() && (!palced.isEmpty())) return slots; // history vs grid mismatch. + if((!palced.isEmpty()) && (!itemstack_recipe_match(needed, palced))) return slots; // also mismatch + if(!needed.isEmpty()) stack_sizes[i] = palced.getCount(); + } + int min_placed = 64, max_placed=0; + for(int i=0; i<9; ++i) { // todo: check if java has something like std::accumulate<>() + if(stack_sizes[i] < 0) continue; + min_placed = Math.min(min_placed, stack_sizes[i]); + max_placed = Math.max(max_placed, stack_sizes[i]); + } + int fillup_size = (max_placed <= min_placed) ? (min_placed + 1) : max_placed; + for(int i=0; i<9; ++i) { + if(stack_sizes[i] < 0) continue; + if(fillup_size > getStackInSlot(i+CRAFTING_SLOTS_BEGIN).getMaxStackSize()) return slots; // can't fillup all + } + for(int i=0; i<9; ++i) { + if(stack_sizes[i] < 0) { + slots.add(ItemStack.EMPTY); + } else { + ItemStack st = getStackInSlot(i+CRAFTING_SLOTS_BEGIN).copy(); + if(st.isEmpty()) { + st = tocraft.get(i+CraftingHistory.INPUT_STACKS_BEGIN).copy(); + st.setCount(Math.min(st.getMaxStackSize(), fillup_size)); + } else { + st.setCount(MathHelper.clamp(fillup_size-st.getCount(), 0, st.getMaxStackSize())); + } + slots.add(st); + } + } + return slots; + } + + /** + * Moves as much items from the stack to the slots in range [first_slot, last_slot] of the inventory, + * filling up existing stacks first, then (player inventory only) checks appropriate empty slots next + * to stacks that have that item already, and last uses any empty slot that can be found. + * Returns the stack that is still remaining in the referenced `stack`. + */ + private ItemStack move_stack_to_inventory(final ItemStack stack_to_move, IInventory inventory, final int slot_begin, final int slot_end, boolean only_fillup) + { + final ItemStack mvstack = stack_to_move.copy(); + if((mvstack.isEmpty()) || (slot_begin < 0) || (slot_end > inventory.getSizeInventory())) return mvstack; + // first iteration: fillup existing stacks + for(int i = slot_begin; i < slot_end; ++i) { + final ItemStack stack = inventory.getStackInSlot(i); + if((stack.isEmpty()) || (!stack.isItemEqual(mvstack))) continue; + int nmax = stack.getMaxStackSize() - stack.getCount(); + if(mvstack.getCount() <= nmax) { + stack.setCount(stack.getCount()+mvstack.getCount()); + mvstack.setCount(0); + inventory.setInventorySlotContents(i, stack); + return mvstack; + } else { + stack.setCount(stack.getMaxStackSize()); + mvstack.shrink(nmax); + inventory.setInventorySlotContents(i, stack); + } + } + if(only_fillup) return mvstack; + if(inventory instanceof InventoryPlayer) { + // second iteration: use appropriate empty slots + for(int i = slot_begin+1; i < slot_end-1; ++i) { + final ItemStack stack = inventory.getStackInSlot(i); + if(!stack.isEmpty()) continue; + if((!inventory.getStackInSlot(i+1).isItemEqual(mvstack)) && (!inventory.getStackInSlot(i-1).isItemEqual(mvstack))) continue; + inventory.setInventorySlotContents(i, mvstack.copy()); + mvstack.setCount(0); + return mvstack; + } + } + // third iteration: use any empty slots + for(int i = slot_begin; i < slot_end; ++i) { + final ItemStack stack = inventory.getStackInSlot(i); + if(!stack.isEmpty()) continue; + inventory.setInventorySlotContents(i, mvstack.copy()); + mvstack.setCount(0); + return mvstack; + } + return mvstack; + } + + /** + * Moves as much items from the slots in range [first_slot, last_slot] of the inventory into a new stack. + * Implicitly shrinks the inventory stacks and the `request_stack`. + */ + private ItemStack move_stack_from_inventory(IInventory inventory, final ItemStack request_stack, final int slot_begin, final int slot_end) + { + ItemStack fetched_stack = request_stack.copy(); + fetched_stack.setCount(0); + int n_left = request_stack.getCount(); + while(n_left > 0) { + int smallest_stack_size = 0; + int smallest_stack_index = -1; + for(int i = slot_begin; i < slot_end; ++i) { + final ItemStack stack = inventory.getStackInSlot(i); + if((!stack.isEmpty()) && (stack.isItemEqual(request_stack))) { + // Never automatically place stuff with nbt (except a few allowed like "Damage"), + // as this could be a full crate, a valuable tool item, etc. For these recipes + // the user has to place this item manually. + if(stack.hasTagCompound()) { + final NBTTagCompound nbt = stack.getTagCompound(); + int n = stack.getTagCompound().getSize(); + if((n > 0) && (stack.getTagCompound().hasKey("Damage"))) --n; + if(n > 0) continue; + } + fetched_stack = stack.copy(); // copy exact stack with nbt and tool damage, otherwise we have an automagical repair of items. + fetched_stack.setCount(0); + int n = stack.getCount(); + if((n < smallest_stack_size) || (smallest_stack_size <= 0)) { + smallest_stack_size = n; + smallest_stack_index = i; + } + } + } + if(smallest_stack_index < 0) { + break; // no more items available + } else { + int n = Math.min(n_left, smallest_stack_size); + n_left -= n; + fetched_stack.grow(n); + ItemStack st = inventory.getStackInSlot(smallest_stack_index); + st.shrink(n); + inventory.setInventorySlotContents(smallest_stack_index, st); + } + } + return fetched_stack; + } + + private boolean clear_grid_to_storage(EntityPlayer player) + { + boolean changed = false; + for(int grid_i = CRAFTING_SLOTS_BEGIN; grid_i < (CRAFTING_SLOTS_BEGIN + NUM_OF_CRAFTING_SLOTS); ++grid_i) { + ItemStack stack = getStackInSlot(grid_i); + if(stack.isEmpty()) continue; + ItemStack remaining = move_stack_to_inventory(stack, this, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN+NUM_OF_STORAGE_SLOTS, false); + setInventorySlotContents(grid_i, remaining); + changed = true; + } + return changed; + } + + private boolean clear_grid_to_player(EntityPlayer player) + { + boolean changed = false; + for(int grid_i = CRAFTING_SLOTS_BEGIN; grid_i < (CRAFTING_SLOTS_BEGIN + NUM_OF_CRAFTING_SLOTS); ++grid_i) { + ItemStack remaining = getStackInSlot(grid_i); + if(remaining.isEmpty()) continue; + remaining = move_stack_to_inventory(remaining, player.inventory,9, 36, true); // prefer filling up inventory stacks + remaining = move_stack_to_inventory(remaining, player.inventory,0, 9, true); // then fill up the hotbar stacks + remaining = move_stack_to_inventory(remaining, player.inventory,9, 36, false); // then allow empty stacks in inventory + remaining = move_stack_to_inventory(remaining, player.inventory,0, 9, false); // then new stacks in the hotbar + this.setInventorySlotContents(grid_i, remaining); + changed = true; + } + return changed; + } + + enum EnumRefabPlacement { UNCHANGED, INCOMPLETE, PLACED } + private EnumRefabPlacement place_refab_stacks(IInventory inventory, final int slot_begin, final int slot_end) + { + List to_fill = crafting_slot_stacks_to_add(); + boolean slots_changed = false; + boolean missing_item = false; + int num_slots_placed = 0; + if(!to_fill.isEmpty()) { + for(int it_guard=63; it_guard>=0; --it_guard) { + boolean slots_updated = false; + for(int i = 0; i < 9; ++i) { + final ItemStack req_stack = to_fill.get(i).copy(); + if(req_stack.isEmpty()) continue; + req_stack.setCount(1); + to_fill.get(i).shrink(1); + final ItemStack mv_stack = move_stack_from_inventory(inventory, req_stack, slot_begin, slot_end); + if(mv_stack.isEmpty()) { missing_item=true; continue; } + // sizes already checked + ItemStack grid_stack = getStackInSlot(i + CRAFTING_SLOTS_BEGIN).copy(); + if(grid_stack.isEmpty()) { + grid_stack = mv_stack.copy(); + } else { + grid_stack.grow(mv_stack.getCount()); + } + setInventorySlotContents(i + CRAFTING_SLOTS_BEGIN, grid_stack); + slots_changed = true; + slots_updated = true; + } + if(!slots_updated) break; + } + } + if(!slots_changed) { + return EnumRefabPlacement.UNCHANGED; + } else if(missing_item) { + return EnumRefabPlacement.INCOMPLETE; + } else { + return EnumRefabPlacement.PLACED; + } + } + + private EnumRefabPlacement distribute_stack(IInventory inventory, final int slotno) + { + List to_refab = crafting_slot_stacks_to_add(); + ItemStack to_distribute = inventory.getStackInSlot(slotno).copy(); + if(to_distribute.isEmpty()) return EnumRefabPlacement.UNCHANGED; + int matching_grid_stack_sizes[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; + int max_matching_stack_size = -1; + int min_matching_stack_size = 65; + int total_num_missing_stacks = 0; + for(int i=0; i<9; ++i) { + final ItemStack grid_stack = getStackInSlot(i + CRAFTING_SLOTS_BEGIN); + final ItemStack refab_stack = to_refab.isEmpty() ? ItemStack.EMPTY : to_refab.get(i).copy(); + if((!grid_stack.isEmpty()) && (grid_stack.isItemEqual(to_distribute))) { + matching_grid_stack_sizes[i] = grid_stack.getCount(); + total_num_missing_stacks += grid_stack.getMaxStackSize()-grid_stack.getCount(); + if(max_matching_stack_size < matching_grid_stack_sizes[i]) max_matching_stack_size = matching_grid_stack_sizes[i]; + if(min_matching_stack_size > matching_grid_stack_sizes[i]) min_matching_stack_size = matching_grid_stack_sizes[i]; + } else if((!refab_stack.isEmpty()) && (refab_stack.isItemEqual(to_distribute))) { + matching_grid_stack_sizes[i] = 0; + total_num_missing_stacks += grid_stack.getMaxStackSize(); + if(max_matching_stack_size < matching_grid_stack_sizes[i]) max_matching_stack_size = matching_grid_stack_sizes[i]; + if(min_matching_stack_size > matching_grid_stack_sizes[i]) min_matching_stack_size = matching_grid_stack_sizes[i]; + } else if(grid_stack.isEmpty() && (!refab_stack.isEmpty())) { + if(itemstack_recipe_match(to_distribute, refab_stack)) { + matching_grid_stack_sizes[i] = 0; + total_num_missing_stacks += grid_stack.getMaxStackSize(); + if(max_matching_stack_size < matching_grid_stack_sizes[i]) max_matching_stack_size = matching_grid_stack_sizes[i]; + if(min_matching_stack_size > matching_grid_stack_sizes[i]) min_matching_stack_size = matching_grid_stack_sizes[i]; + } + } + } + if(min_matching_stack_size < 0) return EnumRefabPlacement.UNCHANGED; + final int stack_limit_size = Math.min(to_distribute.getMaxStackSize(), getInventoryStackLimit()); + if(min_matching_stack_size >= stack_limit_size) return EnumRefabPlacement.UNCHANGED; + int n_to_distribute = to_distribute.getCount(); + for(int it_guard=63; it_guard>=0; --it_guard) { + if(n_to_distribute <= 0) break; + for(int i=0; i<9; ++i) { + if(n_to_distribute <= 0) break; + if(matching_grid_stack_sizes[i] == min_matching_stack_size) { + ++matching_grid_stack_sizes[i]; + --n_to_distribute; + } + } + if(min_matching_stack_size < max_matching_stack_size) { + ++min_matching_stack_size; // distribute short stacks + } else { + ++min_matching_stack_size; // stacks even, increase all + max_matching_stack_size = min_matching_stack_size; + } + if(min_matching_stack_size >= stack_limit_size) break; // all full + } + if(n_to_distribute == to_distribute.getCount()) return EnumRefabPlacement.UNCHANGED; // was already full + if(n_to_distribute <= 0) { + inventory.setInventorySlotContents(slotno, ItemStack.EMPTY); + } else { + to_distribute.setCount(n_to_distribute); + inventory.setInventorySlotContents(slotno, to_distribute); + } + for(int i=0; i<9; ++i) { + if(matching_grid_stack_sizes[i] < 0) continue; + ItemStack grid_stack = getStackInSlot(i + CRAFTING_SLOTS_BEGIN).copy(); + if(grid_stack.isEmpty()) grid_stack = to_distribute.copy(); + grid_stack.setCount(matching_grid_stack_sizes[i]); + setInventorySlotContents(i + CRAFTING_SLOTS_BEGIN, grid_stack); + } + return EnumRefabPlacement.PLACED; + } + // Networking.IPacketReceiver -------------------------------------------------------------- @Override public void onClientPacketReceived(EntityPlayer player, NBTTagCompound nbt) { - if(with_assist && nbt.hasKey("button")) { - switch(nbt.getInteger("button")) { - case BGui.BUTTON_NEXT: + if((world.isRemote) || (!(player.openContainer instanceof BContainer))) return; + final BContainer container = (BContainer)player.openContainer; + if(container.te != this) return; + boolean te_changed = false; + boolean player_inventory_changed = false; + if(with_assist && nbt.hasKey("action")) { + switch(nbt.getInteger("action")) { + case BGui.BUTTON_NEXT: { history.next(); syncHistory(player); - break; - case BGui.BUTTON_PREV: + // implicitly clear the grid, so that the player can see the refab, and that no recipe is active. + if(clear_grid_to_player(player)) { te_changed = true; player_inventory_changed = true; } + if(clear_grid_to_storage(player)) te_changed = true; + } break; + case BGui.BUTTON_PREV: { history.prev(); syncHistory(player); - break; - case BGui.BUTTON_FROM_STORAGE: - //System.out.println("BUTTON_FROM_STORAGE"); - break; - case BGui.BUTTON_TO_STORAGE: - //System.out.println("BUTTON_TO_STORAGE"); - break; - case BGui.BUTTON_FROM_PLAYER: - //System.out.println("BUTTON_FROM_PLAYER"); - break; - case BGui.BUTTON_TO_PLAYER: - //System.out.println("BUTTON_TO_PLAYER"); - break; + if(clear_grid_to_player(player)) { te_changed = true; player_inventory_changed = true; } + if(clear_grid_to_storage(player)) te_changed = true; + } break; + case BGui.BUTTON_CLEAR_GRID: { + history.reset_selection(); + syncHistory(player); + if(clear_grid_to_player(player)) { te_changed = true; player_inventory_changed = true; } + if(clear_grid_to_storage(player)) te_changed = true; + } break; + case BGui.BUTTON_TO_STORAGE: { + if(clear_grid_to_storage(player)) te_changed = true; + } break; + case BGui.BUTTON_TO_PLAYER: { + if(clear_grid_to_player(player)) { te_changed = true; player_inventory_changed = true; } + } break; + case BGui.BUTTON_FROM_STORAGE: { + EnumRefabPlacement from_storage = place_refab_stacks(this, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN + NUM_OF_STORAGE_SLOTS); + if(from_storage != EnumRefabPlacement.UNCHANGED) te_changed = true; + } break; + case BGui.BUTTON_FROM_PLAYER: { + EnumRefabPlacement from_player_inv = place_refab_stacks(player.inventory, 9, 36); + if(from_player_inv != EnumRefabPlacement.UNCHANGED) { te_changed = true; player_inventory_changed = true; } + if(from_player_inv != EnumRefabPlacement.PLACED) { + EnumRefabPlacement from_hotbar = place_refab_stacks(player.inventory, 0, 9); + if(from_hotbar != EnumRefabPlacement.UNCHANGED) { te_changed = true; player_inventory_changed = true; } + } + } break; + case BGui.ACTION_PLACE_CURRENT_HISTORY_SEL: { + EnumRefabPlacement from_storage = place_refab_stacks(this, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN + NUM_OF_STORAGE_SLOTS); + if(from_storage != EnumRefabPlacement.UNCHANGED) te_changed = true; + if(from_storage != EnumRefabPlacement.PLACED) { + EnumRefabPlacement from_player_inv = place_refab_stacks(player.inventory, 9, 36); + if(from_player_inv != EnumRefabPlacement.UNCHANGED) { te_changed = true; player_inventory_changed = true; } + if(from_player_inv != EnumRefabPlacement.PLACED) { + EnumRefabPlacement from_hotbar = place_refab_stacks(player.inventory, 0, 9); + if(from_hotbar != EnumRefabPlacement.UNCHANGED) { te_changed = true; player_inventory_changed = true; } + } + } + } break; + case BGui.ACTION_PLACE_SHIFTCLICKED_STACK: { + final int container_slot_id = nbt.getInteger("containerslot"); + if((container_slot_id < 10) || (container_slot_id > 53)) break; // out of range + if(container_slot_id >= 46) { + // from storage + final int storage_slot = container_slot_id - 46 + STORAGE_SLOTS_BEGIN; + EnumRefabPlacement stat = distribute_stack(this, storage_slot); + if(stat != EnumRefabPlacement.UNCHANGED) te_changed = true; + } else { + // from player + int player_slot = (container_slot_id >= 37) ? (container_slot_id-37) : (container_slot_id-10+9); + EnumRefabPlacement stat = distribute_stack(player.inventory, player_slot); + if(stat != EnumRefabPlacement.UNCHANGED) { player_inventory_changed = true; te_changed = true; } + } + } break; } } + if(te_changed) markDirty(); + if(player_inventory_changed) player.inventory.markDirty(); + if(te_changed || player_inventory_changed) { + container.onCraftMatrixChanged(this); + container.detectAndSendChanges(); + } } @Override diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java index 280dd24..4feaf14 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java @@ -107,6 +107,9 @@ public class ModConfig @Config.Name("Without ladder speed boost") public boolean without_ladder_speed_boost = false; + @Config.Comment({"Disable history refabrication feature of the treated wood crafting table."}) + @Config.Name("Without crafting table history") + public boolean without_crafting_table_history = false; } @Config.Comment({ @@ -192,6 +195,12 @@ public class ModConfig @Config.Name("Chairs: Stand up chance %") @Config.RangeDouble(min=0.001, max=10) public double chair_mob_standup_probability_percent = 1; + + @Config.Comment({"Enables small quick-move arrows from/to player/block storage. " + + "Makes the UI a bit too busy, therefore disabled by default." + }) + @Config.Name("Crafting table: Move buttons") + public boolean with_crafting_quickmove_buttons = false; } @SuppressWarnings("unused") @@ -251,7 +260,7 @@ public class ModConfig if(tweaks.furnace_smelts_nuggets) ModRecipes.furnaceRecipeOverrideSmeltsOresToNuggets(); BlockDecorChair.on_config(optout.without_chair_sitting, optout.without_mob_chair_sitting, tweaks.chair_mob_sitting_probability_percent, tweaks.chair_mob_standup_probability_percent); BlockDecorLadder.on_config(optout.without_ladder_speed_boost); - BlockDecorCraftingTable.on_config(!zmisc.with_experimental); + BlockDecorCraftingTable.on_config(optout.without_crafting_table_history, false, tweaks.with_crafting_quickmove_buttons); } } diff --git a/1.12/src/main/java/wile/engineersdecor/eapi/jei/JEIPlugin.java b/1.12/src/main/java/wile/engineersdecor/eapi/jei/JEIPlugin.java index 36262a5..8c1d110 100644 --- a/1.12/src/main/java/wile/engineersdecor/eapi/jei/JEIPlugin.java +++ b/1.12/src/main/java/wile/engineersdecor/eapi/jei/JEIPlugin.java @@ -8,12 +8,13 @@ */ package wile.engineersdecor.eapi.jei; +import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.blocks.BlockDecorCraftingTable; +import wile.engineersdecor.blocks.ModBlocks; +import wile.engineersdecor.detail.ModConfig; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import wile.engineersdecor.ModEngineersDecor; -import wile.engineersdecor.blocks.ModBlocks; -import wile.engineersdecor.detail.ModConfig; @mezz.jei.api.JEIPlugin public class JEIPlugin implements mezz.jei.api.IModPlugin @@ -22,6 +23,7 @@ public class JEIPlugin implements mezz.jei.api.IModPlugin @SuppressWarnings("deprecation") public void register(mezz.jei.api.IModRegistry registry) { + // Block/item hiding try { for(Block e:ModBlocks.getRegisteredBlocks()) { if(ModConfig.isOptedOut(e)) { @@ -37,7 +39,20 @@ public class JEIPlugin implements mezz.jei.api.IModPlugin } } } catch(Throwable e) { - ModEngineersDecor.logger.warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI processing."); + ModEngineersDecor.logger.warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI optout processing."); + } + // Crafting table registration + if(!ModConfig.optout.without_crafting_table) { + try { + mezz.jei.api.recipe.transfer.IRecipeTransferRegistry recipeTranferRegistry = registry.getRecipeTransferRegistry(); + recipeTranferRegistry.addRecipeTransferHandler( + BlockDecorCraftingTable.BContainer.class, + mezz.jei.api.recipe.VanillaRecipeCategoryUid.CRAFTING, + 1, 9, 10, 44 + ); + } catch(Throwable e) { + ModEngineersDecor.logger.warn("Exception in JEI crafting table handler registration: '" + e.getMessage() + "'."); + } } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/crafting_table/treated_wood_crafting_table_front.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/crafting_table/treated_wood_crafting_table_front.png index 8fc207a6cabaf3ad3a47a8a49af17fb7d9e96d96..06069e9209c5d07195e47c5ae1e1fd556c5af0cd 100644 GIT binary patch delta 495 zcmVm7{C`hPla3-3i6S<`?94pd6f^UWw*gIFjZ7^@glScRAEz%=6^v~3z-Q(dSW6%XNAd~ zX?BuC5mW^PGQm=5G)VY01(_g#6~&(4+;Dey2f&Yq2e!K%DuPF#s)($VHD2HM?60n< zwQ_%dkFjR2wNgsK%&4`}T0>Pav*p}OGJ>Cn17^lFjsOcFA`lTGlgwnl->=0vW`))q zfWzTHSL;%?>VLn0%%qe;DTSw}N8E#=g4GRVl0dD-IM1hOfC7|K7{_tR?#_}H5+ObC z2;80HaHNRPzr64&1DNNTuIm_vfrwa_AtMk~Hf9{hk<7&1`EY&BG)*T!YYl*px3{P& z<7%$8LMC%-yxVS>=a~eCVfgb42JrapD>vIqp86v%yJ%bfr;F$BynlPib3efD)6zj_ zN&-%DP8Y9U&r^w$2OjHiM*Wz0Kq;I6Rh1%1`1uP^D3Z&ozXCRE>&KL{`<)31%=2Fn l+Dd%8IS-g)@owtk{SEkM>`)*Y(-i;!002ovPDHLkV1mZ{yG6&+ht~S}XVW z_hPKsYps-0Ff(ecwAN5n%xpO~lZ@c!;eeSjjUxaC5D|z7kx6E<+wIok9J4}e4#44X zpsRH$TlHT+W`9yjp_IaY|A>1~RIs{%OcJQo80YyE4N!nm3gb8~+1**vLL#IG9)Y`a z9F7zb`llzJWdQR$({&xgFc1;zGGqjz%EpZ2IFgyTJ8y1on5O9jXsrS8{`MACWn9g* zR>)*-jaS<(^E{KlFbscw!2lk=e&*fwf_;DF%lBURk7GW*eVMN>FZj_9rw%$(5^$1p zdhzV_JOL&TJl5fi`Z4iWk11#OI};L^=f5Jfm3X;1 g513=|ZtCLw4HFve5sKwjPXGV_07*qoM6N<$f-A$^LI3~& diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/crafting_table/treated_wood_crafting_table_side.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/crafting_table/treated_wood_crafting_table_side.png index 273905e6cd306ca0af527197242ac24e5184cf1c..f059bb7a9362da9efe28a9056e87931031af8c55 100644 GIT binary patch delta 463 zcmV;=0WkjK1L*^hB!3BTNLh0L01m(a01m(bYSxJf0004-Nklz`5423_* zcK6hfN~+i-74E_PPr#Z3P}xCcL13nB>9O!k6E=)i{(1WJWZ6DH-zy{xFf$BjwJ;*V zz|8=NNB}Uy45~XRQ2``zTo*z~b;r%879*6H!O|*`$x;iF0Dn-3DqwAuErP8FLO6!I zfq^uu4F(8)Wg>wAwK($*~F zrPhkOvn~s#^Le*gYu(qG$@zTdbUMwu`9MKy4R@!Mf`HygTyx_8T5P;Q(uO1O(z%9Io1!S_jx7iAcO`Zp7PJM8ai?GpD&zOk~`4 zfI~6OuYLtAfPjhdg*n1#^W4Id_ zNVD2tfZ%r~5*Sd6V*pQ2Pb#HgW@IF7X=EmuQ?|R$R?Lt@L?DUh=Vz+`>$*~FrPhkO zvn~slZ9AmaT90#PvTYle%VqlJfP&TK)uF%BH4|S3_xpPU;T6+QX-Z`C4NJ0|5&njjH z9+5 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/crafting_table/treated_wood_crafting_table_top.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/crafting_table/treated_wood_crafting_table_top.png index 2e9aeadf18f5f614aa9198de84b6abf9042eaf7e..0462c679bec5110773e234593cccc0fe3dfbb58b 100644 GIT binary patch delta 29 icmcb~a))JtiV$akM`SSr1K$A0 delta 26 fcmcb^a+76(3O`$tx4R3&e-K=-clqRvW@=0ThE57% diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/crafting_table/treated_wood_crafting_table_tray.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/crafting_table/treated_wood_crafting_table_tray.png index 530e0bf6e33eefe9447ca80c417f1c3056d14133..cc16e1fe21364f8d72d3f509029e95278d5e3ae9 100644 GIT binary patch delta 29 icmbQpGKFP=iV$akM`SSr1K$A$ zcy3O9B>Vqg7LRwvMp7OaXQ`s#0Yvv{p+8?=RarzP-W)R{GogyiqP0e5keNgTW{$hj z+<8aPGLv=-P=c7Incf3KZ0m-ZBQu(rA&HE{-DxI3 z%*#wwA%wX>!8A>nfGUb%&t!(lhzMlDWSEIzQpk*~y0|1VRg2 zL}iY>Km`#A)PJxbVLgJ(k$^OASJgEGnIS<*WF;AaJ_W^qn3+8GoyX$=z;l1{{d`_B zljAtJdE<4y$V#63PG(UBX6Bd)H}U)TFRFf0InRTtA~Odx6YVzrSOUyVxI0Mvee8q0 zgqb0RXGvoPp8F2yQjl2H#jRl5HsXTzNkHO?*x0r^_ka5xfQT4UNTH_z|mo>1V8Q8-B P0000|5=iIWHgp$2p|i}v8q_&f&#l=xAgJ(S(Qa(;>|HLG83xEELv-12AN4jVCJ|R z&7D^SEi+lS8&u(DAQ2Hn22>#l%0VEBs-k(L0G>};WuYpLT%#ffYf3lK{K;Hw!fS8%w_nrIw4!~o7@b!3H zGLz#tc=N{de3F$s_MOb43e3zg6K>-D{TEd~shsCQRgswknu+!{{a6CbO}INq{Jrmk zyo8w{hG$9R4LtT8(4`=;s*78}wr#`(?K=U9D`I2YZrpA+03u@aq9`KAl&`PHkOiE_ zb{EUM46uUe9jY)10q#Z#ny%dEX{N_Gw5%)o?nc2fFaOg)u&gWYK8gp$et!_zfg#ym zhPx9zFgGGPZbp3%L7d0I0{gn>{X z!3xaRr!T-0V2}{dHW7)tiA=f*Bmk;58Oi;AC%T)+g)xc%gMV$@rmHZwbr+~<_%lW5jpy4L-v&oPbnfW;+gQ)#Ja(kxOg#?icG4f%Y85cbJ z8>D0bLI3e1h8wsb$!P7PRZy-u@t9*U-05gwG@-GLn^v zF;$b;T#NPm{O#KF_4g~?b1aHL3cBhFnqtoT<>mWT^B>hSG>a;U?MeUu002ovPDHLk FV1mv1(|-T} delta 458 zcmV;*0X6>V1NZ}wBo78+OGiWi{{a60|De66laV19f0#)`K~y-)MUz2t96<;Kv!K`V zC#{{MfZKPY6cx1oHXHA}=C=0Hw=;sOjcvM(1d@;fcZ0y)NP$8a2n7rk+_@4q^m#zplXwme0+Qm-A&}e7)5}=Hg3~Z7-Jg*dq1$7j36>m zhydu?e+UqP&XkdAFkmBzP*7)JcXNi{s5S=L4bmt&N~ELc>+1%a3}Hi56&V45-2<|U zh`=5eXD=dyPz=;*AoA>T{;3*hxXFAzGUP>OK8IuwwI3t5XNp}&5V;T|AI6z+!Lz?X zN)|wbz@iN+Z|uDXrh-hS4%~=QFzy_PUCr5ae|+u+LsgA4=yJ!0g+gOzRq<6h$jJjL zGckQV?Kb!OU;f?i2eMh2NvtG*T?4M`8Q-sRkLM2PODs#p>PCp#MuxSQLR2bk!9!#hmy1+uPOmADLe@Tjdd!r2qf`07*qoM6N<$g3u$< A(EtDd diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_front.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_front.png index 218c945877ebdc1e6b49aae8772293f421bf7c60..4185ff0c00adf7de02af7a537355930732df2f79 100644 GIT binary patch delta 492 zcmVQ&mJH znZd|puVQpJuiw6d&FAMQ5>(ZbWZMJ=1d^yKe*SpJ0NciJ8-Ll@;5L`rmCNOF+zT5r z0|V~nvG0_dkeG8P0E|(9SyMT{C{T#*B|(t{Fme!)D1s3YNTRFhD(n+1Y$JqHaHw4D zUPC2@A_xU>2_lkEfWW=53eh%nvyNt;6G_+*A!sk@(*LjwNb#K5K;y%X5epZyif%uB zF8q>r%7_R~tA9EML1w3Fh7plOh=}0*{TJ1y zdxd#=ltgAyeKu4}2{1C&Bfy`(|IV17RkmS_#0Ckv&D-1Cp|TnFVmblaW20&=iX)51 zeM!ztUT!bI+SWOXVNA7G9l$!JHJj=}3a-}|bbz~h5p delta 488 zcmVf1R>OdQ{`sQ z9xAa^MX9JuQPq?R1o6hIgcGpYA9FhnB#}Usz}eEJUttB1>M_xP$!RBujjLk@I}e{5 zzvbO!R26rtItNr25-ixVB4L})j}PpS1SfQFe`}IBjsqunj8r7Bs+uZMRlL4_WgP4s z=G~(tx|{L6q1j4+)wO>DeE;#!J?2N14y@HAAb}lTUS3X>W+j{H4*2rrc_(`=&wz@x z7D@Q|^Iu@!*5eo|WJ~*XW`~7{H>(7mV>d-1&f6&{si+cj49BrS4>|uQdRQ|7x|{B1 zPC=N%j0dTBe}6}3Z60rO4_)VbI4hoGXceowxn4i9&GYj!5W1U^7@N}WJ7-SEapU9j e6Jnk&Py7dx=|FzAwxo0b0000^jcus7f@nOe^g^O85x1T;2 ze#tv!LJj&Pm&JHBw;1h)5ztMDYIpi)z!o z!aO}nA~UHz8>*!Q7#Zsk;LqQGXUxwk+b~9Ag9P2??d|PQ*$jIzoq+AJxoR$oBa6p< zNzP1OZZCqht#cN`m};*&fPL=xsBEp+8Eqfwzaoz96bvbd5H*WACmBJVm2$jQJ)2l% zQo_h2GZ|oNHr0g`T(2+E0q*KW&_%}j4}I9GS)_uInQYsG?&fy80VXpEiRvb_`u362 ioICf&1KeCMSH1v29zw9(QviAZ0000f&Vp diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_front_gloom_on.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_front_gloom_on.png index 8bcef559718a82ac38ddc48acb1a15b9f36fadae..02da0360fe33acdd23c7f887409f9b706e6c3f4c 100644 GIT binary patch delta 669 zcmV;O0%HA}1+@i`B!3BTNLh0L01FcU01FcV0GgZ_0007KNklK!4-#LASGos2~WUidk_U zg5d77CTIQ(z@4k-noKO5VtnBYjqy1wACUJpxwrPRx&i^#*7p(Jz}WzbH>+5Aw*oLV zdo1-q0wlo5d>|mAh$!X`2q7r$R?i2Q7jwqvPjK}3N#sZy@_l0Vm6gZu>iOW&+a@9% zj5pv8?mw$aK7UAn1o-DZKtRB)n1n+k;6Q7#UHv&cLd*Sd8U-5I}_1RFx0JS-yB02~A?Q z%doeN4;`Ay>WiH^J`h%(y$2Mt2&IukwXjsB4`$|4AAcl30*t~3y>96PS8yYmA%GtE zpfWEY+`O`cdy_cK$@enE4fl-uPe1(r^x&)CUQW03-21zlVx|16VP!yAeXbsWTtAargEzW|6%AiD74h{hdvm z$b;v*HRpp63LnHAFDsC8e^8lN(tMBr2{0-j^mb5Dz>B;P^I!6U*89J3>-q)qY`}2) zBiYs_@p~T~3p`vOtD6^!Y+x}5bKD(KP;LB&c^2UZzUdTDfe9UT00000NkvXXu0mjf DM3Xm5 delta 622 zcmV-!0+Ic-1)BwsBo78+OGiWi%K*y&%l66uERi7?e>+J;K~!ko?U}J^6j2n0zjN+v zG_g<=6at#;CRR2IR@Od%osEKMWhxcH=dg-k6MX@-wN+5a6Nr;dkRXVL7?O>X&D?V= zW){>HGd6?B{mMIcE(b1rbN(}sNc78usNOx{r z>@YPwf6wIfIkL&)SUI5FUgzPH*9TY7n>k%opc!6oad%V<5b~8(Nf(z$wB`c=5k*8X zcR&b1akpkZxOTo|^28|)pPWSw9fNY8SbSme*}K2+fhblVh&!XI^8Q-#K_bzv4-gP= ztG>}83pkMHtAF-^05>lkB|9=j=qP0|z=~ZQe`o1U9IGJvU0F+ScR&W18JOW_s4Ai% z-B}{hq7Pcg^;r1pzbm%BcueKWW2i+OhAb?^P zp*E7JA_#du<%L9|9Ut_1wGUjujcA4dI`YARc>&?h^$WOnh{KX{uRz>zFL?A~tw{x4 zf7el7Fax)Geo$>sc_EQ#&j;Pw2UTh}HxMDHHp>f$aR2sI%u2i*5cfV~d!LBI0gKN! z4z6IXH|G+niDu=4h`ZJEgN%HopL~!=wBv*Mc~=pt(Y{q3yBi?{oF@H&8xQU+U=}HN zJ~I6Jp8c(LoXF#syA6#LLgj;4;&la5RL>96|Aj=NH6P6NTtxw|@GDL=4yAfzu>^D69Z^ut{=vNP9reB#m+>YISO5S307*qo IM6N<$f_BIsxBvhE diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_handles.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_handles.png index 96988056de52da79d0e346fd2b47269d6f72e0a4..1998de055106e7fc0a67d3f872e4ed30943f5417 100644 GIT binary patch delta 10 RcmZ3;+|N8gWusX(BLEXk13mx% delta 26 fcmeBYUdTK_g`X|S+ueoXKL{?^yL|FS#XLp;d0Yw& diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_left.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_left.png index 14c1b1bb0d68c1d880fe2b54fde96673d2d57c8a..039f7198c40361d6c47b4a7bbd272ff2069ec39d 100644 GIT binary patch delta 507 zcmVG&(Gb}WEC+2+f)^FQ`L+ys7k7e%)|~N z%!t4-7*)l?_aD$r*dURaWF>SX2|7R^iSA~^;O&0r_4NgJHGk@chWac3EU&vPY$1uN zLN?h2G?|kD&@}Suew+sax*BL4rmB&R9T?#V(i7PX+pBxlr67=zfi^;T_{$;m;=^(~ zWMdg`CT9X5i^>LsY^s~S1UgJslQZcCTToqJz~sdM3CYYkp&`4dE-KgjT3;A5lTrPj zGEMh7P>eBvCVwKxg7^1> zra8|8NgT&PX7YA_yLc={5MNazl8PP&WkrmC<9 zW0*MxA0Ho@-ObDIe?Y>pL87XtE=Z6B86c2E66TnEJ|2Ae@@Je5N+8fb9{`s3UNyFm zM0X>be@X+PYB2#qkhl8td?FwnAb6PWARBvNgvX$~kj=Ec)vGTDfs72q2;u2p2_c&g zJMEN>WqdQW3IJJj1rW07gj@z0raIIr60ilG{sm0l43Ln_S_=Y|rqguo`L(YwR~57K zKV?F)7c_HDAdE4noe4>J7{P|v-9$owhe>aNf9^&SV+;n`NoqkscL-p6V2ia*<{W(g z{v?F+d?JbG^GQ|l`S`qeY(^6N{q37Pyd5mDs>#J-x5JgfWKRj%aJ$3n>udb;;5hEA z^JL7)^E|oT4yuaV?Z)Hr;N|5v&hzAczXR;wT8%@f3u5P@3s@o-0|>Pi>BbkUF-!!O zWsEIq)$TOmI1Z4w9e0Gd%^Lv6aqO0WF($T|5dQt=KdKk7=l1Dc+bTRv)neELu6no8 zxYF?U_MYzEKjZ4$64i~hMRW06>qH)q=C7|`^#cH2JZmAnb`$^r002ovPDHLkV1hpt B_~-xt diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_right.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_right.png index 95dd1c1a6d1dff731b60d055285e3d72868f71a6..5c417d5139bdc939d08aa835d324a5207bc63db5 100644 GIT binary patch delta 492 zcmV?Nei?uK{PCUVcP~6YJ&_S0 zQB_nI*hm5=2qa;fkplx92VsM3F!Wmk5DGA>-VK1g>g5K^oF@ao7zNnoI1dE4SGOVv zB?{qgK#Uv!D1spgNpv;cjY6P60eG>HKAptB)W~=1guF_#r=PN=kMb$+rD$2lYQS;SjJ$^ zll%S7d7j*EJ5{wDF;Kmd2p~g9gjSf|nD}xkF6x}%J2j_9FE=*=pQ&cxG-^46z inDa!D;AR-#@B9PfwKmR)%}d7s0000oZk!=}&JRT1d!Jn5GG6E#3is}Lz zN#F#5By2NsV1VNwY>*9x{%HV00cO>^0kBuS+<=+$WB?eW0NWhrfdKdFRs^9$A>0j! zkplolFeD*~uBN+D2oxv)FBO^VZpC`H7pcTh1QEg51~uzK7F`B}BB)tJtkLEyA`^U# z6yn!)Ns9r0Ktc-UoFM34fDuU`#4>eM72PW`Nf=|V1I-u%Fl{qy5(qNLOf*?0b~n|H zfXKkT0JW-#Z84af1kVw%|I>+1_+p2xx1ZYwFV2wz`c zota3YE@nwY1QJv=Qc%@|R+N(HHg*%RkgAIN{m%D)^P6qoInT+y?`v7cV9t~K{myxw z+-^HnwGuHLzrJaDApZPZSAm{(XGt ZKk#%CFDws#TW|mX002ovPDHLkV1nqX*Ps9Z diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_top.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_lab_furnace_top.png index 391188d8487ddbd9b3faaab48bc977db809fc458..d711b45a410373cc01c74408a2e1e54bbe8c9531 100644 GIT binary patch delta 477 zcmV<30V4i`1os1wB!3BTNLh0L01FcU01FcV0GgZ_00050NklBmZss8B{SP&+M&~zG=>lwJNkA6$UZHQ_e}uE%e!gLeP9Px(V+^{RBy<(>;Pv(O z?-l09$8Y2T3144c5MotPU63FN0th6Lg!On3VA#xb`11J^34h39jKNy#SuqK74gz#H z9s>YN{Ca<90)!y%^y_gUARQohnC>7OdtmeokX zodpnre|*xP&j$gS0KsKuf^6)<=p7=PWgAIM56|-;3&|%oL32XV%_LaxVV|NBOE#AA z%XBvYua6hgLjd2y>0$OKvH9Hl@&H>fnK!W4$Lr!fFWGxTpfkuOGe8gr>e}6`$(u4j zu0j~rTENlSmyIM`Mw)0FfSEx$e`boKv)N1!l1X6Mg)M9&isV?~LP~Oi ztB_5t*98p%T-UuMcAtrpZlIuVweGok2M{wM8JyET5rLr)_W+yOa| zJ4CI8E@Z^pOz);-R#ovlKbV=@`*prW&*1%&Ljrq$a(?gd@%rFD1P>_G3Ib9300000 LNkvXXu0mjfik90x diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/gui/treated_wood_crafting_table.png b/1.12/src/main/resources/assets/engineersdecor/textures/gui/treated_wood_crafting_table.png index 58d1131c1d09efb77a288acf0560bb727d78f8aa..bc26abf9cc0fff2b24bdc5ad61762bff742425bf 100644 GIT binary patch literal 27102 zcmX_{bx_-1u=azyL!fA((Bke|++B(lw*tii1a}WooZ?d4-Q9`=*W#`XT3lX!_s)GM zllh*>Upbp|p56UCn@BYkSuAu?bN~Q=B`+tX0RX_gE#UyD$ZrormlCVD2eO%>tQ6q& zzgKQ&apK!2Xijo^AOHY^;J-HZXN=vPuC)!9$LD zA|JI}9x;G_e|Y zAY^F~$d`Z{XYSTcTO-jDC`Et@g*y;xuYRWMvUWCgAFlWSb45(PQ-Sp4js~zR8rJ_* zm%eySvgYO|D-Ils05XAeO|v0a;g|-y4p@6}RuO+G`7J3VSvh z_&-uT`w_HsVr_P!48NRv>~2km4S)L3NccmSeJ$FVYpQ+PpqQ{QDXR7AsGQ<#Rb>B6 zOl${-GW+~!`DO9NC!n}Jl1i)-F;mR*mO71VPU5!3*_Od1ti&meR0Cr@CLbPE`igQ4 z%gO=EaEf%2sVs@6!3q^wgPq7e{f7og7@VEV>Q(J#89Fp;Jtj(RSRqGf4Xe^~wtc$2 zo&p1xY}BP2!oOx7&k%%0uVOdEPB<>U<_srEKY+Yt_}xBCjc6cLKXf4rmPHdqod!lM zjLJvfSK*Qs2IlX5Y29PumgmatLyC^RpZl^`cj|UX_2rt zX4_#*L|MgEenykEdcogfU&N(2z)|QFl9-77hU$1)k(wh}>t>SgY)#Y2q!EeplKQxz zNo8pQY17IiW%;DTMJ=;l!_o{ittEu>9=^_Ti3D+j6;Uac@^bbPYlrv2_YW@xQb4dm zEle{`rF6LXbkb;wb#f`EQwlO;U`@gZ;u|-eD;dqFz_n#)A&XFhIHeVM zomvS`ZWu}3o$u|P@dYlf0lHp?zWO_HyMPUjPB^rBux?w#_3e`MOGrgpXvTY*P#>|= z24kP?{6uSvb_Vwb!mWi~Hha-loO5*s^@p+4@=B(dfgPU3Nl}~8=+eopWQ|gufA+Kg z$|hBn={3nBd_F_QuaxPX()b3{9-PZ-+bU~dShpVQYTO-J@-`>uZQ)L$?^MoDW=98Q zaAcM_KSU}x&|iGLUI(Iv)B@+S(26BGV5`%6jdj|QT>^YXr+E-TOYbOh)(hc7sCh8E zU5lc<5)gw_y@E_dOAjg-ES0k!sGeNVQE20iw^Pds0`1x)%J-sj2@J^CNSZL#_7orHG!g_)hTX%0D8ttf`MTfrK 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 s(@`q?f899$e^39rCCFJVJ(B-kgLS*b70C Date: Fri, 19 Apr 2019 21:08:46 +0200 Subject: [PATCH 02/15] Texture variations for walls. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 3 + .../engineersdecor/ModEngineersDecor.java | 16 +++-- .../engineersdecor/blocks/BlockDecorWall.java | 7 +- .../wile/engineersdecor/detail/ModConfig.java | 8 ++- .../engineersdecor/detail/ModRecipes.java | 22 +++++- .../wile/engineersdecor/items/ItemDecor.java | 51 ++++++++++++++ .../wile/engineersdecor/items/ModItems.java | 63 ++++++++++++++++++ .../blockstates/clinker_brick_wall.json | 14 +++- .../blockstates/concrete_wall.json | 3 +- .../blockstates/rebar_concrete_wall.json | 12 +++- .../blockstates/slag_brick_wall.json | 14 +++- .../assets/engineersdecor/lang/en_us.lang | 1 + .../assets/engineersdecor/lang/ru_ru.lang | 1 + .../wall/clinker_brick_wall_inventory.json | 4 +- .../block/wall/clinker_brick_wall_side.json | 2 +- .../block/wall/slag_brick_wall_inventory.json | 4 +- .../block/wall/slag_brick_wall_side.json | 2 +- .../engineersdecor/recipes/_constants.json | 4 ++ ...brick_wall.png => clinker_brick_wall0.png} | Bin 549 -> 530 bytes .../clinker_brick/clinker_brick_wall1.png | Bin 0 -> 660 bytes .../clinker_brick/clinker_brick_wall2.png | Bin 0 -> 672 bytes .../clinker_brick/clinker_brick_wall3.png | Bin 0 -> 609 bytes .../clinker_brick/clinker_brick_wall4.png | Bin 0 -> 636 bytes .../clinker_brick/clinker_brick_wall5.png | Bin 0 -> 603 bytes .../clinker_brick/clinker_brick_wall6.png | Bin 0 -> 648 bytes .../clinker_brick/clinker_brick_wall7.png | Bin 0 -> 630 bytes ...ag_brick_wall.png => slag_brick_wall0.png} | Bin .../blocks/slag_brick/slag_brick_wall1.png | Bin 0 -> 682 bytes .../blocks/slag_brick/slag_brick_wall2.png | Bin 0 -> 684 bytes .../blocks/slag_brick/slag_brick_wall3.png | Bin 0 -> 706 bytes .../blocks/slag_brick/slag_brick_wall4.png | Bin 0 -> 687 bytes .../blocks/slag_brick/slag_brick_wall5.png | Bin 0 -> 693 bytes .../blocks/slag_brick/slag_brick_wall6.png | Bin 0 -> 697 bytes .../blocks/slag_brick/slag_brick_wall7.png | Bin 0 -> 711 bytes credits.md | 4 ++ .../engineers-decor-v101a-craftinggui.png | Bin 290787 -> 0 bytes .../engineers-decor-v104a-craftinggui.png | Bin 0 -> 224498 bytes meta/update.json | 3 +- readme.md | 9 +-- 41 files changed, 223 insertions(+), 29 deletions(-) create mode 100644 1.12/src/main/java/wile/engineersdecor/items/ItemDecor.java create mode 100644 1.12/src/main/java/wile/engineersdecor/items/ModItems.java rename 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/{clinker_brick_wall.png => clinker_brick_wall0.png} (75%) create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall1.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall2.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall3.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall4.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall5.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall6.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall7.png rename 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/{slag_brick_wall.png => slag_brick_wall0.png} (100%) create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall1.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall2.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall3.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall4.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall5.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall6.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall7.png delete mode 100644 documentation/engineers-decor-v101a-craftinggui.png create mode 100644 documentation/engineers-decor-v104a-craftinggui.png diff --git a/1.12/gradle.properties b/1.12/gradle.properties index a1820e4..250ed7c 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b1 +version_engineersdecor=1.0.4-b2 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 7748218..bee53dc 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b2": "[A] Added position dependent texture variation to clinker wall, slag brick wall and rebar concrete wall.", "1.0.4-b1": "[A] Crafting table: JEI integration for recipe placement added.\n[A] Crafting table: History re-fab added, allowing to quickly select and re-craft recent recipes. Selection with arrow buttons, ingredient placement by clicking the result slot. Automatic item distribution on shift-click. Quick-move buttons.\n[F] Crafting table textures modified to prevent optifine glitches on the edges of the legs.", "1.0.3": "[R] Release based on v1.0.3-b5. Release-to-release changes: * Small laboratory furnace added. * Extensive config options for mod packing and tuning added. * Rendering issues fixes (window bleeding, optifine). * Steel framed window added. * Treated wood pole \"end pieces\" added (two support variants). * Sitting on treated wood stool added including mobs (but not villagers, as these are obviously very upright people). * Lang ru_ru added (github contribution from Yaroslavik). * Creative tab logo changed to mod logo. * Table/crafting table bounding boxes refined. * Standalone \"escape\" recipes added if IE is not installed.", "1.0.3-b5": "[F] Fixed typo in en-en lang file.\n[F] Fixed IE concrete texture missing bailout in log if IE is not installed.\n[F] Using forge multi-layer models for windows to circumvent glitches.\n[M] Changed creative tab logo to the mod logo.\n[A] Added alternative recipes for crafting table and furnace if main IE ingredients are missing (for \"stand-alone\" mod usage).", @@ -25,6 +26,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b1" + "1.12.2-latest": "1.0.4-b2" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index c3d1e3e..482cd39 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,9 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b2 [A] Added position dependent texture variation to clinker wall, + slag brick wall and rebar concrete wall. + - v1.0.4-b1 [A] Crafting table: JEI integration for recipe placement added. [A] Crafting table: History re-fab added, allowing to quickly select and re-craft recent recipes. Selection with arrow buttons, diff --git a/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java b/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java index 052d6ef..b96866d 100644 --- a/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java +++ b/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java @@ -8,11 +8,10 @@ */ package wile.engineersdecor; -import wile.engineersdecor.detail.ModConfig; -import wile.engineersdecor.detail.ExtItems; -import wile.engineersdecor.detail.Networking; -import wile.engineersdecor.detail.RecipeCondModSpecific; +import net.minecraft.item.crafting.IRecipe; +import wile.engineersdecor.detail.*; import wile.engineersdecor.blocks.*; +import wile.engineersdecor.items.*; import net.minecraft.world.World; import net.minecraft.tileentity.TileEntity; import net.minecraft.client.multiplayer.WorldClient; @@ -39,6 +38,7 @@ import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.logging.log4j.Logger; + import javax.annotation.Nonnull; @@ -126,12 +126,16 @@ public class ModEngineersDecor @SubscribeEvent public static void registerItems(final RegistryEvent.Register event) - { ModBlocks.registerItemBlocks(event); } + { ModBlocks.registerItemBlocks(event); ModItems.registerItems(event); } + + @SubscribeEvent + public static void registerRecipes(RegistryEvent.Register event) + { ModRecipes.registerRecipes(event); } @SideOnly(Side.CLIENT) @SubscribeEvent public static void registerModels(final ModelRegistryEvent event) - { ModBlocks.initModels(); } + { ModBlocks.initModels(); ModItems.initModels(); } } public static final CreativeTabs CREATIVE_TAB_ENGINEERSDECOR = (new CreativeTabs("tabengineersdecor") { diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java index d85a77a..7fbfe6e 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java @@ -12,6 +12,7 @@ import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; @@ -41,6 +42,7 @@ public class BlockDecorWall extends BlockDecor public static final PropertyBool EAST = BlockWall.EAST; public static final PropertyBool SOUTH = BlockWall.SOUTH; public static final PropertyBool WEST = BlockWall.WEST; + public static final PropertyInteger TEXTURE_VARIANT = PropertyInteger.create("tvariant", 0, 7); private static final double d_0 = 0.0d; private static final double d_1 = 1.0d; @@ -165,12 +167,13 @@ public class BlockDecorWall extends BlockDecor boolean s = canWallConnectTo(world, pos, EnumFacing.SOUTH); boolean w = canWallConnectTo(world, pos, EnumFacing.WEST); boolean nopole = (n && s && !e && !w) || (!n && !s && e && w); - return state.withProperty(UP,!nopole).withProperty(NORTH, n).withProperty(EAST, e).withProperty(SOUTH, s).withProperty(WEST, w); + long prnd = pos.toLong(); prnd = (prnd>>29) ^ (prnd>>17) ^ (prnd>>9) ^ (prnd>>4) ^ pos.getX() ^ pos.getY() ^ pos.getZ(); + return state.withProperty(UP,!nopole).withProperty(NORTH, n).withProperty(EAST, e).withProperty(SOUTH, s).withProperty(WEST, w).withProperty(TEXTURE_VARIANT, ((int)prnd) & 0x7); } @Override protected BlockStateContainer createBlockState() - { return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH}); } + { return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH, TEXTURE_VARIANT}); } @Override @SuppressWarnings("deprecation") diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java index 4feaf14..6a9e106 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java @@ -14,11 +14,11 @@ import wile.engineersdecor.blocks.*; import net.minecraftforge.common.config.Config; import net.minecraftforge.common.config.ConfigManager; import net.minecraft.block.Block; +import net.minecraft.item.Item; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; - import javax.annotation.Nullable; @Config(modid = ModEngineersDecor.MODID) @@ -253,6 +253,12 @@ public class ModConfig return false; } + public static final boolean isOptedOut(final @Nullable Item item) + { + if((item == null) || (optout == null)) return true; + return false; + } + public static final void apply() { BlockDecorFurnace.BTileEntity.on_config(tweaks.furnace_smelting_speed_percent, tweaks.furnace_fuel_efficiency_percent, tweaks.furnace_boost_energy_consumption); diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModRecipes.java b/1.12/src/main/java/wile/engineersdecor/detail/ModRecipes.java index b51524a..5ad2b8e 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModRecipes.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModRecipes.java @@ -5,23 +5,43 @@ * @license MIT (see https://opensource.org/licenses/MIT) * * General handling auxiliaries for mod recipes. + * + * Credits/references: + * + * - Looked up how blusunrise did the ore-to-grit recipes in `blusunrize.immersiveengineering.common.IERecipes`. */ package wile.engineersdecor.detail; import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.blocks.BlockDecorFurnace; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.util.NonNullList; +import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.oredict.OreDictionary; -import net.minecraft.item.ItemStack; + import java.util.*; public class ModRecipes { + public static final void registerRecipes(RegistryEvent.Register event) + {} + + //-------------------------------------------------------------------------------------------------------------------- + // Furnace + //-------------------------------------------------------------------------------------------------------------------- + + /** + * Not a standard recipe, on-the-fly changable behaviour of the furnace. + */ public static final void furnaceRecipeOverrideReset() { BlockDecorFurnace.BRecipes.instance().reset(); } + /** + * Not a standard recipe, on-the-fly changable behaviour of the furnace. + */ public static final void furnaceRecipeOverrideSmeltsOresToNuggets() { try { diff --git a/1.12/src/main/java/wile/engineersdecor/items/ItemDecor.java b/1.12/src/main/java/wile/engineersdecor/items/ItemDecor.java new file mode 100644 index 0000000..5b4c08a --- /dev/null +++ b/1.12/src/main/java/wile/engineersdecor/items/ItemDecor.java @@ -0,0 +1,51 @@ +/* + * @file ItemDecor.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2018 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Basic item functionality for mod items. + */ +package wile.engineersdecor.items; + +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.detail.ModAuxiliaries; + +import javax.annotation.Nullable; +import java.util.List; + +public class ItemDecor extends Item +{ + ItemDecor(String registryName) + { + super(); + setRegistryName(ModEngineersDecor.MODID, registryName); + setTranslationKey(ModEngineersDecor.MODID + "." + registryName); + setMaxStackSize(64); + setCreativeTab(ModEngineersDecor.CREATIVE_TAB_ENGINEERSDECOR); + setHasSubtypes(false); + } + + @SideOnly(Side.CLIENT) + public void initModel() + { + ModelResourceLocation rc = new ModelResourceLocation(getRegistryName(),"inventory"); + ModelBakery.registerItemVariants(this, rc); + ModelLoader.setCustomMeshDefinition(this, stack->rc); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) + { ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true); } + +} diff --git a/1.12/src/main/java/wile/engineersdecor/items/ModItems.java b/1.12/src/main/java/wile/engineersdecor/items/ModItems.java new file mode 100644 index 0000000..4e416c2 --- /dev/null +++ b/1.12/src/main/java/wile/engineersdecor/items/ModItems.java @@ -0,0 +1,63 @@ +/* + * @file ModItems.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2018 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Definition and initialisation of items of this module. + */ +package wile.engineersdecor.items; + +import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.detail.ModConfig; +import net.minecraft.item.Item; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import java.util.ArrayList; +import java.util.List; +import java.util.Collections; +import javax.annotation.Nonnull; + +@SuppressWarnings("unused") +public class ModItems +{ + + private static final Item[] modItems = { + }; + + private static final ArrayList registeredItems = new ArrayList<>(); + + @Nonnull + public static List getRegisteredItems() + { return Collections.unmodifiableList(registeredItems); } + + public static final void registerItems(RegistryEvent.Register event) + { + // Config based registry selection + int num_registrations_skipped = 0; + ArrayList allItems = new ArrayList<>(); + Collections.addAll(allItems, modItems); + final boolean woor = ModConfig.isWithoutOptOutRegistration(); + for(Item e:allItems) { + if((!woor) || (!ModConfig.isOptedOut(e))) { + registeredItems.add(e); + } else { + ++num_registrations_skipped; + } + } + for(Item e:registeredItems) event.getRegistry().register(e); + ModEngineersDecor.logger.info("Registered " + Integer.toString(registeredItems.size()) + " items."); + if(num_registrations_skipped > 0) { + ModEngineersDecor.logger.info("Skipped registration of " + num_registrations_skipped + " items."); + } + } + + @SideOnly(Side.CLIENT) + public static final void initModels() + { + for(Item e:registeredItems) { + if(e instanceof ItemDecor) ((ItemDecor)e).initModel(); + } + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_wall.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_wall.json index ee36212..10334d4 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_wall.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_wall.json @@ -3,7 +3,7 @@ "defaults": { "model": "engineersdecor:wall/clinker_brick_wall_default", "textures": { - "wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall", + "wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall0", "postside": "engineersdecor:blocks/clinker_brick/clinker_brick_pole_side", "top": "engineersdecor:blocks/clinker_brick/clinker_brick_top", "particle": "engineersdecor:blocks/clinker_brick/clinker_brick_top" @@ -15,6 +15,16 @@ "north": { "false":{}, "true": {"submodel": {"clinker_wall_north" : {"model": "engineersdecor:wall/clinker_brick_wall_side", "uvlock": true, "y": 0 }}} }, "east" : { "false":{}, "true": {"submodel": {"clinker_wall_east" : {"model": "engineersdecor:wall/clinker_brick_wall_side", "uvlock": true, "y": 90 }}} }, "south": { "false":{}, "true": {"submodel": {"clinker_wall_south" : {"model": "engineersdecor:wall/clinker_brick_wall_side", "uvlock": true, "y": 180 }}} }, - "west" : { "false":{}, "true": {"submodel": {"clinker_wall_west" : {"model": "engineersdecor:wall/clinker_brick_wall_side", "uvlock": true, "y": 270 }}} } + "west" : { "false":{}, "true": {"submodel": {"clinker_wall_west" : {"model": "engineersdecor:wall/clinker_brick_wall_side", "uvlock": true, "y": 270 }}} }, + "tvariant": { + "0":{"textures":{"wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall0"}}, + "1":{"textures":{"wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall1"}}, + "2":{"textures":{"wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall2"}}, + "3":{"textures":{"wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall3"}}, + "4":{"textures":{"wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall4"}}, + "5":{"textures":{"wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall5"}}, + "6":{"textures":{"wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall6"}}, + "7":{"textures":{"wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall7"}} + } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/concrete_wall.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/concrete_wall.json index 6801e12..d771b22 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/concrete_wall.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/concrete_wall.json @@ -13,6 +13,7 @@ "north": { "false":{}, "true": {"submodel": {"concrete_wall_north" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 0 }}} }, "east" : { "false":{}, "true": {"submodel": {"concrete_wall_east" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 90 }}} }, "south": { "false":{}, "true": {"submodel": {"concrete_wall_south" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 180 }}} }, - "west" : { "false":{}, "true": {"submodel": {"concrete_wall_west" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 270 }}} } + "west" : { "false":{}, "true": {"submodel": {"concrete_wall_west" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 270 }}} }, + "tvariant": { "0":{},"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{} } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_wall.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_wall.json index 9590325..e83c0af 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_wall.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_wall.json @@ -13,6 +13,16 @@ "north": { "false":{}, "true": {"submodel": {"concrete_wall_north" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 0 }}} }, "east" : { "false":{}, "true": {"submodel": {"concrete_wall_east" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 90 }}} }, "south": { "false":{}, "true": {"submodel": {"concrete_wall_south" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 180 }}} }, - "west" : { "false":{}, "true": {"submodel": {"concrete_wall_west" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 270 }}} } + "west" : { "false":{}, "true": {"submodel": {"concrete_wall_west" : {"model": "engineersdecor:wall/concrete_wall_side", "uvlock": true, "y": 270 }}} }, + "tvariant": { + "0":{"textures":{ "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture0" }}, + "1":{"textures":{ "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture1" }}, + "2":{"textures":{ "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture2" }}, + "3":{"textures":{ "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture3" }}, + "4":{"textures":{ "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture4" }}, + "5":{"textures":{ "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture5" }}, + "6":{"textures":{ "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture6" }}, + "7":{"textures":{ "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture7" }} + } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/slag_brick_wall.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/slag_brick_wall.json index 1c10bc2..039f350 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/slag_brick_wall.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/slag_brick_wall.json @@ -3,7 +3,7 @@ "defaults": { "model": "engineersdecor:wall/slag_brick_wall_default", "textures": { - "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall", + "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall0", "postside": "engineersdecor:blocks/slag_brick/slag_brick_pole_side", "top": "engineersdecor:blocks/slag_brick/slag_brick_top", "particle": "engineersdecor:blocks/slag_brick/slag_brick_top" @@ -15,6 +15,16 @@ "north": { "false":{}, "true": {"submodel": {"clinker_wall_north" : {"model": "engineersdecor:wall/slag_brick_wall_side", "uvlock": true, "y": 0 }}} }, "east" : { "false":{}, "true": {"submodel": {"clinker_wall_east" : {"model": "engineersdecor:wall/slag_brick_wall_side", "uvlock": true, "y": 90 }}} }, "south": { "false":{}, "true": {"submodel": {"clinker_wall_south" : {"model": "engineersdecor:wall/slag_brick_wall_side", "uvlock": true, "y": 180 }}} }, - "west" : { "false":{}, "true": {"submodel": {"clinker_wall_west" : {"model": "engineersdecor:wall/slag_brick_wall_side", "uvlock": true, "y": 270 }}} } + "west" : { "false":{}, "true": {"submodel": {"clinker_wall_west" : {"model": "engineersdecor:wall/slag_brick_wall_side", "uvlock": true, "y": 270 }}} }, + "tvariant": { + "0":{"textures":{ "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall0" }}, + "1":{"textures":{ "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall1" }}, + "2":{"textures":{ "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall2" }}, + "3":{"textures":{ "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall3" }}, + "4":{"textures":{ "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall4" }}, + "5":{"textures":{ "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall5" }}, + "6":{"textures":{ "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall6" }}, + "7":{"textures":{ "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall7" }} + } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index 3da8f77..eb5607d 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -83,6 +83,7 @@ tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Sol #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo) tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. + #----------------------------------------------------------------------------------------------------------- # EOF #----------------------------------------------------------------------------------------------------------- diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang index 5b301b2..688945f 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang @@ -79,6 +79,7 @@ tile.engineersdecor.small_lab_furnace.help=§6Лабораторная печь #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo) #tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. + #----------------------------------------------------------------------------------------------------------- # EOF #----------------------------------------------------------------------------------------------------------- diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_inventory.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_inventory.json index c9c5869..a0783a4 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_inventory.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_inventory.json @@ -2,8 +2,8 @@ "parent": "block/block", "ambientocclusion": false, "textures": { - "wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall", - "particle": "engineersdecor:blocks/clinker_brick/clinker_brick_wall", + "wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall0", + "particle": "engineersdecor:blocks/clinker_brick/clinker_brick_wall0", "top": "engineersdecor:blocks/clinker_brick/clinker_brick_top" }, "elements": [ diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_side.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_side.json index bb3657b..7c1db34 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_side.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_side.json @@ -1,7 +1,7 @@ { "credit": "I made this with the Blockbench", "textures": { - "wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall", + "wall": "engineersdecor:blocks/clinker_brick/clinker_brick_wall0", "top": "engineersdecor:blocks/clinker_brick/clinker_brick_top", "particle": "engineersdecor:blocks/clinker_brick/clinker_brick_top" }, diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_inventory.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_inventory.json index 3a0dd3f..88bc8b8 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_inventory.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_inventory.json @@ -2,8 +2,8 @@ "parent": "block/block", "ambientocclusion": false, "textures": { - "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall", - "particle": "engineersdecor:blocks/slag_brick/slag_brick_wall", + "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall0", + "particle": "engineersdecor:blocks/slag_brick/slag_brick_wall0", "top": "engineersdecor:blocks/slag_brick/slag_brick_top" }, "elements": [ diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_side.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_side.json index 127af1c..7a228bc 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_side.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_side.json @@ -1,7 +1,7 @@ { "credit": "I made this with the Blockbench", "textures": { - "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall", + "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall0", "top": "engineersdecor:blocks/slag_brick/slag_brick_top", "particle": "engineersdecor:blocks/slag_brick/slag_brick_top" }, diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json index 12f9f28..6f68018 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json @@ -19,6 +19,10 @@ "ingredient": { "type": "forge:ore_dict", "ore": "ingotIron" }, "name": "ingotIron" }, + { + "ingredient": { "type": "forge:ore_dict", "ore": "blockIron" }, + "name": "blockIron" + }, { "ingredient": { "type": "forge:ore_dict", "ore": "plateIron" }, "name": "plateIron" diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall0.png similarity index 75% rename from 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall.png rename to 1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall0.png index 50a3cec5320b2d4a067a5dde2ad6cabae867a517..61328357ee1e78a2fecedf69fb9fdcc9a300c3f7 100644 GIT binary patch delta 10 RcmZ3=GKpn^*T&cri~tpi1MvU= delta 28 kcmbQlvXo_lmmmXsiKnkC`(tKCF&2)CEIwy9dYobe0B-*XLjV8( diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall1.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall1.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc22d5622ad1a95b3dc7329c46f5b6db84d0211 GIT binary patch literal 660 zcmV;F0&D$=P)ee3)jdHUOr@!11E|9Q##e_kDATfJdc*_8^w{fCc_^)4l@ zmP!uuqX)b?$JmAc$B`x_W^>$wx>R;o6WdKgbw>crNikpb-JEX7N%=S~j7ueHVp=L{ zM)Eao>%#bPkGli%g@dMTX}gXxjts+aZP%{raG>vd_Pafrlwm(`x;Y_#c>5ninU9Fu zla@_R3`^zLiwC^__ce?8dJA4bl+lB{Ed2iDIeB+AfxvE>0oYB2{-ooyYXGQYAqbXm zCJzXJ01?Jg$f`ouWXv2?8OltlmAM*C(-7fA1QCwg>JI=t+>N|>`68xiX0e5~ZNXQd uu4%Z@_mono^Na^9b3s)P>%tFbH~9p5tWzN#fA!S>0000)658kob)~qTO0vvck*lRzDIbFOJ={{1MqB~0nnWB z-Vs&8o$2O=yZ+BNTGlrCCX3WP%%86s|)SMZI z0s+koMUbil7cSk9AHI4L&n0nSJ*|wpE5e=YX<|7XXsux$Bz;lFm+$V#fBf{6BwOOm z4iGL>(+#Kr<>#MblIeG4@3l2p`Sai zOxK{nU;iwa2l`))$KAO7rgHIvg9;&#R7jdo6(WTFPyrqolv=67Ksz2;mgR+6hhe~h zX_}Z1Gn$lTUf7LS4-CvYht>hO+m8&j@ajA7^Xqrtpdxq#Dnb@vsD&iLqmMs(@WFHa z0sfwk?1rt_z7)^^7v^>46i`#5YjA9hJg;Z&rX6mMq|Jdvl_Wwbg`D)_6J@N0Fu%XM zXK*^Lob61l72H9Up%kvCiPjo@UGaeP+ECREF7VRLE&l?`ygtHgVUo}Q0000E{V literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall3.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall3.png new file mode 100644 index 0000000000000000000000000000000000000000..683f5a597f1791c5e29348ab87c922b02c2f3aa2 GIT binary patch literal 609 zcmV-n0-pVeP)8^4yFB4*Bl^b%V0uQzY&^)n-S#iIY2B1O;A!PHyac~f)f9c z1H?N|p5o@jDzdY)1Hi><1%Sqg<&3D}X0*Gzth2&KRv-qVJOCW81OBRWsE$0amd-p`*8=h_fn~_DdT!Se)XD|Ha%U=+ue7H z89{|}8%B|0TH39s?oPG{Z?$Mfsw&x(=(KTx~{4Zd5@G#((zAdvAA> zmqkK31wtSp6d_QKL4}Y|iVzA48YHej0}@3F1Wjl-0w6th_fnaUp9 z-}w9Nk#|q-dv+%XxPyq`?f_)VAc}~fT#o^WKungvge2P{H?DHb01QPyofwpC1`g#> zC1!&rC}YkAAcNy%2R9>xKu}>aLj;P-l6l48VCLR4`x z+U1f>*O5}f91xHcWsSmJJD|gBX;Y zGV<-?``ug&82gd=VuqWs*S2)46~i!)%?T>}du|^dB5xnx^B^Vg@Wm-VznmAo?l*Wp zIyvLVrw=R_Gb&Zal!%^~Kwwc@jK6%CE#pi39R4Vk@2qGN6d`+}$AWol3(U1nror8H(aR1X}OrR8dGYmxo5Q3E1 zhoICkP^nT?)eTK7+s+1x27Ny=<%znk%NJCosVer`mSGr3EZZ}A7` WZ%H7WYdyRG0000*HKEr0}#l6 zetaW|U=ej%Aw&V#fBA~jFUOSN2G*!>@7V!4%&R`HI#;?^$1I458{6U|0@JH#Z1(wq`TBvord>$2>@SJ<2<~yU4o-d$G#+ z{)+>Cemp`|8H*7S<`StmjB*G*m&d2hP2Y?qx0?wBMPJO%>N{uTiWh|`r zi#q~W9+<;)bIRbxq)CVf?!ii*07=uOAMOswl?P4R(oQDyiv?ZRUDG<5OmJW}n=wC| zqeF{oB-OC zFt649zb8YfH7^=0`o4Mqf_ZIQlWNnlDoxYye^1=}@(xrFmdk0G;Gag p^nFhm20UOKdQ|noK)AJYo4+hiFjZY>1i}CS002ovPDHLkV1k8p{-yu` literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall6.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_wall6.png new file mode 100644 index 0000000000000000000000000000000000000000..dd33298aa70f5fe015939dc7fc166d0290da8b4e GIT binary patch literal 648 zcmV;30(bq1P)0Z9aR2N3{Nz|06yLCw3@Nh)V{4OazodHxiwd?_1 zQmPr@0V(K)6q7C6$Ecq^GytgCGb2QK8EjO+rqJIhZ*i5W*O1hI}~KKdFfW{ibKW*dp9H zw_LJ5Jfzl&d5}&ZPImFqCFJ?;tO@iFW5`mb4Mvl$L7mrGWMD>NzV)tbe8i~Qr$djRUth;RZSsZf$~{oW(K zzkkE3_6S0R)8#}?iLAoy$It%Ifi)6JbE721d|b|^4kQ2x0%2%QYtGgzaa=1oC*`Og zP{w_il28#kRZ1x=W`$pyO8BIfNh2rPkq-y^vDx$tHqdn)xPvOQQaHCK0>1&b+&*~<9=tgK0000JP)H?l*=jvKG>DciNI!4jFfds_af{LJC9&5Wx)0 z98tl66qG7PGzharPj7`vlzNgz?m;QJAm2W`-^gn~zv`K8O>i@|n}&8aqw6|~IYBSB z^7{Th^7i3vKkxCqqho%2`p96;Bn9daFgFlIf&0&1^7G3HL4-O47DFa_F@E>`_=9Xr zVq_u?4vT)k9kLBnA&`fR7bB~a%@82QpiHZg*K})23`#Zw8O3s(loC;epkd<)!3Y}u zYLKdms;=plOWL-*z_qSx3}~8$`D~5`rJc8IO((=(-%rO|ZfkQ0QH3f7ZahBX?DX^K zf%Uv36;@@m_oElDiB=56S>=M;x?+k9Wjvg7KA)F9gEGd;u0yjMeI7H$prjN)AgPYr zgHnvmZpAh+Flw+`^$ca8swyx8RqB-3ZW_9-BlkV#F!UX&irM&jckdd1042&IOd4bv QyZ`_I07*qoM6N<$f*Jx0+5i9m literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall0.png similarity index 100% rename from 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall.png rename to 1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall0.png diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall1.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall1.png new file mode 100644 index 0000000000000000000000000000000000000000..22ea4b1bca1a7950aa20d69b2d74748148aff462 GIT binary patch literal 682 zcmV;b0#*HqP)?+6umbSyk*j|$P7#iQ9(tC2vCJc)P$;{ zs-TLSy%3t6{@&96(hW-Fq4$s0gA;Rg!1l zq6Pl&ok#pv39QS?{;;Dm*&=v!{e;u$L}Xzqul7bX?*4g+|MA;xk4}vT?>^@Cm#;vC zEsEo|p;atfV;ToOym`v=AHSihkSyjF_=|bLRG7w*Dq(HG{TgH?gDH{4G&m}XsPX6B z5rD&CkB^4$$AOl~);6YTWE`9=i_Go=6spn*txmz{hKpf?BVT;}S@|&HgJbTrt?~C? zFZz^=3o;TjWnEWZf8$Leg5`c@zMDDhclb{~e1{2VG{HnEz*M-pzTwxOzolhiXP9~@ zLT2*hqi47QYYVnWq!P^0N=o{HLTC{kv~y|yXBU%vMN%d)b?#yF1b_Xi4?rV*V+-nx2BTUWARTTiI|4_mb0U!&7P&60u2 QWB>pF07*qoM6N<$g1|&RL;wH) literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall2.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall2.png new file mode 100644 index 0000000000000000000000000000000000000000..02c3469815a7ce928298703385c11a9be06b74e9 GIT binary patch literal 684 zcmV;d0#p5oP)LPfb$x0R6 zTe|m@eE03^>>db-s3Ib$3YiHbiA*FRMaVI*VvJ;)O(;GFK9Vs4(?nEAha8ERG9pk_ z#uzBT81xv7kxWw17>S6G2&qPDVE~ay_drWUR8Uc{f{z3QErmf+t{y)_MX_4g@Am*K z$K&Q$3eh{F3c$tXCG+8cyK~Z^{C;zd<^T~8sAeQWEy`!lUT|~$3kj$SOYfZRcDN5p zQLestP9c+JBpHFIum+e4^V$JO6%Mx@kD%7Va+qng!0K2vR0KqgsWo3eMM+ zR*W8j>1i*@vN{0af&B3Oo4j}bK4ykT;N7XMk`b)#Os(PWEXzvoD^qI#%=3}Vr2O&g z^_H?4S5Kew^Siev*R3`YAu=&lzJB?NoA*DFnaD^E9+bZix0ni3Yh((2B-w+*vH);C zO=Ko(3`7kP<+iV2h0+W?YZX_3TmSt-JAQJ>U21Sfk+m=D84KpKr zOI}0(u-X_SnA(Jz5(z58ayv60XLeJg{Q28QA_gjnpBPtF61aNu4IkeB$S3DJmOf76 zY!~<7(??%Yx;y{Q3u;DY;vN7D5`f(_@z*~`)HWIc&WbVj;NtRvQi`Ew7$Bu=b-FWI zq1H+*Mw=Qrk{Fx#arHaA%frvVVt;;ts9>inxT_ByJbH?+D)McQ)u?ZDU_#gA9t4`Um)b_{T|+!6-P{ffXo_GATIUX=iU|-s^4$b5cP= z1x?XZRm&g0|CY5mLL#b&2qG+q#50kE6d@xhR)}QbMX(k@izLHQO+*D1#oa*_i9m}I z8Du6z;E_ZGh@l>dh>!@Wg;XO*JfSrwixEJkKrs@4g$Ie9KKhP~#5&{X=m>!QZU=yx z5v?JrWCX`2C+x=&Z;i-B$6mdBfo6aR2y~^82%RaL&%WT@o7e28iO58NzV8_K2SkL& zPoAP=a@&HrHm2%KZJC?>#FzIUFt^5dm}t$}Pcv6HJE}WVt(2}{A~390h&$SKL^v9Y zf%jG`u6H8|RChA({K}-L;?1$M^B?$#0OrHYdb1)UsP6po_zBZA;gJ-TPrL4o-G^)J z^*=9`=(KRUz2NfiXFy`55bo4S`mP{aINM(E^3P|>C6SEHv8(YwQDNx&B`Ou>8rw2s+YO9=XFSz;d3V_Y=G2ub06?aEU;j3@9sKB@z*{oOCn}08H4^)zN*Kt)Pfz$J! zxcuumC-+uNHF*1Ksf(&otMlW}zhbpDKHN@dDP$(C`CTGQX;;I*`|CYg^iu*VLPT;q zO_*7sC9DB4qm)8xjiDG_*U?#_A9^wp4<{pV1kpv%9(?_X&kr-zD}CRyUT;WP3>|tN oe!Hd3Gm%i|2~}M_5%A{x4^@P1To)8dGXMYp07*qoM6N<$f2uKJ>2@tq@y8GQ*RRnM3tb)=x zNA;bO=g+>YJ_4Z-RYU|;p{gK@s6q-#gv!L+$YPsK@R7;LA~P^8L0f&BQx_nQ@vz}#()0)W<#gO&68W+ z{`L|m+>DH%XE8NH)cEwtE$?2vq^giC4kPe?4kt{7d78+Ppu*ad|LzW$J6c6#f+nL6 zM3hrs!5p6q-AxTurH{_;VuvC`CdVF(5ri61MMPq1ATT0vF{UuHT~C)|Gh&^KM>fE7N_2EcViUn0CC667-KM-(^{js zG0hW|MPyK!1cK-$=pTLZh=-?@9-V2LAQM!XTLXoUAAf;Xq2`>=r|t2oXzt_){s#kf VVfMw-O+)|y002ovPDHLkV1k&wFj)Wq literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall5.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall5.png new file mode 100644 index 0000000000000000000000000000000000000000..8d30e34486ef557528475adbb3f8ba8cda75afb0 GIT binary patch literal 693 zcmV;m0!safP)L_t(I%UzSPjvZwTg+JT>%-lQN zjgl%|QbxPYCQ5{06)LJc0S~}?@B*pw5IhK>Ku9RXE)-Bu@B#$(&fb~%f7=wZP;e?+ zIzF;}Z29Kvud+5rNJJG8L4*yFvjJJ@dM9@#-}q zKtym4UVQcirMAY$X{PH6nMrGY@5okAYh_+5%d%2i#oZAERb@OJ&{B*Pq1Hxg&M@?t zDT>f_9rLoV)=Fz_6ZWk`fV<<7^7PpykLQ)@mA>!U??)20g$_NhzkEYmS0bUV3#z(( b;ywNWh#gTApPGEG00000NkvXXu0mjf9V#)6 literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall6.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/slag_brick/slag_brick_wall6.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f210f839419960f97629c39fe713eb7f9a28d7 GIT binary patch literal 697 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 z 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 z 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 diff --git a/documentation/engineers-decor-v104a-craftinggui.png b/documentation/engineers-decor-v104a-craftinggui.png new file mode 100644 index 0000000000000000000000000000000000000000..ebbab108b659790a8cb40689abc549bb7436238f GIT binary patch literal 224498 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

FuV?Xhi* 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 Date: Sat, 20 Apr 2019 12:51:14 +0200 Subject: [PATCH 03/15] Added steel support poles with support heads. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 3 + .../wile/engineersdecor/blocks/ModBlocks.java | 34 ++++- .../blockstates/thick_steel_pole.json | 17 +++ .../blockstates/thick_steel_pole_head.json | 17 +++ .../blockstates/thin_steel_pole.json | 17 +++ .../blockstates/thin_steel_pole_head.json | 17 +++ .../assets/engineersdecor/lang/en_us.lang | 8 ++ .../assets/engineersdecor/lang/ru_ru.lang | 8 ++ .../straight_thick_metal_pole_head_model.json | 114 ++++++++++++++++ .../pole/straight_thick_metal_pole_model.json | 66 ++++++++++ .../straight_thin_metal_pole_head_model.json | 122 ++++++++++++++++++ .../pole/straight_thin_metal_pole_model.json | 66 ++++++++++ .../engineersdecor/recipes/_constants.json | 4 + .../recipes/thick_steel_pole_head_recipe.json | 17 +++ .../thick_steel_pole_recipe_backcycle.json | 17 +++ .../recipes/thin_steel_pole_head_recipe.json | 17 +++ .../recipes/thin_steel_pole_recipe.json | 25 ++++ .../thin_steel_pole_recipe_backcycle.json | 17 +++ .../thin_steel_pole_recipe_leftalign.json | 25 ++++ .../thin_steel_pole_recipe_rightalign.json | 25 ++++ .../pole/thick_steel_pole_side_texture.png | Bin 0 -> 402 bytes .../pole/thick_steel_pole_top_texture.png | Bin 0 -> 348 bytes .../pole/thin_steel_pole_side_texture.png | Bin 0 -> 342 bytes .../pole/thin_steel_pole_top_texture.png | Bin 0 -> 373 bytes meta/update.json | 3 +- 27 files changed, 640 insertions(+), 4 deletions(-) create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole_head.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole_head.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_head_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_head_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_head_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_recipe_backcycle.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_head_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_backcycle.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_leftalign.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_rightalign.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thick_steel_pole_side_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thick_steel_pole_top_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thin_steel_pole_side_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thin_steel_pole_top_texture.png diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 250ed7c..1f35193 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b2 +version_engineersdecor=1.0.4-b3 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index bee53dc..69f0d43 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b3": "[A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles.\n[A] Added support head/foot components for thin and thick steel poles.", "1.0.4-b2": "[A] Added position dependent texture variation to clinker wall, slag brick wall and rebar concrete wall.", "1.0.4-b1": "[A] Crafting table: JEI integration for recipe placement added.\n[A] Crafting table: History re-fab added, allowing to quickly select and re-craft recent recipes. Selection with arrow buttons, ingredient placement by clicking the result slot. Automatic item distribution on shift-click. Quick-move buttons.\n[F] Crafting table textures modified to prevent optifine glitches on the edges of the legs.", "1.0.3": "[R] Release based on v1.0.3-b5. Release-to-release changes: * Small laboratory furnace added. * Extensive config options for mod packing and tuning added. * Rendering issues fixes (window bleeding, optifine). * Steel framed window added. * Treated wood pole \"end pieces\" added (two support variants). * Sitting on treated wood stool added including mobs (but not villagers, as these are obviously very upright people). * Lang ru_ru added (github contribution from Yaroslavik). * Creative tab logo changed to mod logo. * Table/crafting table bounding boxes refined. * Standalone \"escape\" recipes added if IE is not installed.", @@ -26,6 +27,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b2" + "1.12.2-latest": "1.0.4-b3" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index 482cd39..53d6d1c 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,9 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b3 [A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles. + [A] Added support head/foot components for thin and thick steel poles. + - v1.0.4-b2 [A] Added position dependent texture variation to clinker wall, slag brick wall and rebar concrete wall. diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index cc64623..86adbe4 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -78,6 +78,34 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) ); + public static final BlockDecorStraightPole THIN_STEEL_POLE = new BlockDecorStraightPole( + "thin_steel_pole", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, + Material.IRON, 1.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(6,6,0, 10,10,16) + ); + + public static final BlockDecorStraightPole THIN_STEEL_POLE_HEAD = new BlockDecorStraightPole( + "thin_steel_pole_head", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, + Material.IRON, 1.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(6,6,0, 10,10,16) + ); + + public static final BlockDecorStraightPole THICK_STEEL_POLE = new BlockDecorStraightPole( + "thick_steel_pole", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, + Material.IRON, 1.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(5,5,0, 11,11,16) + ); + + public static final BlockDecorStraightPole THICK_STEEL_POLE_HEAD = new BlockDecorStraightPole( + "thick_steel_pole_head", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, + Material.IRON, 1.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(5,5,0, 11,11,16) + ); + public static final BlockDecor TREATED_WOOD_TABLE = new BlockDecor( "treated_wood_table", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, @@ -169,7 +197,11 @@ public class ModBlocks STEEL_FRAMED_WINDOW, TREATED_WOOD_POLE_SUPPORT, TREATED_WOOD_POLE_HEAD, - SIGN_MODLOGO + SIGN_MODLOGO, + THIN_STEEL_POLE, + THICK_STEEL_POLE, + THIN_STEEL_POLE_HEAD, + THICK_STEEL_POLE_HEAD }; private static final Block devBlocks[] = { diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole.json new file mode 100644 index 0000000..a000062 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "engineersdecor:pole/straight_thick_metal_pole_model", + "x":-90, + "textures": { + "particle": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "side": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "top": "engineersdecor:blocks/pole/thick_steel_pole_top_texture" + } + }, + "variants": { + "normal": [{}], + "facing": { "north": {"y":0}, "south": {"y":0}, "west": {"y":90}, "east": {"y":90}, "up": {"x":90}, "down": {"x":90} }, + "inventory": [{}] + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole_head.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole_head.json new file mode 100644 index 0000000..3391774 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole_head.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "engineersdecor:pole/straight_thick_metal_pole_head_model", + "x":-90, + "textures": { + "particle": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "side": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "top": "engineersdecor:blocks/pole/thick_steel_pole_top_texture" + } + }, + "variants": { + "normal": [{}], + "facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} }, + "inventory": [{}] + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole.json new file mode 100644 index 0000000..66b63ad --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "engineersdecor:pole/straight_thin_metal_pole_model", + "x":-90, + "textures": { + "particle": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "side": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "top": "engineersdecor:blocks/pole/thin_steel_pole_top_texture" + } + }, + "variants": { + "normal": [{}], + "facing": { "north": {"y":0}, "south": {"y":0}, "west": {"y":90}, "east": {"y":90}, "up": {"x":90}, "down": {"x":90} }, + "inventory": [{}] + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole_head.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole_head.json new file mode 100644 index 0000000..8f6bfae --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole_head.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "engineersdecor:pole/straight_thin_metal_pole_head_model", + "x":-90, + "textures": { + "particle": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "side": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "top": "engineersdecor:blocks/pole/thin_steel_pole_top_texture" + } + }, + "variants": { + "normal": [{}], + "facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} }, + "inventory": [{}] + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index eb5607d..0e4ae4c 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -56,6 +56,14 @@ tile.engineersdecor.treated_wood_pole_head.name=Straight treated wood pole head/ tile.engineersdecor.treated_wood_pole_head.help=§6Wooden part fitting as foot or head of straight poles. tile.engineersdecor.treated_wood_pole_support.name=Straight treated wood pole support tile.engineersdecor.treated_wood_pole_support.help=§6Heavy duty wooden support part fitting as foot or head of straight poles. +tile.engineersdecor.thick_steel_pole.name=Straight thick steel pole +tile.engineersdecor.thick_steel_pole.help=§6Straight hollow pole fragment (6x6x16) for structural support purposes. +tile.engineersdecor.thin_steel_pole.name=Straight thin steel pole +tile.engineersdecor.thin_steel_pole.help=§6Straight hollow pole fragment (4x4x16) for structural support purposes. +tile.engineersdecor.thin_steel_pole_head.name=Straight thin steel pole head/foot +tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or head of the thin steel pole (4x4x16). +tile.engineersdecor.thick_steel_pole_head.name=Straight thick steel pole head/foot +tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16). #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.treated_wood_table.name=Treated wood table tile.engineersdecor.treated_wood_table.help=§6Robust four-legged wood table.§r Indoor and outdoor use. diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang index 688945f..dd469bc 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang @@ -56,6 +56,14 @@ tile.engineersdecor.treated_wood_pole_head.name=Прямой обработан #tile.engineersdecor.treated_wood_pole_head.help=§6Wooden part fitting as foot or head of straight poles. tile.engineersdecor.treated_wood_pole_support.name=Прямой обработанный деревянный столб #tile.engineersdecor.treated_wood_pole_support.help=§6Heavy duty wooden support part fitting as foot or head of straight poles. +tile.engineersdecor.thick_steel_pole.name=Straight thick steel pole +#tile.engineersdecor.thick_steel_pole.help=§6Straight hollow pole fragment (6x6x16) for structural support purposes. +tile.engineersdecor.thin_steel_pole.name=Straight thin steel pole +#tile.engineersdecor.thin_steel_pole.help=§6Straight hollow pole fragment (4x4x16) for structural support purposes. +tile.engineersdecor.thin_steel_pole_head.name=Straight thin steel pole head/foot +#tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or head of the thin steel pole (4x4x16). +tile.engineersdecor.thick_steel_pole_head.name=Straight thick steel pole head/foot +#tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16). #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.treated_wood_table.name=Стол из обработанного дерева tile.engineersdecor.treated_wood_table.help=§6Прочный деревянный стол с четырьмя ножками .§r Для использования в помещении и на улице. diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_head_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_head_model.json new file mode 100644 index 0000000..aeccde5 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_head_model.json @@ -0,0 +1,114 @@ +{ + "parent": "block/cube", + "textures": { + "side": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "particle": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "top": "engineersdecor:blocks/pole/thick_steel_pole_top_texture" + }, + "elements": [ + { + "from": [6, 10, 0], + "to": [10, 11, 14], + "faces": { + "north": {"uv": [6, 5, 10, 6], "texture": "#top"}, + "up": {"uv": [6, 0, 10, 16], "texture": "#side"}, + "down": {"uv": [6, 0, 10, 16], "texture": "#side"} + } + }, + { + "from": [10, 5, 0], + "to": [11, 11, 14], + "faces": { + "north": {"uv": [5, 5, 6, 11], "texture": "#top", "cullface": "north"}, + "east": {"uv": [5, 0, 11, 16], "rotation": 90, "texture": "#side"}, + "west": {"uv": [5, 0, 11, 16], "rotation": 90, "texture": "#side"}, + "up": {"uv": [10, 0, 11, 16], "texture": "#side"}, + "down": {"uv": [10, 0, 11, 16], "texture": "#side"} + } + }, + { + "from": [5, 5, 0], + "to": [6, 11, 14], + "faces": { + "north": {"uv": [10, 5, 11, 11], "texture": "#top", "cullface": "north"}, + "east": {"uv": [5, 0, 11, 16], "rotation": 90, "texture": "#side"}, + "west": {"uv": [5, 0, 11, 16], "rotation": 90, "texture": "#side"}, + "up": {"uv": [5, 0, 6, 16], "texture": "#side"}, + "down": {"uv": [5, 0, 6, 16], "texture": "#side"} + } + }, + { + "from": [6, 5, 0], + "to": [10, 6, 14], + "faces": { + "north": {"uv": [6, 10, 10, 11], "texture": "#top"}, + "up": {"uv": [6, 0, 10, 16], "texture": "#side"}, + "down": {"uv": [6, 0, 10, 16], "texture": "#side"} + } + }, + { + "from": [3, 3, 14], + "to": [13, 13, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#top", "cullface": "north"}, + "east": {"uv": [4, 5, 6, 13], "texture": "#side"}, + "south": {"uv": [3, 3, 13, 13], "texture": "#top", "cullface": "south"}, + "west": {"uv": [14, 4, 16, 12], "texture": "#side"}, + "up": {"uv": [12, 4, 14, 12], "rotation": 90, "texture": "#side"}, + "down": {"uv": [10, 1, 12, 10], "rotation": 90, "texture": "#side"} + } + }, + { + "from": [6, 11, 13], + "to": [10, 11.5, 15], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 11.25, 14]}, + "faces": { + "east": {"uv": [2, 5.5, 4, 6], "texture": "#top"}, + "west": {"uv": [12, 5.5, 14, 6], "texture": "#top"}, + "up": {"uv": [6, 13, 10, 15], "texture": "#top"} + } + }, + { + "from": [6, 4.5, 13], + "to": [10, 5, 15], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 4.75, 14]}, + "faces": { + "east": {"uv": [2, 5.5, 4, 6], "texture": "#top"}, + "west": {"uv": [12, 5.5, 14, 6], "texture": "#top"}, + "down": {"uv": [6, 1, 10, 3], "texture": "#top"} + } + }, + { + "from": [4.5, 6, 13], + "to": [5, 10, 15], + "rotation": {"angle": -45, "axis": "y", "origin": [4.75, 8, 14]}, + "faces": { + "west": {"uv": [6, 1, 10, 3], "rotation": 270, "texture": "#top"}, + "up": {"uv": [12, 5.5, 14, 6], "rotation": 90, "texture": "#top"}, + "down": {"uv": [2, 5.5, 4, 6], "rotation": 270, "texture": "#top"} + } + }, + { + "from": [11, 6, 13], + "to": [11.5, 10, 15], + "rotation": {"angle": 45, "axis": "y", "origin": [11.25, 8, 14]}, + "faces": { + "east": {"uv": [6, 13, 10, 15], "rotation": 270, "texture": "#top"}, + "up": {"uv": [12, 5.5, 14, 6], "rotation": 90, "texture": "#top"}, + "down": {"uv": [2, 5.5, 4, 6], "rotation": 270, "texture": "#top"} + } + } + ], + "display": { + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_model.json new file mode 100644 index 0000000..db77562 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_model.json @@ -0,0 +1,66 @@ +{ + "parent": "block/cube", + "textures": { + "side": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "particle": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "top": "engineersdecor:blocks/pole/thick_steel_pole_top_texture" + }, + "elements": [ + { + "from": [6, 10, 0], + "to": [10, 11, 16], + "faces": { + "north": {"uv": [6, 5, 9.5, 5.75], "texture": "#top"}, + "south": {"uv": [6, 6, 9.5, 6.75], "texture": "#top"}, + "up": {"uv": [6.25, 0, 9.75, 16], "texture": "#side"}, + "down": {"uv": [6.25, 0, 9.75, 16], "texture": "#side"} + } + }, + { + "from": [10, 5, 0], + "to": [11, 11, 16], + "faces": { + "north": {"uv": [5, 5, 5.75, 10], "texture": "#top", "cullface": "north"}, + "east": {"uv": [5, 0, 11, 16], "rotation": 90, "texture": "#side"}, + "south": {"uv": [10, 5, 10.75, 10], "texture": "#top", "cullface": "south"}, + "west": {"uv": [5, 0, 11, 16], "rotation": 90, "texture": "#side"}, + "up": {"uv": [10, 0, 11, 16], "texture": "#side"}, + "down": {"uv": [10, 0, 10.75, 16], "texture": "#side"} + } + }, + { + "from": [5, 5, 0], + "to": [6, 11, 16], + "faces": { + "north": {"uv": [10, 6, 10.75, 11], "texture": "#top", "cullface": "north"}, + "east": {"uv": [5, 0, 11, 16], "rotation": 90, "texture": "#side"}, + "south": {"uv": [5, 6, 5.75, 11], "texture": "#top", "cullface": "south"}, + "west": {"uv": [5, 0, 11, 16], "rotation": 90, "texture": "#side"}, + "up": {"uv": [5, 0, 6, 16], "texture": "#side"}, + "down": {"uv": [5, 0, 5.75, 16], "texture": "#side"} + } + }, + { + "from": [6, 5, 0], + "to": [10, 6, 16], + "faces": { + "north": {"uv": [6, 10, 9.5, 10.75], "texture": "#top"}, + "south": {"uv": [6, 10, 9.5, 10.75], "texture": "#top"}, + "up": {"uv": [6.25, 0, 9.75, 16], "texture": "#side"}, + "down": {"uv": [6.25, 0, 9.75, 16], "texture": "#side"} + } + } + ], + "display": { + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_head_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_head_model.json new file mode 100644 index 0000000..ae017f8 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_head_model.json @@ -0,0 +1,122 @@ +{ + "parent": "block/cube", + "textures": { + "side": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "particle": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "top": "engineersdecor:blocks/pole/thin_steel_pole_top_texture" + }, + "elements": [ + { + "from": [7, 9, 0], + "to": [9, 10, 14], + "faces": { + "north": {"uv": [7, 6, 9, 7], "texture": "#top"}, + "south": {"uv": [7, 6, 9, 7], "texture": "#top"}, + "up": {"uv": [7, 0, 9, 16], "texture": "#side"}, + "down": {"uv": [7, 0, 9, 16], "texture": "#side"} + } + }, + { + "from": [9, 6, 0], + "to": [10, 10, 14], + "faces": { + "north": {"uv": [6, 6, 7, 10], "texture": "#top", "cullface": "north"}, + "east": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#side"}, + "south": {"uv": [9, 6, 10, 10], "texture": "#top", "cullface": "south"}, + "west": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#side"}, + "up": {"uv": [9, 0, 10, 16], "texture": "#side"}, + "down": {"uv": [9, 0, 10, 16], "texture": "#side"} + } + }, + { + "from": [6, 6, 0], + "to": [7, 10, 14], + "faces": { + "north": {"uv": [9, 6, 10, 10], "texture": "#top", "cullface": "north"}, + "east": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#side"}, + "south": {"uv": [6, 6, 7, 10], "texture": "#top", "cullface": "south"}, + "west": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#side"}, + "up": {"uv": [6, 0, 7, 16], "texture": "#side"}, + "down": {"uv": [6, 0, 7, 16], "texture": "#side"} + } + }, + { + "from": [7, 6, 0], + "to": [9, 7, 14], + "faces": { + "north": {"uv": [7, 9, 9, 10], "texture": "#top"}, + "south": {"uv": [7, 9, 9, 10], "texture": "#top"}, + "up": {"uv": [7, 0, 9, 16], "texture": "#side"}, + "down": {"uv": [7, 0, 9, 16], "texture": "#side"} + } + }, + { + "from": [4, 4, 14], + "to": [12, 12, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#top", "cullface": "north"}, + "east": {"uv": [5, 5, 7, 13], "texture": "#side"}, + "south": {"uv": [4, 4, 12, 12], "texture": "#top", "cullface": "south"}, + "west": {"uv": [14, 4, 16, 12], "texture": "#side"}, + "up": {"uv": [12, 4, 14, 12], "rotation": 90, "texture": "#side"}, + "down": {"uv": [10, 1, 12, 10], "rotation": 90, "texture": "#side"} + } + }, + { + "from": [7, 10, 13], + "to": [9, 10.5, 15], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 10.25, 14]}, + "faces": { + "east": {"uv": [2, 5.5, 4, 6], "texture": "#top"}, + "west": {"uv": [12, 5.5, 14, 6], "texture": "#top"}, + "up": {"uv": [7, 13, 9, 15], "texture": "#top"}, + "down": {"uv": [7, 2, 9, 4], "texture": "#top"} + } + }, + { + "from": [7, 5.5, 13], + "to": [9, 6, 15], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 5.75, 14]}, + "faces": { + "east": {"uv": [2, 5.5, 4, 6], "texture": "#top"}, + "west": {"uv": [12, 5.5, 14, 6], "texture": "#top"}, + "up": {"uv": [7, 12, 9, 14], "texture": "#top"}, + "down": {"uv": [7, 1, 9, 3], "texture": "#top"} + } + }, + { + "from": [5.5, 7, 13], + "to": [6, 9, 15], + "rotation": {"angle": -45, "axis": "y", "origin": [5.75, 8, 14]}, + "faces": { + "east": {"uv": [7, 12, 9, 14], "rotation": 270, "texture": "#top"}, + "west": {"uv": [7, 1, 9, 3], "rotation": 270, "texture": "#top"}, + "up": {"uv": [12, 5.5, 14, 6], "rotation": 90, "texture": "#top"}, + "down": {"uv": [2, 5.5, 4, 6], "rotation": 270, "texture": "#top"} + } + }, + { + "from": [10, 7, 13], + "to": [10.5, 9, 15], + "rotation": {"angle": 45, "axis": "y", "origin": [10.25, 8, 14]}, + "faces": { + "east": {"uv": [7, 13, 9, 15], "rotation": 270, "texture": "#top"}, + "west": {"uv": [7, 2, 9, 4], "rotation": 270, "texture": "#top"}, + "up": {"uv": [12, 5.5, 14, 6], "rotation": 90, "texture": "#top"}, + "down": {"uv": [2, 5.5, 4, 6], "rotation": 270, "texture": "#top"} + } + } + ], + "display": { + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_model.json new file mode 100644 index 0000000..398cc19 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_model.json @@ -0,0 +1,66 @@ +{ + "parent": "block/cube", + "textures": { + "side": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "particle": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "top": "engineersdecor:blocks/pole/thin_steel_pole_top_texture" + }, + "elements": [ + { + "from": [7, 9, 0], + "to": [9, 10, 16], + "faces": { + "north": {"uv": [7, 6, 9, 7], "texture": "#top"}, + "south": {"uv": [7, 6, 9, 7], "texture": "#top"}, + "up": {"uv": [7, 0, 9, 16], "texture": "#side"}, + "down": {"uv": [7, 0, 9, 16], "texture": "#side"} + } + }, + { + "from": [9, 6, 0], + "to": [10, 10, 16], + "faces": { + "north": {"uv": [6, 6, 7, 10], "texture": "#top", "cullface": "north"}, + "east": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#side"}, + "south": {"uv": [9, 6, 10, 10], "texture": "#top", "cullface": "south"}, + "west": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#side"}, + "up": {"uv": [9, 0, 10, 16], "texture": "#side"}, + "down": {"uv": [9, 0, 10, 16], "texture": "#side"} + } + }, + { + "from": [6, 6, 0], + "to": [7, 10, 16], + "faces": { + "north": {"uv": [9, 6, 10, 10], "texture": "#top", "cullface": "north"}, + "east": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#side"}, + "south": {"uv": [6, 6, 7, 10], "texture": "#top", "cullface": "south"}, + "west": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#side"}, + "up": {"uv": [6, 0, 7, 16], "texture": "#side"}, + "down": {"uv": [6, 0, 7, 16], "texture": "#side"} + } + }, + { + "from": [7, 6, 0], + "to": [9, 7, 16], + "faces": { + "north": {"uv": [7, 9, 9, 10], "texture": "#top"}, + "south": {"uv": [7, 9, 9, 10], "texture": "#top"}, + "up": {"uv": [7, 0, 9, 16], "texture": "#side"}, + "down": {"uv": [7, 0, 9, 16], "texture": "#side"} + } + } + ], + "display": { + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json index 6f68018..36329d4 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json @@ -27,6 +27,10 @@ "ingredient": { "type": "forge:ore_dict", "ore": "plateIron" }, "name": "plateIron" }, + { + "ingredient": { "type": "forge:ore_dict", "ore": "ingotSteel" }, + "name": "ingotSteel" + }, { "ingredient": { "type": "forge:ore_dict", "ore": "plateSteel" }, "name": "plateSteel" diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_head_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_head_recipe.json new file mode 100644 index 0000000..e2efd5d --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_head_recipe.json @@ -0,0 +1,17 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:thick_steel_pole_head" + } + ], + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "engineersdecor:thick_steel_pole" + } + ], + "result": { + "item": "engineersdecor:thick_steel_pole_head" + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_recipe_backcycle.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_recipe_backcycle.json new file mode 100644 index 0000000..8d4bc27 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_recipe_backcycle.json @@ -0,0 +1,17 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:thick_steel_pole" + } + ], + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "engineersdecor:thick_steel_pole_head" + } + ], + "result": { + "item": "engineersdecor:thick_steel_pole" + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_head_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_head_recipe.json new file mode 100644 index 0000000..88613a9 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_head_recipe.json @@ -0,0 +1,17 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:thin_steel_pole_head" + } + ], + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "engineersdecor:thin_steel_pole" + } + ], + "result": { + "item": "engineersdecor:thin_steel_pole_head" + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe.json new file mode 100644 index 0000000..da91bfa --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe.json @@ -0,0 +1,25 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:thin_steel_pole", + "required": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + " S", + " S ", + "S " + ], + "key": { + "S": { + "item": "#ingotSteel", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:thin_steel_pole", + "count": 18 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_backcycle.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_backcycle.json new file mode 100644 index 0000000..9623469 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_backcycle.json @@ -0,0 +1,17 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:thin_steel_pole" + } + ], + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "engineersdecor:thin_steel_pole_head" + } + ], + "result": { + "item": "engineersdecor:thin_steel_pole" + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_leftalign.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_leftalign.json new file mode 100644 index 0000000..e7554e1 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_leftalign.json @@ -0,0 +1,25 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:thin_steel_pole", + "required": ["engineersdecor:thin_steel_pole"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "PP ", + "PP ", + "PP " + ], + "key": { + "P": { + "item": "engineersdecor:thin_steel_pole", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:thick_steel_pole", + "count": 4 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_rightalign.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_rightalign.json new file mode 100644 index 0000000..6c57651 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_rightalign.json @@ -0,0 +1,25 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:thin_steel_pole", + "required": ["engineersdecor:thin_steel_pole"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + " PP", + " PP", + " PP" + ], + "key": { + "P": { + "item": "engineersdecor:thin_steel_pole", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:thick_steel_pole", + "count": 4 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thick_steel_pole_side_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thick_steel_pole_side_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd2abc1304c2231e9470ebf8b675295b9c9e690 GIT binary patch literal 402 zcmV;D0d4+?P)N+BkNz0pc4hj@7CKzu8q4eTDgaeQRfz~Pljrlv?REpe-8qhf%)D?_#ZXlMGLsgn zDnx|LTuJ-cTtuJ%RYjkj*uqtXyYm;Ps*Hv^keQ4z5E15_E1?B>-A(J@chdJu?3}iu zh+t+^6=sH+F~&euF|$ki&1L4V2VF5U5fR*-F$TwRtg+1O!mSZ@S6lslzhh?1Ial>> z&djcR5D{z30N(HSWu#7SE+QDcT`kn@^~&x~wi~*((abKc_73b-_7AjkRmF&i)m|sN w`|1GTJkK@CH#hpSf9VF=i-=eq?VOqM1KVY3zjmkYUjP6A07*qoM6N<$g4uDjxc~qF literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thick_steel_pole_top_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thick_steel_pole_top_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f670c4ace5467d2dacd97606681f0448d4f43f GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=Dh+K$tP>S|=w^@Q zBWv)d9_`#zV`heq6I&jfn7U@xCKs0Hl};`TR>jstPJ4Iv%mE%37Ntj=|4xbtP6@IK z)%SDBs?Rm@eDk|6_x7r#%IZq}O(7E}ZN6S}Y1hQ!@BbyAY`C-cTX}4_Z%O%ztm6}1 zJS~3vbf~=hy{>lomub~+9hqM53NzTQH+AcrnG3h<_WP6?{Q9@Jd+6I`R=1{bn?BA+ syBp#@`&N_iJIg2X7Pqd5{drXPS|=w^@SCTLV~EA+(n*1REe1T!bC(Ep6rcUO-dNt`Yt5RNr8$mH3tp*i zoO|o}XGMk`)^}uQa!yj{e7)~h+<)2U zO;h)%^&4KOo*#7IV!h_;4a?&9zTcr1A1dbQa)c+~sP($gh9`5Jg!X=ansa=o&~$fS zwa&*D%if#k?PQPYw+TC$f9K2sFL9G&4lZY!WS=u#iG7$cwe-F9y3}WrviAO;X<6%i lc5?CCuaXnOBERo@Tz6C=RMpA4IRF>}44$rjF6*2UngGs!l#KuY literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thin_steel_pole_top_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/thin_steel_pole_top_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..8a14fa402563933aa1c1782c62ac9aaf2f26e9ad GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=Dh+K$tP>S|=w11EZ*?i(`nz>DnO2z7_+X&6As21Re$d`L7+5=H{evR?h7tn{JNZ zQj2wOTW)W&Wa!{XWq$wlb>cj;BLSd^H`&ma3SZ`sT6NCUR)kcPz`ht4o4=uY~R=J1J0u8nbP(+`V2 z75+nEhl8&2y!l$SRJQ!MMW5%BcbS16aepSAX}DH;bd%0Xr8To6S7n$ks8D2D6{;@a zRm|_?np;->=679S$kdisVV8T;LXX;<7f+ZgaPrLaP3(dXo_{`AFIrZ__4Vt$>PfAC zcC0Qd;tvshUb$#%TWVxNnz-pyjRI3+!_7XXZ>|_#y=ePjU;D0k{w?J@ Date: Mon, 22 Apr 2019 14:00:25 +0200 Subject: [PATCH 04/15] Unused texture files cleanup, thin_steel_pole_recipe nerfed from 18 to 12 out stacks. --- .../assets/engineersdecor/lang/en_us.lang | 2 +- .../recipes/thin_steel_pole_recipe.json | 2 +- .../glass/window_glass_texture-orig.png | Bin 560 -> 0 bytes 1.13/readme.md | 19 +++++++++++------- meta/update.json | 3 ++- 5 files changed, 16 insertions(+), 10 deletions(-) delete mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/glass/window_glass_texture-orig.png diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index 0e4ae4c..5bbe86b 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -89,7 +89,7 @@ tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Sol and fuel. Place an external heater into a aux slot and connect power for electrical \ smelting speed boost. #----------------------------------------------------------------------------------------------------------- -tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo) +tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor) tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. #----------------------------------------------------------------------------------------------------------- diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe.json index da91bfa..163ebd6 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe.json @@ -20,6 +20,6 @@ }, "result": { "item": "engineersdecor:thin_steel_pole", - "count": 18 + "count": 12 } } diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/glass/window_glass_texture-orig.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/glass/window_glass_texture-orig.png deleted file mode 100644 index 4281eafc0e1115875982ef40232aa5e0b0df27d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmV-00?+-4P)<{A;z>k7R5;6(QcJEBK@4-^q`K=Ny%h){u7J4z#hBrB<-?-8VYYac zNKx5kTd4e*mF;6ltd#&%M7kRwMbM(6(yA&E0aZnJQ&pQvs&DQ9va7ng8$eZ6ktz|H zqS9-vh=|I}RaF%czcVw;jY?8TGBa!6_pxo8tE#%YiHMjP0U$He&bz$#$K!EOAYURP z03agL%y=;-PC2(SH2z`EIjbrus$W%As;b?c$8p3M!vv59U}mZ!s;a6Y;$v85Rz$>{ zb8_3Z@5gbho9&WUb+J}etEvJ(WM*a-0EmbHAiMiBNd+L?-D3ziUE#~7v;jHJkE#GG>jfVEb1cUxvwclWk! z{_*j#+?{K!#F-WV;Fj0j{d_(@ZUq3KW=0W_s;Yh8M?{p7yqT|Ky8GXG+csZoMODH` zYIk>L_FC(>-F{_WXT@LVB+05CRMoF_wdMBUhPzV$sqWtQeN~iHMMt%&gZwL_~IX-(68v?FMw5aj>fDek3AZ%K~0r+`GHmsXE&(Gi={?%PKV> yt12NNmGI$w{(7vpx3?XDu5|>^GUxQ;IMyE%(QC!g{s@Tx0000 Date: Fri, 26 Apr 2019 16:02:15 +0200 Subject: [PATCH 05/15] Recipe tuning. Stairs extended tooltip added. Tooltip documentation updated. Light opacity tuning. Panzer glass ambient occlusion tuning. Unused pole texture regions filled (optifine rendering). Brick wall cullfacing removed. Window models using mipped-cutout instead of cutout (issue #19). --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 12 ++ .../blocks/BlockDecorGlassBlock.java | 6 +- .../blocks/BlockDecorHorizontalSupport.java | 112 ++++++++++++++++++ .../blocks/BlockDecorStairs.java | 51 ++++++++ .../blocks/BlockDecorWindow.java | 2 +- .../wile/engineersdecor/blocks/ModBlocks.java | 11 +- .../blockstates/steel_double_t_support.json | 17 +++ .../blockstates/steel_framed_window.json | 2 +- .../blockstates/treated_wood_window.json | 2 +- .../assets/engineersdecor/lang/en_us.lang | 18 ++- .../assets/engineersdecor/lang/ru_ru.lang | 3 + .../steel_framed_window_submodel.json | 1 - .../treated_wood_window_submodel.json | 1 - .../steel_double_t_support_model.json | 67 +++++++++++ .../block/wall/clinker_brick_wall_side.json | 2 +- .../models/block/wall/concrete_wall_post.json | 1 - .../models/block/wall/concrete_wall_side.json | 1 - .../block/wall/slag_brick_wall_post.json | 1 - .../block/wall/slag_brick_wall_side.json | 1 - .../engineersdecor/recipes/_constants.json | 4 + ...e.json => clinker_brick_block_recipe.json} | 0 .../recipes/clinker_brick_wall_recipe.json | 1 - ... => concrete_wall_recipe_ie_required.json} | 1 - .../recipes/iron_inset_light_recipe.json | 4 +- .../recipes/metal_rung_ladder_recipe.json | 3 +- ....json => rebar_concrete_block_recipe.json} | 0 .../recipes/rebar_concrete_wall_recipe.json | 1 - ...slag.json => slag_brick_block_recipe.json} | 0 .../recipes/slag_brick_wall_recipe.json | 1 - .../iron_inset_light_recipe_standalone.json | 32 +++++ .../metal_rung_ladder_recipe_standalone.json | 25 ++++ .../metal_rung_steps_recipe_standalone.json | 25 ++++ .../panzerglass_block_recipe_standalone.json | 33 ++++++ ...bar_concrete_block_recipe_standalone.json} | 0 .../slag_brick_block_recipe_standalone.json} | 0 .../small_lab_furnace_recipe_standalone.json | 0 ...steel_framed_window_recipe_standalone.json | 29 +++++ .../thin_steel_pole_recipe_standalone.json} | 16 +-- ...wood_crafting_table_recipe_standalone.json | 0 ...treated_wood_ladder_recipe_standalone.json | 25 ++++ .../treated_wood_pole_recipe_standalone.json | 29 +++++ .../treated_wood_stool_recipe_standalone.json | 28 +++++ .../treated_wood_table_recipe_standalone.json | 29 +++++ ...treated_wood_window_recipe_standalone.json | 29 +++++ ...ted_wood_windowsill_recipe_standalone.json | 26 ++++ .../steel_double_t_support_recipe.json | 24 ++++ ...lign.json => thick_steel_pole_recipe.json} | 6 +- .../recipes/treated_wood_ladder_recipe.json | 2 +- .../recipes/treated_wood_pole_recipe.json | 6 +- .../recipes/treated_wood_stool_recipe.json | 1 - .../treated_wood_windowsill_recipe.json | 3 +- .../steel_double_t_support_end_texture.png | Bin 0 -> 527 bytes .../steel_double_t_support_side_texture.png | Bin 0 -> 527 bytes .../steel_double_t_support_top_texture.png | Bin 0 -> 527 bytes .../pole/treated_wood_pole_side_texture.png | Bin 293 -> 444 bytes .../pole/treated_wood_pole_top_texture.png | Bin 197 -> 452 bytes meta/update.json | 3 +- 59 files changed, 653 insertions(+), 49 deletions(-) create mode 100644 1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json rename 1.12/src/main/resources/assets/engineersdecor/recipes/{clinker_brick_recipe.json => clinker_brick_block_recipe.json} (100%) rename 1.12/src/main/resources/assets/engineersdecor/recipes/{concrete_wall_recipe_with_ie_installed.json => concrete_wall_recipe_ie_required.json} (97%) rename 1.12/src/main/resources/assets/engineersdecor/recipes/{rebar_concrete_recipe.json => rebar_concrete_block_recipe.json} (100%) rename 1.12/src/main/resources/assets/engineersdecor/recipes/{slag_brick_recipe_with_slag.json => slag_brick_block_recipe.json} (100%) create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/iron_inset_light_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/metal_rung_ladder_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/metal_rung_steps_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/panzerglass_block_recipe_standalone.json rename 1.12/src/main/resources/assets/engineersdecor/recipes/{rebar_concrete_recipe_standalone.json => standalone/rebar_concrete_block_recipe_standalone.json} (100%) rename 1.12/src/main/resources/assets/engineersdecor/recipes/{slag_brick_recipe_without_slag.json => standalone/slag_brick_block_recipe_standalone.json} (100%) rename 1.12/src/main/resources/assets/engineersdecor/recipes/{ => standalone}/small_lab_furnace_recipe_standalone.json (100%) create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/steel_framed_window_recipe_standalone.json rename 1.12/src/main/resources/assets/engineersdecor/recipes/{thin_steel_pole_recipe_rightalign.json => standalone/thin_steel_pole_recipe_standalone.json} (53%) rename 1.12/src/main/resources/assets/engineersdecor/recipes/{ => standalone}/treated_wood_crafting_table_recipe_standalone.json (100%) create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_ladder_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_pole_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_stool_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_table_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_window_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_windowsill_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/steel_double_t_support_recipe.json rename 1.12/src/main/resources/assets/engineersdecor/recipes/{thin_steel_pole_recipe_leftalign.json => thick_steel_pole_recipe.json} (92%) create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_end_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_side_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_top_texture.png diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 1f35193..46f3a09 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b3 +version_engineersdecor=1.0.4-b4 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 69f0d43..d209192 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).", "1.0.4-b3": "[A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles.\n[A] Added support head/foot components for thin and thick steel poles.", "1.0.4-b2": "[A] Added position dependent texture variation to clinker wall, slag brick wall and rebar concrete wall.", "1.0.4-b1": "[A] Crafting table: JEI integration for recipe placement added.\n[A] Crafting table: History re-fab added, allowing to quickly select and re-craft recent recipes. Selection with arrow buttons, ingredient placement by clicking the result slot. Automatic item distribution on shift-click. Quick-move buttons.\n[F] Crafting table textures modified to prevent optifine glitches on the edges of the legs.", @@ -27,6 +28,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b3" + "1.12.2-latest": "1.0.4-b4" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index 53d6d1c..3c7cc14 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,18 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b4 [F] Clinker/slag brick wall side cullfacing disabled to prevent + texture leaks when connecting to concrete walls. + [F] Unused treated wood pole texture regions filled (optifine). + [F] Using mipped cutout format for window multi-layer model + (issue #19, thanks rixmswey for reporting and details). + [M] Recipe tuning, added standalone recipe for all mod blocks. + [M] In-game CTRL-SHIFT tooltip documentation updated. + [M] Panzer glass block: Ambient occlusion and light opacity tuned. + [M] Stairs: Light opacity tuned. + [A] Tooltip documentation added for mod stairs. + [E] Horizontal steel double-T support beam (config:experimental). + - v1.0.4-b3 [A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles. [A] Added support head/foot components for thin and thick steel poles. diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java index 468f461..3bbe38e 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java @@ -50,7 +50,7 @@ public class BlockDecorGlassBlock extends BlockDecor @SideOnly(Side.CLIENT) @SuppressWarnings("deprecation") public float getAmbientOcclusionLightValue(IBlockState state) - { return 1.0F; } + { return 0.9F; } @Override public boolean isOpaqueCube(IBlockState state) @@ -59,7 +59,7 @@ public class BlockDecorGlassBlock extends BlockDecor @Override @SuppressWarnings("deprecation") public boolean isFullCube(IBlockState state) - { return false; } + { return true; } @Override @SuppressWarnings("deprecation") @@ -68,7 +68,7 @@ public class BlockDecorGlassBlock extends BlockDecor @Override public int getLightOpacity(IBlockState state, IBlockAccess world, BlockPos pos) - { return 0; } + { return 2; } @Override public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java new file mode 100644 index 0000000..7d96ba5 --- /dev/null +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java @@ -0,0 +1,112 @@ +/* + * @file BlockDecorDirected.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Smaller (cutout) block with a defined facing. + */ +package wile.engineersdecor.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyBool; +import wile.engineersdecor.detail.ModAuxiliaries; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import net.minecraft.world.IBlockAccess; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Arrays; + + +public class BlockDecorHorizontalSupport extends BlockDecor +{ + public static final PropertyBool EASTWEST = PropertyBool.create("eastwest"); + protected final ArrayList AABBs; + + public BlockDecorHorizontalSupport(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB) + { + super(registryName, config|CFG_HORIZIONTAL, material, hardness, resistance, sound); + final boolean is_horizontal = ((config & CFG_HORIZIONTAL)!=0); + AABBs = new ArrayList(Arrays.asList( + ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.NORTH, true), + ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.WEST, true) + )); + + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { return false; } + + @Override + public boolean isFullCube(IBlockState state) + { return false; } + + @Override + public boolean isNormalCube(IBlockState state) + { return false; } + + @Override + public boolean canCreatureSpawn(IBlockState state, IBlockAccess world, BlockPos pos, net.minecraft.entity.EntityLiving.SpawnPlacementType type) + { return false; } + + @Override + @SuppressWarnings("deprecation") + public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) + { return BlockFaceShape.UNDEFINED; } + + @Override + @SuppressWarnings("deprecation") + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { return AABBs.get(state.getValue(EASTWEST) ? 0x1 : 0x0); } + + @Override + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) + { return getBoundingBox(state, world, pos); } + + @Override + public IBlockState getStateFromMeta(int meta) + { return this.getDefaultState().withProperty(EASTWEST, ((meta & 0x1) != 0)); } + + @Override + public int getMetaFromState(IBlockState state) + { return state.getValue(EASTWEST) ? 0x1 : 0x0; } + + @Override + protected BlockStateContainer createBlockState() + { return new BlockStateContainer(this, EASTWEST); } + + @Override + public IBlockState withRotation(IBlockState state, Rotation rot) + { return (rot==Rotation.CLOCKWISE_180) ? state : state.withProperty(EASTWEST, !state.getValue(EASTWEST)); } + + @Override + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { return state; } + + @Override + @SuppressWarnings("deprecation") + public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) + { return super.canPlaceBlockOnSide(world, pos, side); } + + @Override + @SuppressWarnings("deprecation") + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + facing = placer.getHorizontalFacing(); + return getDefaultState().withProperty(EASTWEST, (facing==EnumFacing.EAST)||(facing==EnumFacing.WEST)); + } + +} diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java index b30705a..8623453 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java @@ -8,9 +8,21 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.block.material.EnumPushReaction; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.detail.ModAuxiliaries; + import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; public class BlockDecorStairs extends net.minecraft.block.BlockStairs @@ -21,10 +33,49 @@ public class BlockDecorStairs extends net.minecraft.block.BlockStairs setCreativeTab(ModEngineersDecor.CREATIVE_TAB_ENGINEERSDECOR); setRegistryName(ModEngineersDecor.MODID, registryName); setTranslationKey(ModEngineersDecor.MODID + "." + registryName); + setLightLevel(0); + setLightOpacity(64); } + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) + { ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true); } + + @Override + @SuppressWarnings("deprecation") + public boolean isOpaqueCube(IBlockState state) + { return false; } + + @Override + @SuppressWarnings("deprecation") + public boolean isFullCube(IBlockState state) + { return false; } + + @Override + @SuppressWarnings("deprecation") + public boolean isNormalCube(IBlockState state) + { return false; } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { return 0; } + @Override public boolean canSpawnInBlock() { return false; } + @Override + public boolean canCreatureSpawn(IBlockState state, IBlockAccess world, BlockPos pos, net.minecraft.entity.EntityLiving.SpawnPlacementType type) + { return false; } + + @Override + @SuppressWarnings("deprecation") + public EnumPushReaction getPushReaction(IBlockState state) + { return EnumPushReaction.NORMAL; } + + @Override + public boolean hasTileEntity(IBlockState state) + { return false; } + } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java index 74f31f5..18ddb0c 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java @@ -35,7 +35,7 @@ public class BlockDecorWindow extends BlockDecorDirected @Override @SideOnly(Side.CLIENT) public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) - { return (layer==BlockRenderLayer.CUTOUT) || (layer==BlockRenderLayer.TRANSLUCENT); } + { return (layer==BlockRenderLayer.CUTOUT_MIPPED) || (layer==BlockRenderLayer.TRANSLUCENT); } @Override @SideOnly(Side.CLIENT) diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index 86adbe4..1284018 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -169,6 +169,14 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(0,0,15.6, 16,16,16.0) ); + public static final BlockDecorHorizontalSupport STEEL_DOUBLE_T_SUPPORT = new BlockDecorHorizontalSupport( + "steel_double_t_support", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, + Material.IRON, 1.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(5,11,0, 11,16,16) + ); + + private static final Block modBlocks[] = { TREATED_WOOD_CRAFTING_TABLE, CLINKER_BRICK_BLOCK, @@ -201,7 +209,8 @@ public class ModBlocks THIN_STEEL_POLE, THICK_STEEL_POLE, THIN_STEEL_POLE_HEAD, - THICK_STEEL_POLE_HEAD + THICK_STEEL_POLE_HEAD, + STEEL_DOUBLE_T_SUPPORT }; private static final Block devBlocks[] = { diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json new file mode 100644 index 0000000..898457d --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "engineersdecor:hsupport/steel_double_t_support_model", + "textures": { + "particle": "engineersdecor:blocks/hsupport/steel_double_t_support_side_texture", + "side": "engineersdecor:blocks/hsupport/steel_double_t_support_side_texture", + "top": "engineersdecor:blocks/hsupport/steel_double_t_support_top_texture", + "end": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture" + } + }, + "variants": { + "normal": [{}], + "eastwest": { "false":{"y":0}, "true": {"y":90}}, + "inventory": [{}] + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_framed_window.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_framed_window.json index f8d2f86..6b4f0ab 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_framed_window.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_framed_window.json @@ -5,7 +5,7 @@ "transform": "forge:default-block", "custom": { "base": "engineersdecor:steel_framed_window#frame", - "Cutout": "engineersdecor:steel_framed_window#frame", + "Mipped Cutout": "engineersdecor:steel_framed_window#frame", "Translucent": "engineersdecor:steel_framed_window#pane" } }, diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/treated_wood_window.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/treated_wood_window.json index 9be1120..65d2ea8 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/treated_wood_window.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/treated_wood_window.json @@ -5,7 +5,7 @@ "transform": "forge:default-block", "custom": { "base": "engineersdecor:treated_wood_window#frame", - "Cutout": "engineersdecor:treated_wood_window#frame", + "Mipped Cutout": "engineersdecor:treated_wood_window#frame", "Translucent": "engineersdecor:treated_wood_window#pane" } }, diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index 5bbe86b..ec57b44 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -12,13 +12,13 @@ engineersdecor.tooltip.hint.help=§6[§9CTRL-SHIFT§r Help§6]§r #----------------------------------------------------------------------------------------------------------- # Stone/"ceramic material" based blocks #----------------------------------------------------------------------------------------------------------- -tile.engineersdecor.clinker_brick_block.name=Clinker brick +tile.engineersdecor.clinker_brick_block.name=Clinker brick block tile.engineersdecor.clinker_brick_block.help=§6A brick block with position dependent texture variations.§r\nLooks slightly darker and more color intensive than the vanilla brick block. -tile.engineersdecor.slag_brick_block.name=Slag brick +tile.engineersdecor.slag_brick_block.name=Slag brick block tile.engineersdecor.slag_brick_block.help=§6A gray-brown brick block with position dependent texture variations. -tile.engineersdecor.rebar_concrete.name=Rebar concrete +tile.engineersdecor.rebar_concrete.name=Rebar concrete block tile.engineersdecor.rebar_concrete.help=§6Steel reinforced concrete block.§r Expensive but Creeper-proof like obsidian. -tile.engineersdecor.panzerglass_block.name=Panzer glass +tile.engineersdecor.panzerglass_block.name=Panzer glass block tile.engineersdecor.panzerglass_block.help=§6Reinforced glass block.§r Expensive, explosion-proof. Dark gray tint, faint structural lines visible, multi texture for seemless look. tile.engineersdecor.rebar_concrete_tile.name=Rebar concrete tile tile.engineersdecor.rebar_concrete_tile.help=§6Steel reinforced concrete tile.§r Expensive but Creeper-proof like obsidian. @@ -49,7 +49,7 @@ tile.engineersdecor.rebar_concrete_tile_stairs.name=Rebar concrete tile stairs tile.engineersdecor.rebar_concrete_tile_stairs.help=§6Steel reinforced concrete tile stairs.§r Expensive but Creeper-proof like obsidian. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.treated_wood_pole.name=Straight treated wood pole -tile.engineersdecor.treated_wood_pole.help=§6Straight pole fragment with the diameter of a wire relay.§r\n\ +tile.engineersdecor.treated_wood_pole.help=§6Straight pole fragment with a diameter of a wire relay.§r\n\ Can be useful as alternative to the wire posts if special special lengths are needed, \ or as support for structures. tile.engineersdecor.treated_wood_pole_head.name=Straight treated wood pole head/foot @@ -70,7 +70,10 @@ tile.engineersdecor.treated_wood_table.help=§6Robust four-legged wood table.§r tile.engineersdecor.treated_wood_stool.name=Treated wood stool tile.engineersdecor.treated_wood_stool.help=§6Robust wood stool.§r Indoor and outdoor use. tile.engineersdecor.treated_wood_crafting_table.name=Treated wood crafting table -tile.engineersdecor.treated_wood_crafting_table.help=§6Robust and weather-proof. Eight storage slots. Keeps inventory. +tile.engineersdecor.treated_wood_crafting_table.help=§6Robust and weather-proof.§r Eight storage slots, keeps inventory, no vanilla recipe book.\n\ + Click up/down arrow buttons for crafting history selection, output slot for item placement, X-button \ + to clear crafting grid and history. Shift-click stack: player-to-storage stack transfer when crafting \ + grid empty, otherwise player-to-grid stack transfer. Automatically distributes the clicked stack. tile.engineersdecor.iron_inset_light.name=Inset light tile.engineersdecor.iron_inset_light.help=§6Small glowstone light source, sunk into the floor, ceiling or wall.§r\n\ Useful to light up places where electrical light installations are problematic.\ @@ -89,6 +92,9 @@ tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Sol and fuel. Place an external heater into a aux slot and connect power for electrical \ smelting speed boost. #----------------------------------------------------------------------------------------------------------- +tile.engineersdecor.steel_double_t_support.name=Steel double T support +tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment. +#----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor) tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang index dd469bc..618c5a3 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang @@ -85,6 +85,9 @@ tile.engineersdecor.steel_framed_window.name=Окно со стальной ра tile.engineersdecor.small_lab_furnace.name=Компактная лабораторная печь tile.engineersdecor.small_lab_furnace.help=§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива - сверху. Немного горячее чем каменная, поэтому быстрее. Два внутренних слота для ввода, выхода и топлива. #----------------------------------------------------------------------------------------------------------- +tile.engineersdecor.steel_double_t_support.name=Steel double T support +#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment. +#----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo) #tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/furniture/steel_framed_window_submodel.json b/1.12/src/main/resources/assets/engineersdecor/models/block/furniture/steel_framed_window_submodel.json index 96a9cc4..1f22774 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/furniture/steel_framed_window_submodel.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/furniture/steel_framed_window_submodel.json @@ -1,6 +1,5 @@ { "parent": "block/cube", - "ambientocclusion": false, "textures": { "frame": "engineersdecor:blocks/iestyle/steel_texture", "particle": "engineersdecor:blocks/iestyle/steel_texture" diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_window_submodel.json b/1.12/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_window_submodel.json index e591e0e..6efae70 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_window_submodel.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_window_submodel.json @@ -1,6 +1,5 @@ { "parent": "block/cube", - "ambientocclusion": false, "textures": { "frame": "engineersdecor:blocks/iestyle/treated_wood_rough_texture", "particle": "engineersdecor:blocks/iestyle/treated_wood_rough_texture" diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json new file mode 100644 index 0000000..cee71a6 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json @@ -0,0 +1,67 @@ +{ + "parent": "block/cube", + "textures": { + "end": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture", + "side": "engineersdecor:blocks/hsupport/steel_double_t_support_side_texture", + "top": "engineersdecor:blocks/hsupport/steel_double_t_support_top_texture", + "particle": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture" + }, + "elements": [ + { + "from": [5, 15, 0], + "to": [11, 16, 16], + "faces": { + "north": {"texture": "#end"}, + "east": {"texture": "#side"}, + "south": {"texture": "#end"}, + "west": {"texture": "#side"}, + "up": {"texture": "#top"}, + "down": {"texture": "#top"} + } + }, + { + "from": [9, 12, 0], + "to": [10, 15, 16], + "faces": { + "north": {"texture": "#end"}, + "east": {"texture": "#side"}, + "south": {"texture": "#end"}, + "west": {"texture": "#side"} + } + }, + { + "from": [6, 12, 0], + "to": [7, 15, 16], + "faces": { + "north": {"texture": "#end"}, + "east": {"texture": "#side"}, + "south": {"texture": "#end"}, + "west": {"texture": "#side"} + } + }, + { + "from": [5, 11, 0], + "to": [11, 12, 16], + "faces": { + "north": {"texture": "#end"}, + "east": {"texture": "#side"}, + "south": {"texture": "#end"}, + "west": {"texture": "#side"}, + "up": {"texture": "#top"}, + "down": {"texture": "#top"} + } + } + ], + "display": { + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_side.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_side.json index 7c1db34..a32a7bc 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_side.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/clinker_brick_wall_side.json @@ -10,7 +10,7 @@ "from": [4.125, 0, 0], "to": [11.875, 15.98, 8], "faces": { - "north": {"texture": "#wall", "cullface": "north"}, + "north": {"texture": "#wall"}, "east": {"texture": "#wall"}, "west": {"texture": "#wall"}, "up": {"texture": "#top"}, diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_post.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_post.json index d88fb8a..6a5d732 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_post.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_post.json @@ -1,5 +1,4 @@ { - "credit": "I made this with the Blockbench", "textures": { "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture0", "particle": "engineersdecor:blocks/concrete/rebar_concrete_texture0" diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_side.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_side.json index de382a6..495ac64 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_side.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_side.json @@ -1,5 +1,4 @@ { - "credit": "I made this with the Blockbench", "textures": { "wall": "engineersdecor:blocks/concrete/rebar_concrete_texture0", "particle": "engineersdecor:blocks/concrete/rebar_concrete_texture0" diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_post.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_post.json index a3309be..78cfbde 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_post.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_post.json @@ -1,5 +1,4 @@ { - "credit": "I made this with the Blockbench", "textures": { "postside": "engineersdecor:blocks/slag_brick/slag_brick_pole_side", "top": "engineersdecor:blocks/slag_brick/slag_brick_top", diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_side.json b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_side.json index 7a228bc..67c0eac 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_side.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/wall/slag_brick_wall_side.json @@ -1,5 +1,4 @@ { - "credit": "I made this with the Blockbench", "textures": { "wall": "engineersdecor:blocks/slag_brick/slag_brick_wall0", "top": "engineersdecor:blocks/slag_brick/slag_brick_top", diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json index 36329d4..634950b 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json @@ -55,6 +55,10 @@ "ingredient": { "type": "forge:ore_dict", "ore": "plankWood" }, "name": "plankWood" }, + { + "ingredient": { "type": "forge:ore_dict", "ore": "slabWood" }, + "name": "slabWood" + }, { "ingredient": { "type": "forge:ore_dict", "ore": "stickWood" }, "name": "stickWood" diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/clinker_brick_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/clinker_brick_block_recipe.json similarity index 100% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/clinker_brick_recipe.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/clinker_brick_block_recipe.json diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/clinker_brick_wall_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/clinker_brick_wall_recipe.json index 89aae07..6a3be11 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/clinker_brick_wall_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/clinker_brick_wall_recipe.json @@ -7,7 +7,6 @@ ], "type": "minecraft:crafting_shaped", "pattern": [ - " ", "BBB", "BBB" ], diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/concrete_wall_recipe_with_ie_installed.json b/1.12/src/main/resources/assets/engineersdecor/recipes/concrete_wall_recipe_ie_required.json similarity index 97% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/concrete_wall_recipe_with_ie_installed.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/concrete_wall_recipe_ie_required.json index 87a9306..1a94e64 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/concrete_wall_recipe_with_ie_installed.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/concrete_wall_recipe_ie_required.json @@ -8,7 +8,6 @@ ], "type": "minecraft:crafting_shaped", "pattern": [ - " ", "CCC", "CCC" ], diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/iron_inset_light_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/iron_inset_light_recipe.json index 9fec78e..c7cce26 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/iron_inset_light_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/iron_inset_light_recipe.json @@ -2,12 +2,12 @@ "conditions": [ { "type": "engineersdecor:grc", - "result": "engineersdecor:iron_inset_light" + "result": "engineersdecor:iron_inset_light", + "required": ["immersiveengineering:material"] } ], "type": "minecraft:crafting_shaped", "pattern": [ - " ", "GGG", "PLP" ], diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/metal_rung_ladder_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/metal_rung_ladder_recipe.json index 9fdde71..2f51f83 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/metal_rung_ladder_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/metal_rung_ladder_recipe.json @@ -9,8 +9,7 @@ "type": "minecraft:crafting_shaped", "pattern": [ "S S", - "SSS", - " " + "SSS" ], "key": { "S": { diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_block_recipe.json similarity index 100% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_recipe.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_block_recipe.json diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_wall_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_wall_recipe.json index 4ec19fa..61baf76 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_wall_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_wall_recipe.json @@ -7,7 +7,6 @@ ], "type": "minecraft:crafting_shaped", "pattern": [ - " ", "CCC", "CCC" ], diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_recipe_with_slag.json b/1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_block_recipe.json similarity index 100% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_recipe_with_slag.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_block_recipe.json diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_wall_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_wall_recipe.json index d5f3e25..a140b2a 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_wall_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_wall_recipe.json @@ -7,7 +7,6 @@ ], "type": "minecraft:crafting_shaped", "pattern": [ - " ", "BBB", "BBB" ], diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/iron_inset_light_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/iron_inset_light_recipe_standalone.json new file mode 100644 index 0000000..c344c33 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/iron_inset_light_recipe_standalone.json @@ -0,0 +1,32 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:iron_inset_light", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "GGG", + "PLP" + ], + "key": { + "P": { + "item": "#ingotIron", + "data": 0 + }, + "L": { + "item": "#luminescentBlock", + "data": 0 + }, + "G": { + "item": "#paneGlass", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:iron_inset_light", + "count": 8 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/metal_rung_ladder_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/metal_rung_ladder_recipe_standalone.json new file mode 100644 index 0000000..2748ac9 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/metal_rung_ladder_recipe_standalone.json @@ -0,0 +1,25 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:metal_rung_ladder", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "S S", + "SSS", + " " + ], + "key": { + "S": { + "item": "#ingotIron", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:metal_rung_ladder", + "count": 4 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/metal_rung_steps_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/metal_rung_steps_recipe_standalone.json new file mode 100644 index 0000000..1f8b73b --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/metal_rung_steps_recipe_standalone.json @@ -0,0 +1,25 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:metal_rung_steps", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + " SS", + "SS ", + " SS" + ], + "key": { + "S": { + "item": "#ingotIron", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:metal_rung_steps", + "count": 4 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/panzerglass_block_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/panzerglass_block_recipe_standalone.json new file mode 100644 index 0000000..4f09ade --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/panzerglass_block_recipe_standalone.json @@ -0,0 +1,33 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:panzerglass_block", + "missing": ["immersiveengineering:stone_decoration"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "SGS", + "GDG", + "SGS" + ], + "key": { + "G": { + "item": "#blockGlass", + "data": 0 + }, + "S": { + "item": "#ingotIron", + "data": 0 + }, + "D": { + "item": "#itemDiamond", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:panzerglass_block", + "count": 8 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/rebar_concrete_block_recipe_standalone.json similarity index 100% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/rebar_concrete_recipe_standalone.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/rebar_concrete_block_recipe_standalone.json diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_recipe_without_slag.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/slag_brick_block_recipe_standalone.json similarity index 100% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/slag_brick_recipe_without_slag.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/slag_brick_block_recipe_standalone.json diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/small_lab_furnace_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/small_lab_furnace_recipe_standalone.json similarity index 100% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/small_lab_furnace_recipe_standalone.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/small_lab_furnace_recipe_standalone.json diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/steel_framed_window_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/steel_framed_window_recipe_standalone.json new file mode 100644 index 0000000..53b7e07 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/steel_framed_window_recipe_standalone.json @@ -0,0 +1,29 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:steel_framed_window", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "WGW", + "GGG", + "WGW" + ], + "key": { + "W": { + "item": "#ingotIron", + "data": 0 + }, + "G": { + "item": "#paneGlass", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:steel_framed_window", + "count": 9 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_rightalign.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/thin_steel_pole_recipe_standalone.json similarity index 53% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_rightalign.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/thin_steel_pole_recipe_standalone.json index 6c57651..67409b4 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_rightalign.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/thin_steel_pole_recipe_standalone.json @@ -3,23 +3,23 @@ { "type": "engineersdecor:grc", "result": "engineersdecor:thin_steel_pole", - "required": ["engineersdecor:thin_steel_pole"] + "missing": ["immersiveengineering:material"] } ], "type": "minecraft:crafting_shaped", "pattern": [ - " PP", - " PP", - " PP" + " S", + " S ", + "S " ], "key": { - "P": { - "item": "engineersdecor:thin_steel_pole", + "S": { + "item": "#ingotIron", "data": 0 } }, "result": { - "item": "engineersdecor:thick_steel_pole", - "count": 4 + "item": "engineersdecor:thin_steel_pole", + "count": 12 } } diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_crafting_table_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_crafting_table_recipe_standalone.json similarity index 100% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_crafting_table_recipe_standalone.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_crafting_table_recipe_standalone.json diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_ladder_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_ladder_recipe_standalone.json new file mode 100644 index 0000000..69cf9c6 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_ladder_recipe_standalone.json @@ -0,0 +1,25 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:treated_wood_ladder", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "LL", + "LL", + "LL" + ], + "key": { + "L": { + "item": "minecraft:ladder", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:treated_wood_ladder", + "count": 6 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_pole_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_pole_recipe_standalone.json new file mode 100644 index 0000000..074058b --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_pole_recipe_standalone.json @@ -0,0 +1,29 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:treated_wood_pole", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "S", + "W", + "W" + ], + "key": { + "W": { + "item": "#plankWood", + "data": 0 + }, + "S": { + "item": "#slabWood", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:treated_wood_pole", + "count": 6 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_stool_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_stool_recipe_standalone.json new file mode 100644 index 0000000..3a3c78c --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_stool_recipe_standalone.json @@ -0,0 +1,28 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:treated_wood_stool", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "WWW", + " S " + ], + "key": { + "W": { + "item": "#slabWood", + "data": 0 + }, + "S": { + "item": "engineersdecor:treated_wood_pole", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:treated_wood_stool", + "count": 1 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_table_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_table_recipe_standalone.json new file mode 100644 index 0000000..b9e954b --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_table_recipe_standalone.json @@ -0,0 +1,29 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:treated_wood_table", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "WWW", + "S S", + "S S" + ], + "key": { + "W": { + "item": "#slabWood", + "data": 0 + }, + "S": { + "item": "engineersdecor:treated_wood_pole", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:treated_wood_table", + "count": 1 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_window_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_window_recipe_standalone.json new file mode 100644 index 0000000..05948b1 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_window_recipe_standalone.json @@ -0,0 +1,29 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:treated_wood_window", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "WGW", + "GGG", + "WGW" + ], + "key": { + "W": { + "item": "#slabWood", + "data": 0 + }, + "G": { + "item": "#paneGlass", + "data": 0 + } + }, + "result": { + "item": "engineersdecor:treated_wood_window", + "count": 9 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_windowsill_recipe_standalone.json b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_windowsill_recipe_standalone.json new file mode 100644 index 0000000..4d3c63b --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_windowsill_recipe_standalone.json @@ -0,0 +1,26 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:treated_wood_windowsill", + "missing": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "WWW", + "S S" + ], + "key": { + "W": { + "item": "#slabWood" + }, + "S": { + "item": "engineersdecor:treated_wood_pole" + } + }, + "result": { + "item": "engineersdecor:treated_wood_windowsill", + "count": 4 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/steel_double_t_support_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/steel_double_t_support_recipe.json new file mode 100644 index 0000000..64741fa --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/steel_double_t_support_recipe.json @@ -0,0 +1,24 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:steel_double_t_support", + "required": ["engineersdecor:thin_steel_pole"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "PPP", + " P ", + "PPP" + ], + "key": { + "P": { + "item": "engineersdecor:thin_steel_pole" + } + }, + "result": { + "item": "engineersdecor:steel_double_t_support", + "count": 6 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_leftalign.json b/1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_recipe.json similarity index 92% rename from 1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_leftalign.json rename to 1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_recipe.json index e7554e1..3c14d5b 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/thin_steel_pole_recipe_leftalign.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/thick_steel_pole_recipe.json @@ -8,9 +8,9 @@ ], "type": "minecraft:crafting_shaped", "pattern": [ - "PP ", - "PP ", - "PP " + "PP", + "PP", + "PP" ], "key": { "P": { diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_ladder_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_ladder_recipe.json index cd81662..8546d3f 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_ladder_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_ladder_recipe.json @@ -20,6 +20,6 @@ }, "result": { "item": "engineersdecor:treated_wood_ladder", - "count": 4 + "count": 3 } } diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_pole_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_pole_recipe.json index 62330e4..801bc97 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_pole_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_pole_recipe.json @@ -8,9 +8,9 @@ ], "type": "minecraft:crafting_shaped", "pattern": [ - " S ", - " W ", - " W " + "S", + "W", + "W" ], "key": { "W": { diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_stool_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_stool_recipe.json index 92fd712..85cdeb1 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_stool_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_stool_recipe.json @@ -8,7 +8,6 @@ ], "type": "minecraft:crafting_shaped", "pattern": [ - " ", "WWW", " S " ], diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_windowsill_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_windowsill_recipe.json index 15a9277..95ddba1 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_windowsill_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/treated_wood_windowsill_recipe.json @@ -9,8 +9,7 @@ "type": "minecraft:crafting_shaped", "pattern": [ "WWW", - "S S", - " " + "S S" ], "key": { "W": { diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_end_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_end_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..9584364c0f1de8429b45711d84ccc701c577dd9f GIT binary patch literal 527 zcmV+q0`UEbP)VGd000McNliru;{pi{B{-AiBuoGR0h~!h zK~yNuJ(63l!!QU$c^D_LQ*~9{|5932iQ@(v?g!HSLw>-_8SwRbrIg$~r8LF>004-B znGrFiq^itpW{8+X1ORf*DJ5nmqA^C!834>IZixsHd+%mO*L9hhyEC(@B4VvoL=X`G zR5hj{Vtk`giipH%6!(22;=b=GrFC5aV9uFyCL(60F$N-*QdBhz%sEBmIF3?E?>*E; zmpLcJIA)G!%$##(=1{ord(OGm8gH1H=A4L#h^;jd2_V;X5m5j*j^nzn7^|w3b4J8v zSwv)6mUt9S0#um%hejd#zVF`q7-Qe}Ip?x0+qS7{bp3w6IcIk#A_|mdR%-=-)|#re z)&Su5`<>_ccsy#Y5$>Fmh$!HwDiN*gno@c`pCVF9A)?RcbKkeSyStesW}b6K?5(x1 zK}5%Kgy>RA2zGZ7p*g3!pXbTU+qRk67{km0V$Qj>773V{suDAY@BcuE==b}%dx$i% z_xoK+8DlVW8e_x?j4>kYm;eCo-dYQEkqiK&u%fEHcM&nOKoK8e$D)WO`UAb#ODa19 R!+QV#002ovPDHLkV1m?9;k*C< literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_side_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_side_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..9584364c0f1de8429b45711d84ccc701c577dd9f GIT binary patch literal 527 zcmV+q0`UEbP)VGd000McNliru;{pi{B{-AiBuoGR0h~!h zK~yNuJ(63l!!QU$c^D_LQ*~9{|5932iQ@(v?g!HSLw>-_8SwRbrIg$~r8LF>004-B znGrFiq^itpW{8+X1ORf*DJ5nmqA^C!834>IZixsHd+%mO*L9hhyEC(@B4VvoL=X`G zR5hj{Vtk`giipH%6!(22;=b=GrFC5aV9uFyCL(60F$N-*QdBhz%sEBmIF3?E?>*E; zmpLcJIA)G!%$##(=1{ord(OGm8gH1H=A4L#h^;jd2_V;X5m5j*j^nzn7^|w3b4J8v zSwv)6mUt9S0#um%hejd#zVF`q7-Qe}Ip?x0+qS7{bp3w6IcIk#A_|mdR%-=-)|#re z)&Su5`<>_ccsy#Y5$>Fmh$!HwDiN*gno@c`pCVF9A)?RcbKkeSyStesW}b6K?5(x1 zK}5%Kgy>RA2zGZ7p*g3!pXbTU+qRk67{km0V$Qj>773V{suDAY@BcuE==b}%dx$i% z_xoK+8DlVW8e_x?j4>kYm;eCo-dYQEkqiK&u%fEHcM&nOKoK8e$D)WO`UAb#ODa19 R!+QV#002ovPDHLkV1m?9;k*C< literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_top_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_top_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..9584364c0f1de8429b45711d84ccc701c577dd9f GIT binary patch literal 527 zcmV+q0`UEbP)VGd000McNliru;{pi{B{-AiBuoGR0h~!h zK~yNuJ(63l!!QU$c^D_LQ*~9{|5932iQ@(v?g!HSLw>-_8SwRbrIg$~r8LF>004-B znGrFiq^itpW{8+X1ORf*DJ5nmqA^C!834>IZixsHd+%mO*L9hhyEC(@B4VvoL=X`G zR5hj{Vtk`giipH%6!(22;=b=GrFC5aV9uFyCL(60F$N-*QdBhz%sEBmIF3?E?>*E; zmpLcJIA)G!%$##(=1{ord(OGm8gH1H=A4L#h^;jd2_V;X5m5j*j^nzn7^|w3b4J8v zSwv)6mUt9S0#um%hejd#zVF`q7-Qe}Ip?x0+qS7{bp3w6IcIk#A_|mdR%-=-)|#re z)&Su5`<>_ccsy#Y5$>Fmh$!HwDiN*gno@c`pCVF9A)?RcbKkeSyStesW}b6K?5(x1 zK}5%Kgy>RA2zGZ7p*g3!pXbTU+qRk67{km0V$Qj>773V{suDAY@BcuE==b}%dx$i% z_xoK+8DlVW8e_x?j4>kYm;eCo-dYQEkqiK&u%fEHcM&nOKoK8e$D)WO`UAb#ODa19 R!+QV#002ovPDHLkV1m?9;k*C< literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/treated_wood_pole_side_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/treated_wood_pole_side_texture.png index 533f85240f65c1c8ca30c4efd299f26a1ecd747e..478d321f5cb816ae38c657b6e4a77cbd3ab819c9 100644 GIT binary patch delta 398 zcmV;90dfAN0=xr|Bo78+OGiWi{{a60|De66laV18e*s)cL_t(I%YBnEmK!k)Lq8yS zw@8r#IsZw}FB86rqw%0FeMN<3#q~E`O#uk=1j|4wHZ`@ZgY?AQjzUY7wIO?k! z^X62Cj(}Y#gap(2R%;|ISk-jG>HrX6RS|a6w5jUn*RAgxOp9UBUD#sPqS-^oFm&jI zF-&*?y+o4kzAfa9X27hXA%13Uln{k2yhHb#r)UVka@zKRAay{RN3SH#(F0 su(e^Q@IJd3`GBo zou#1K6L1jj{~q_?0#p= diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/treated_wood_pole_top_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pole/treated_wood_pole_top_texture.png index 46051877c8d329a3ffa90ca81bf3eef6f2917e5d..33a66c4b37cce7ebedcbd54362474f1f495adfdc 100644 GIT binary patch delta 406 zcmV;H0crll0mK84Bo78+OGiWi{{a60|De66laV18e*t7kL_t(I%YBngt`tEGgFh!V zj|B@3z&*JCsX&^k#4J)hdOrh^dew1ayBz)c`NI(+B(9R+`?nkSU1S8d`F-ECK{lNJ zswQ|*)ut_A8ikNxg}(F#5+T^tw9ReW|w)Um2_r8KS$05W69qwf4Bc9!DIw)>vm*7+pHDXV4K?t79PDTXVxX*&%H*Y_5c_IH;^$B0M<&e%McI} zD>R!zM2Kn+pp89#R5c1AiP#M*#Vj_vnhar}+oXc}VC;a`85%1@m63QlK8EEp6qz|J zUsQlc-!X6H3`xNSdCNrNgZtIymSTN=LV!mZd}wx=c2V85;g&l8-eExKu<$V`P8Kra zdnq92|h1{+NMwB1J-7`<6tOW66P&!$c?EZ&z=72H0R=emuYYQx}i{QwEvA zD5G_@-cD2o2C9rAcaL`i03@v?14%5ye+I;-H^4 Date: Sat, 27 Apr 2019 20:43:50 +0200 Subject: [PATCH 06/15] Added check valve, double-T supports with auto-connections. Block/te registration adapted. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 4 + .../blocks/BlockDecorHorizontalSupport.java | 58 ++++- .../blocks/BlockDecorPipeValve.java | 198 ++++++++++++++++++ .../wile/engineersdecor/blocks/ModBlocks.java | 91 ++++++-- .../engineersdecor/detail/ModAuxiliaries.java | 2 + .../wile/engineersdecor/detail/ModConfig.java | 1 + .../blockstates/steel_double_t_support.json | 13 +- .../blockstates/straight_pipe_valve.json | 9 + .../assets/engineersdecor/lang/en_us.lang | 7 +- .../assets/engineersdecor/lang/ru_ru.lang | 7 +- .../steel_double_t_support_model.json | 56 +++-- ...steel_double_t_support_xconnect_model.json | 63 ++++++ ...e_t_support_xconnect_thick_pole_model.json | 62 ++++++ ...le_t_support_xconnect_thin_pole_model.json | 62 ++++++ .../block/pipe/straight_pipe_valve_model.json | 87 ++++++++ .../engineersdecor/recipes/_constants.json | 7 + .../recipes/straight_pipe_valve_recipe.json | 22 ++ .../steel_double_t_support_end_texture.png | Bin 527 -> 350 bytes .../steel_double_t_support_side_texture.png | Bin 527 -> 270 bytes .../steel_double_t_support_top_texture.png | Bin 527 -> 376 bytes .../pipe/straight_pipe_valve_end_texture.png | Bin 0 -> 456 bytes .../pipe/straight_pipe_valve_side_texture.png | Bin 0 -> 544 bytes credits.md | 3 + meta/update.json | 3 +- readme.md | 13 ++ 27 files changed, 707 insertions(+), 66 deletions(-) create mode 100644 1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thick_pole_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thin_pole_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_end_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_texture.png diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 46f3a09..8ba36fd 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b4 +version_engineersdecor=1.0.4-b5 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index d209192..603bed6 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", "1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).", "1.0.4-b3": "[A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles.\n[A] Added support head/foot components for thin and thick steel poles.", "1.0.4-b2": "[A] Added position dependent texture variation to clinker wall, slag brick wall and rebar concrete wall.", @@ -28,6 +29,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b4" + "1.12.2-latest": "1.0.4-b5" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index 3c7cc14..c1a5ffa 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,10 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b5 [A] Horizontal steel double-T support beam with pole connections. + [A] Added fluid pipe check valve (straight, conducts only one way). + [M] Internal registration block/te handling changed. + - v1.0.4-b4 [F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls. [F] Unused treated wood pole texture regions filled (optifine). diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java index 7d96ba5..043cac0 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java @@ -1,15 +1,19 @@ /* - * @file BlockDecorDirected.java + * @file BlockDecorHorizontalSupport.java * @author Stefan Wilhelm (wile) * @copyright (C) 2019 Stefan Wilhelm * @license MIT (see https://opensource.org/licenses/MIT) * - * Smaller (cutout) block with a defined facing. + * Horizontal ceiling support. Symmetric x axis, fixed in + * xz plane, therefore boolean placement state. */ package wile.engineersdecor.blocks; import net.minecraft.block.SoundType; import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import wile.engineersdecor.detail.ModAuxiliaries; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.material.Material; @@ -31,7 +35,10 @@ import java.util.Arrays; public class BlockDecorHorizontalSupport extends BlockDecor { - public static final PropertyBool EASTWEST = PropertyBool.create("eastwest"); + public static final PropertyBool EASTWEST = PropertyBool.create("eastwest"); + public static final PropertyBool LEFTBEAM = PropertyBool.create("leftbeam"); + public static final PropertyBool RIGHTBEAM = PropertyBool.create("rightbeam"); + public static final PropertyInteger DOWNCONNECT = PropertyInteger.create("downconnect", 0, 2); protected final ArrayList AABBs; public BlockDecorHorizontalSupport(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB) @@ -39,10 +46,13 @@ public class BlockDecorHorizontalSupport extends BlockDecor super(registryName, config|CFG_HORIZIONTAL, material, hardness, resistance, sound); final boolean is_horizontal = ((config & CFG_HORIZIONTAL)!=0); AABBs = new ArrayList(Arrays.asList( + // Effective bounding box + ModAuxiliaries.getRotatedAABB(unrotatedAABB.grow(2.0/16, 0, 0), EnumFacing.NORTH, true), + ModAuxiliaries.getRotatedAABB(unrotatedAABB.grow(2.0/16, 0, 0), EnumFacing.WEST, true), + // Displayed bounding box ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.NORTH, true), ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.WEST, true) )); - } @Override @@ -66,6 +76,11 @@ public class BlockDecorHorizontalSupport extends BlockDecor public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) { return BlockFaceShape.UNDEFINED; } + @SideOnly(Side.CLIENT) + @SuppressWarnings("deprecation") + public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World world, BlockPos pos) + { return AABBs.get(state.getValue(EASTWEST) ? 0x3 : 0x2).offset(pos); } + @Override @SuppressWarnings("deprecation") public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) @@ -78,15 +93,39 @@ public class BlockDecorHorizontalSupport extends BlockDecor @Override public IBlockState getStateFromMeta(int meta) - { return this.getDefaultState().withProperty(EASTWEST, ((meta & 0x1) != 0)); } + { return getDefaultState().withProperty(EASTWEST, ((meta & 0x1) != 0)); } @Override public int getMetaFromState(IBlockState state) - { return state.getValue(EASTWEST) ? 0x1 : 0x0; } + { return (state.getValue(EASTWEST) ? 0x1:0x0); } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) + { + boolean ew = state.getValue(EASTWEST); + final IBlockState rstate = world.getBlockState((!ew) ? (pos.east()) : (pos.south()) ); + final IBlockState lstate = world.getBlockState((!ew) ? (pos.west()) : (pos.north()) ); + final IBlockState dstate = world.getBlockState(pos.down()); + int down_connector = 0; + if((dstate.getBlock() instanceof BlockDecorStraightPole)) { + final EnumFacing dfacing = dstate.getValue(BlockDecorStraightPole.FACING); + final BlockDecorStraightPole pole = (BlockDecorStraightPole)dstate.getBlock(); + if((dfacing.getAxis() == EnumFacing.Axis.Y)) { + if((pole==ModBlocks.THICK_STEEL_POLE) || ((pole==ModBlocks.THICK_STEEL_POLE_HEAD) && (dfacing==EnumFacing.UP))) { + down_connector = 2; + } else if((pole==ModBlocks.THIN_STEEL_POLE) || ((pole==ModBlocks.THIN_STEEL_POLE_HEAD) && (dfacing==EnumFacing.UP))) { + down_connector = 1; + } + } + } + return state.withProperty(RIGHTBEAM, (rstate.getBlock()==this) && (rstate.getValue(EASTWEST) != ew)) + .withProperty(LEFTBEAM , (lstate.getBlock()==this) && (lstate.getValue(EASTWEST) != ew)) + .withProperty(DOWNCONNECT , down_connector); + } @Override protected BlockStateContainer createBlockState() - { return new BlockStateContainer(this, EASTWEST); } + { return new BlockStateContainer(this, EASTWEST, RIGHTBEAM, LEFTBEAM, DOWNCONNECT); } @Override public IBlockState withRotation(IBlockState state, Rotation rot) @@ -104,9 +143,6 @@ public class BlockDecorHorizontalSupport extends BlockDecor @Override @SuppressWarnings("deprecation") public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) - { - facing = placer.getHorizontalFacing(); - return getDefaultState().withProperty(EASTWEST, (facing==EnumFacing.EAST)||(facing==EnumFacing.WEST)); - } + { return getActualState(getDefaultState().withProperty(EASTWEST, (placer.getHorizontalFacing().getAxis()==EnumFacing.Axis.X)), world, pos); } } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java new file mode 100644 index 0000000..956c64e --- /dev/null +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java @@ -0,0 +1,198 @@ +/* + * @file BlockDecorPipeValve.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Basically a piece of pipe that does not connect to + * pipes on the side, and conducts fluids only in one way. + */ +package wile.engineersdecor.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; +import net.minecraftforge.fluids.FluidStack; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + + +public class BlockDecorPipeValve extends BlockDecorDirected +{ + public BlockDecorPipeValve(@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 + @SuppressWarnings("deprecation") + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer); + if(!placer.isSneaking()) state = state.withProperty(FACING, state.getValue(FACING).getOpposite()); + return state; + } + + @Override + @SuppressWarnings("deprecation") + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) + { + EnumFacing fc = state.getValue(FACING); + if(fromPos.equals(pos.offset(fc)) || fromPos.equals(pos.offset(fc.getOpposite()))) update_te(world, state, pos); + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + update_te(world, state, pos); + world.notifyNeighborsOfStateChange(pos, this, true); + } + + @Override + public boolean hasTileEntity(IBlockState state) + { return true; } + + @Nullable + public TileEntity createTileEntity(World world, IBlockState state) + { return new BlockDecorPipeValve.BTileEntity(); } + + private void update_te(World world, IBlockState state, BlockPos pos) + { + TileEntity te = world.getTileEntity(pos); + if(te instanceof BlockDecorPipeValve.BTileEntity) ((BlockDecorPipeValve.BTileEntity)te).block_reconfigure(state.getValue(FACING)); + } + + //-------------------------------------------------------------------------------------------------------------------- + // Tile entity + //-------------------------------------------------------------------------------------------------------------------- + + public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider + { + public static final int FLUID_CAPACITY_MB = 1000; // likely also the max flow per tick + private static final BackFlowHandler back_flow_handler_ = new BackFlowHandler(); + private final IFluidTankProperties[] fluid_props_ = {this}; + private EnumFacing block_facing_ = EnumFacing.NORTH; + private boolean filling = false; + + public BTileEntity() + {} + + public void block_reconfigure(EnumFacing facing) + { block_facing_ = facing; } + + // TileEntity ------------------------------------------------------------------------------ + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns) + { return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorPipeValve)); } + + @Override + public void onLoad() + { + if(!hasWorld()) return; + final IBlockState state = world.getBlockState(pos); + if((!(state.getBlock() instanceof BlockDecorPipeValve))) return; + block_reconfigure(state.getValue(FACING)); + } + + // ICapabilityProvider -------------------------------------------------------------------- + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { return ((capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) && ((facing==block_facing_) || (facing==block_facing_.getOpposite()))); } + + @Override + @SuppressWarnings("unchecked") + @Nullable + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + if(capability!=CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) return super.getCapability(capability, facing); + return (facing==block_facing_) ? ((T)back_flow_handler_) : (((T)this)); + } + + // IFluidHandler/IFluidTankProperties --------------------------------------------------------------- + + @Override + public int fill(FluidStack resource, boolean doFill) + { + if(filling) return 0; + final TileEntity te = world.getTileEntity(pos.offset(block_facing_)); + if(te == null) return 0; + final IFluidHandler fh = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, block_facing_.getOpposite()); + if(fh==null) return 0; + filling = true; // in case someone does not check the cap, but just "forwards back" what is beeing filled right now. + int n_filled = fh.fill(resource, doFill); + filling = false; + return n_filled; + } + + @Override + @Nullable + public FluidStack drain(FluidStack resource, boolean doDrain) + { return null; } + + @Override + @Nullable + public FluidStack drain(int maxDrain, boolean doDrain) + { return null; } + + @Override + public IFluidTankProperties[] getTankProperties() + { return fluid_props_; } + + // IFluidTankProperties -- + + @Override + @Nullable + public FluidStack getContents() + { return null; } + + public int getCapacity() + { return FLUID_CAPACITY_MB; } + + @Override + public boolean canFill() + { return true; } + + @Override + public boolean canDrain() + { return false; } + + @Override + public boolean canFillFluidType(FluidStack fluidStack) + { return true; } + + @Override + public boolean canDrainFluidType(FluidStack fluidStack) + { return false; } + + // Back flow prevention handler -- + + private static class BackFlowHandler implements IFluidHandler, IFluidTankProperties + { + private final IFluidTankProperties[] props_ = {this}; + @Override public IFluidTankProperties[] getTankProperties() { return props_; } + @Override public int fill(FluidStack resource, boolean doFill) { return 0; } + @Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { return null; } + @Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain) { return null; } + @Override @Nullable public FluidStack getContents() { return null; } + @Override public int getCapacity() { return 0; } + @Override public boolean canFill() { return false; } + @Override public boolean canDrain() { return false; } + @Override public boolean canFillFluidType(FluidStack fluidStack) { return false; } + @Override public boolean canDrainFluidType(FluidStack fluidStack) { return false; } + } + } +} diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index 1284018..b188d75 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -12,6 +12,7 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.tileentity.TileEntity; import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.detail.ModAuxiliaries; import wile.engineersdecor.detail.ModConfig; @@ -35,6 +36,10 @@ import javax.annotation.Nonnull; @SuppressWarnings("unused") public class ModBlocks { + //-------------------------------------------------------------------------------------------------------------------- + //-- Blocks + //-------------------------------------------------------------------------------------------------------------------- + public static final BlockDecorFull CLINKER_BRICK_BLOCK = new BlockDecorFull("clinker_brick_block", 0, Material.ROCK, 2f, 50f, SoundType.STONE); public static final BlockDecorStairs CLINKER_BRICK_STAIRS = new BlockDecorStairs("clinker_brick_stairs", CLINKER_BRICK_BLOCK.getDefaultState()); public static final BlockDecorWall CLINKER_BRICK_WALL = new BlockDecorWall("clinker_brick_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 8f, 50f, SoundType.STONE); @@ -176,9 +181,40 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(5,11,0, 11,16,16) ); + public static final BlockDecorPipeValve STRAIGHT_PIPE_VALVE = new BlockDecorPipeValve( + "straight_pipe_valve", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, + Material.IRON, 1.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + ); - private static final Block modBlocks[] = { - TREATED_WOOD_CRAFTING_TABLE, + //-------------------------------------------------------------------------------------------------------------------- + //-- Tile entities + //-------------------------------------------------------------------------------------------------------------------- + + private static class TileEntityRegistrationData + { + public final Class clazz; + public final ResourceLocation key; + public TileEntityRegistrationData(Class c, String k) { clazz=c; key = new ResourceLocation(ModEngineersDecor.MODID, k); } + } + + private static final TileEntityRegistrationData TREATED_WOOD_CRAFTING_TABLE_TEI = new TileEntityRegistrationData( + BlockDecorCraftingTable.BTileEntity.class, "te_crafting_table" + ); + private static final TileEntityRegistrationData SMALL_LAB_FURNACE_TEI = new TileEntityRegistrationData( + BlockDecorFurnace.BTileEntity.class, "te_small_lab_furnace" + ); + private static final TileEntityRegistrationData STRAIGHT_PIPE_VALVE_TEI = new TileEntityRegistrationData( + BlockDecorPipeValve.BTileEntity.class, "te_pipe_valve" + ); + + //-------------------------------------------------------------------------------------------------------------------- + //-- Registration list + //-------------------------------------------------------------------------------------------------------------------- + + private static final Object content[] = { + TREATED_WOOD_CRAFTING_TABLE, TREATED_WOOD_CRAFTING_TABLE_TEI, CLINKER_BRICK_BLOCK, CLINKER_BRICK_STAIRS, CLINKER_BRICK_WALL, @@ -201,7 +237,7 @@ public class ModBlocks TREATED_WOOD_WINDOW, TREATED_WOOD_WINDOWSILL, INSET_LIGHT_IRON, - SMALL_LAB_FURNACE, + SMALL_LAB_FURNACE, SMALL_LAB_FURNACE_TEI, STEEL_FRAMED_WINDOW, TREATED_WOOD_POLE_SUPPORT, TREATED_WOOD_POLE_HEAD, @@ -210,13 +246,19 @@ public class ModBlocks THICK_STEEL_POLE, THIN_STEEL_POLE_HEAD, THICK_STEEL_POLE_HEAD, - STEEL_DOUBLE_T_SUPPORT + STEEL_DOUBLE_T_SUPPORT, + STRAIGHT_PIPE_VALVE, STRAIGHT_PIPE_VALVE_TEI }; - private static final Block devBlocks[] = { + private static final Object dev_content[] = { }; + //-------------------------------------------------------------------------------------------------------------------- + //-- Init + //-------------------------------------------------------------------------------------------------------------------- + private static ArrayList registeredBlocks = new ArrayList<>(); + private static ArrayList registeredTileEntityInits = new ArrayList<>(); @Nonnull public static List getRegisteredBlocks() @@ -226,28 +268,33 @@ public class ModBlocks public static final void registerBlocks(RegistryEvent.Register event) { // Config based registry selection - int num_registrations_skipped = 0; - ArrayList allBlocks = new ArrayList<>(); - Collections.addAll(allBlocks, modBlocks); - //if(Loader.isModLoaded("immersiveengineering")){} - if(ModConfig.zmisc.with_experimental) Collections.addAll(allBlocks, devBlocks); + int num_block_registrations_skipped = 0; final boolean woor = ModConfig.isWithoutOptOutRegistration(); - for(Block e:allBlocks) { - if((!woor) || (!ModConfig.isOptedOut(e))) { - registeredBlocks.add(e); - } else { - ++num_registrations_skipped; + for(Object e:content) { + if(e instanceof Block) { + if((!woor) || (!ModConfig.isOptedOut((Block)e))) { + registeredBlocks.add((Block) e); + } else { + ++num_block_registrations_skipped; + } + } else if(e instanceof TileEntityRegistrationData) { + registeredTileEntityInits.add((TileEntityRegistrationData)e); + } + } + if(ModConfig.zmisc.with_experimental) { + for(Object e:dev_content) { + if(e instanceof Block) { + registeredBlocks.add((Block) e); + } else if(e instanceof TileEntityRegistrationData) { + registeredTileEntityInits.add((TileEntityRegistrationData) e); + } } } for(Block e:registeredBlocks) event.getRegistry().register(e); ModEngineersDecor.logger.info("Registered " + Integer.toString(registeredBlocks.size()) + " blocks."); - if(num_registrations_skipped > 0) { - ModEngineersDecor.logger.info("Skipped registration of " + num_registrations_skipped + " blocks due to no-register-opt-out config."); - } - - // TEs - GameRegistry.registerTileEntity(BlockDecorCraftingTable.BTileEntity.class, new ResourceLocation(ModEngineersDecor.MODID, "te_crafting_table")); - GameRegistry.registerTileEntity(BlockDecorFurnace.BTileEntity.class, new ResourceLocation(ModEngineersDecor.MODID, "te_small_lab_furnace")); + if(num_block_registrations_skipped > 0) ModEngineersDecor.logger.info("Skipped registration of " + num_block_registrations_skipped + " blocks."); + for(TileEntityRegistrationData e:registeredTileEntityInits) GameRegistry.registerTileEntity(e.clazz, e.key); + ModEngineersDecor.logger.info("Registered " + Integer.toString(registeredTileEntityInits.size()) + " tile entities."); } // Invoked from ClientProxy.registerModels() diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java b/1.12/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java index 9728bd2..f79041e 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java @@ -144,4 +144,6 @@ public class ModAuxiliaries } return bb; } + + public interface IExperimentalFeature{} } diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java index 6a9e106..30bfffa 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java @@ -229,6 +229,7 @@ public class ModConfig { if((block == null) || (optout==null)) return true; if(block == ModBlocks.SIGN_MODLOGO) return true; + if((!zmisc.with_experimental) && (block instanceof ModAuxiliaries.IExperimentalFeature)) return true; final String rn = block.getRegistryName().getPath(); if(optout.without_clinker_bricks && rn.startsWith("clinker_brick_")) return true; if(optout.without_slag_bricks && rn.startsWith("slag_brick_")) return true; diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json index 898457d..f6ecc79 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json @@ -11,7 +11,18 @@ }, "variants": { "normal": [{}], + "inventory": [{}], "eastwest": { "false":{"y":0}, "true": {"y":90}}, - "inventory": [{}] + "rightbeam": { "false":{}, "true": { + "submodel": {"rsteelsupport": { "model": "engineersdecor:hsupport/steel_double_t_support_xconnect_model", "y": 0 }} + }}, + "leftbeam": { "false":{}, "true": { + "submodel": {"lsteelsupport": { "model": "engineersdecor:hsupport/steel_double_t_support_xconnect_model", "y": 180 }} + }}, + "downconnect": { + "0": {}, + "1": { "submodel": {"dthinpole": { "model": "engineersdecor:hsupport/steel_double_t_support_xconnect_thin_pole_model"}} }, + "2": { "submodel": {"dthickpole": { "model": "engineersdecor:hsupport/steel_double_t_support_xconnect_thick_pole_model"}} } + } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json new file mode 100644 index 0000000..d3feed0 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "defaults": { "model": "engineersdecor:pipe/straight_pipe_valve_model" }, + "variants": { + "normal": [{}], + "inventory": [{}], + "facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} } + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index ec57b44..72ce51d 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -64,6 +64,8 @@ tile.engineersdecor.thin_steel_pole_head.name=Straight thin steel pole head/foot tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or head of the thin steel pole (4x4x16). tile.engineersdecor.thick_steel_pole_head.name=Straight thick steel pole head/foot tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16). +tile.engineersdecor.steel_double_t_support.name=Steel double T support +tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.treated_wood_table.name=Treated wood table tile.engineersdecor.treated_wood_table.help=§6Robust four-legged wood table.§r Indoor and outdoor use. @@ -92,12 +94,11 @@ tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Sol and fuel. Place an external heater into a aux slot and connect power for electrical \ smelting speed boost. #----------------------------------------------------------------------------------------------------------- -tile.engineersdecor.steel_double_t_support.name=Steel double T support -tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment. +tile.engineersdecor.straight_pipe_valve.name=Fluid pipe check valve +tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. Does not connect to the sides. Sneak to place in reverse direction. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor) tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. - #----------------------------------------------------------------------------------------------------------- # EOF #----------------------------------------------------------------------------------------------------------- diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang index 618c5a3..4c3bbeb 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang @@ -64,6 +64,8 @@ tile.engineersdecor.thin_steel_pole_head.name=Straight thin steel pole head/foot #tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or head of the thin steel pole (4x4x16). tile.engineersdecor.thick_steel_pole_head.name=Straight thick steel pole head/foot #tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16). +tile.engineersdecor.steel_double_t_support.name=Steel double T support +#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.treated_wood_table.name=Стол из обработанного дерева tile.engineersdecor.treated_wood_table.help=§6Прочный деревянный стол с четырьмя ножками .§r Для использования в помещении и на улице. @@ -85,12 +87,11 @@ tile.engineersdecor.steel_framed_window.name=Окно со стальной ра tile.engineersdecor.small_lab_furnace.name=Компактная лабораторная печь tile.engineersdecor.small_lab_furnace.help=§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива - сверху. Немного горячее чем каменная, поэтому быстрее. Два внутренних слота для ввода, выхода и топлива. #----------------------------------------------------------------------------------------------------------- -tile.engineersdecor.steel_double_t_support.name=Steel double T support -#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment. +tile.engineersdecor.straight_pipe_valve.name=Straight fluid valve +#tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. Does not connect to the sides. Sneak to place in reverse direction. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo) #tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. - #----------------------------------------------------------------------------------------------------------- # EOF #----------------------------------------------------------------------------------------------------------- diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json index cee71a6..02308cb 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json @@ -2,53 +2,53 @@ "parent": "block/cube", "textures": { "end": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture", + "particle": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture", "side": "engineersdecor:blocks/hsupport/steel_double_t_support_side_texture", - "top": "engineersdecor:blocks/hsupport/steel_double_t_support_top_texture", - "particle": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture" + "top": "engineersdecor:blocks/hsupport/steel_double_t_support_top_texture" }, "elements": [ { "from": [5, 15, 0], "to": [11, 16, 16], "faces": { - "north": {"texture": "#end"}, - "east": {"texture": "#side"}, - "south": {"texture": "#end"}, - "west": {"texture": "#side"}, - "up": {"texture": "#top"}, - "down": {"texture": "#top"} + "north": {"uv": [5, 0, 11, 1], "texture": "#end"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#side"}, + "south": {"uv": [5, 0, 11, 1], "texture": "#end"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#side"}, + "up": {"uv": [5, 0, 11, 16], "texture": "#top"}, + "down": {"uv": [5, 0, 11, 16], "texture": "#top"} } }, { "from": [9, 12, 0], "to": [10, 15, 16], "faces": { - "north": {"texture": "#end"}, - "east": {"texture": "#side"}, - "south": {"texture": "#end"}, - "west": {"texture": "#side"} + "north": {"uv": [6, 1, 7, 4], "texture": "#end"}, + "east": {"uv": [0, 1, 16, 4], "texture": "#side"}, + "south": {"uv": [9, 1, 10, 4], "texture": "#end"}, + "west": {"uv": [0, 1, 16, 4], "texture": "#side"} } }, { "from": [6, 12, 0], "to": [7, 15, 16], "faces": { - "north": {"texture": "#end"}, - "east": {"texture": "#side"}, - "south": {"texture": "#end"}, - "west": {"texture": "#side"} + "north": {"uv": [9, 1, 10, 4], "texture": "#end"}, + "east": {"uv": [0, 1, 16, 4], "texture": "#side"}, + "south": {"uv": [6, 1, 7, 4], "texture": "#end"}, + "west": {"uv": [0, 1, 16, 4], "texture": "#side"} } }, { "from": [5, 11, 0], "to": [11, 12, 16], "faces": { - "north": {"texture": "#end"}, - "east": {"texture": "#side"}, - "south": {"texture": "#end"}, - "west": {"texture": "#side"}, - "up": {"texture": "#top"}, - "down": {"texture": "#top"} + "north": {"uv": [5, 4, 11, 5], "texture": "#end"}, + "east": {"uv": [0, 4, 16, 5], "texture": "#side"}, + "south": {"uv": [5, 4, 11, 5], "texture": "#end"}, + "west": {"uv": [0, 4, 16, 5], "texture": "#side"}, + "up": {"uv": [5, 0, 11, 16], "texture": "#top"}, + "down": {"uv": [5, 0, 11, 16], "texture": "#top"} } } ], @@ -62,6 +62,16 @@ }, "fixed": { "scale": [0.5, 0.5, 0.5] - } + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5], + "rotation": [120, 30, 0], + "translation": [2, 3, 0] + }, + "thirdperson_righthand": { + "scale": [0.5, 0.5, 0.5], + "rotation": [120, 15, 0], + "translation": [-1, -1, -2] + } } } \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_model.json new file mode 100644 index 0000000..2aed74d --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_model.json @@ -0,0 +1,63 @@ +{ + "parent": "block/cube", + "textures": { + "end": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture", + "particle": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture", + "side": "engineersdecor:blocks/hsupport/steel_double_t_support_side_texture", + "top": "engineersdecor:blocks/hsupport/steel_double_t_support_top_texture" + }, + "elements": [ + { + "from": [11, 15, 5], + "to": [16, 16, 11], + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#side"}, + "east": {"uv": [5, 0, 11, 1], "texture": "#end"}, + "south": {"uv": [11, 0, 16, 1], "texture": "#side"}, + "up": {"uv": [5, 10, 11, 16], "rotation": 270, "texture": "#top"}, + "down": {"uv": [11, 5, 16, 11], "rotation": 90, "texture": "#top"} + } + }, + { + "from": [11, 11, 5], + "to": [16, 12, 11], + "faces": { + "north": {"uv": [0, 4, 5, 5], "texture": "#side"}, + "east": {"uv": [5, 4, 11, 5], "texture": "#end"}, + "south": {"uv": [11, 4, 16, 5], "texture": "#side"}, + "up": {"uv": [11, 5, 16, 11], "rotation": 270, "texture": "#top"}, + "down": {"uv": [5, 10, 11, 16], "rotation": 90, "texture": "#top"} + } + }, + { + "from": [10, 12, 9], + "to": [16, 15, 10], + "faces": { + "north": {"uv": [0, 1, 6, 4], "texture": "#side"}, + "east": {"uv": [6, 1, 7, 4], "texture": "#end"}, + "south": {"uv": [10, 1, 16, 4], "texture": "#side"} + } + }, + { + "from": [10, 12, 6], + "to": [16, 15, 7], + "faces": { + "north": {"uv": [0, 1, 6, 4], "texture": "#side"}, + "east": {"uv": [9, 1, 10, 4], "texture": "#end"}, + "south": {"uv": [10, 1, 16, 4], "texture": "#side"} + } + } + ], + "display": { + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thick_pole_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thick_pole_model.json new file mode 100644 index 0000000..668f4d3 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thick_pole_model.json @@ -0,0 +1,62 @@ +{ + "parent": "block/cube", + "textures": { + "pside": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "particle": "engineersdecor:blocks/pole/thick_steel_pole_side_texture", + "ptop": "engineersdecor:blocks/pole/thick_steel_pole_top_texture" + }, + "elements": [ + { + "from": [6, 0, 10], + "to": [10, 11, 11], + "faces": { + "north": {"uv": [6, 5, 10, 16], "texture": "#pside"}, + "south": {"uv": [6, 5, 10, 16], "texture": "#pside"}, + "down": {"uv": [6, 5, 10, 6], "texture": "#ptop"} + } + }, + { + "from": [10, 0, 5], + "to": [11, 11, 11], + "faces": { + "north": {"uv": [5, 5, 6, 16], "texture": "#pside"}, + "east": {"uv": [5, 5, 11, 16], "texture": "#pside"}, + "south": {"uv": [10, 5, 11, 16], "texture": "#pside"}, + "west": {"uv": [5, 5, 11, 16], "texture": "#pside"}, + "down": {"uv": [10, 5, 11, 11], "texture": "#ptop"} + } + }, + { + "from": [5, 0, 5], + "to": [6, 11, 11], + "faces": { + "north": {"uv": [10, 5, 11, 16], "texture": "#pside"}, + "east": {"uv": [5, 5, 11, 16], "texture": "#pside"}, + "south": {"uv": [5, 5, 6, 16], "texture": "#pside"}, + "west": {"uv": [5, 5, 11, 16], "texture": "#pside"}, + "down": {"uv": [5, 5, 6, 11], "texture": "#ptop"} + } + }, + { + "from": [6, 0, 5], + "to": [10, 11, 6], + "faces": { + "north": {"uv": [6, 5, 10, 16], "texture": "#pside"}, + "south": {"uv": [6, 5, 10, 16], "texture": "#pside"}, + "down": {"uv": [6, 10, 10, 11], "texture": "#ptop"} + } + } + ], + "display": { + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thin_pole_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thin_pole_model.json new file mode 100644 index 0000000..4c0bf1b --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thin_pole_model.json @@ -0,0 +1,62 @@ +{ + "parent": "block/cube", + "textures": { + "pside": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "particle": "engineersdecor:blocks/pole/thin_steel_pole_side_texture", + "ptop": "engineersdecor:blocks/pole/thin_steel_pole_top_texture" + }, + "elements": [ + { + "from": [7, 0, 9], + "to": [9, 11, 10], + "faces": { + "north": {"uv": [7, 5, 9, 16], "texture": "#pside"}, + "south": {"uv": [7, 5, 9, 16], "texture": "#pside"}, + "down": {"uv": [7, 6, 9, 7], "texture": "#ptop"} + } + }, + { + "from": [9, 0, 6], + "to": [10, 11, 10], + "faces": { + "north": {"uv": [6, 5, 7, 16], "texture": "#pside"}, + "east": {"uv": [6, 5, 10, 16], "texture": "#pside"}, + "south": {"uv": [9, 5, 10, 16], "texture": "#pside"}, + "west": {"uv": [6, 5, 10, 16], "texture": "#pside"}, + "down": {"uv": [9, 6, 10, 10], "texture": "#ptop"} + } + }, + { + "from": [6, 0, 6], + "to": [7, 11, 10], + "faces": { + "north": {"uv": [9, 5, 10, 16], "texture": "#pside"}, + "east": {"uv": [6, 5, 10, 16], "texture": "#pside"}, + "south": {"uv": [6, 5, 7, 16], "texture": "#pside"}, + "west": {"uv": [6, 5, 10, 16], "texture": "#pside"}, + "down": {"uv": [6, 6, 7, 10], "texture": "#ptop"} + } + }, + { + "from": [7, 0, 6], + "to": [9, 11, 7], + "faces": { + "north": {"uv": [7, 5, 9, 16], "texture": "#pside"}, + "south": {"uv": [7, 5, 9, 16], "texture": "#pside"}, + "down": {"uv": [7, 9, 9, 10], "texture": "#ptop"} + } + } + ], + "display": { + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_model.json new file mode 100644 index 0000000..92e2061 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_model.json @@ -0,0 +1,87 @@ +{ + "textures": { + "end": "engineersdecor:blocks/pipe/straight_pipe_valve_end_texture", + "particle": "engineersdecor:blocks/pipe/straight_pipe_valve_end_texture", + "side": "engineersdecor:blocks/pipe/straight_pipe_valve_side_texture" + }, + "elements": [ + { + "from": [2, 2, 0], + "to": [14, 14, 2], + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#end"}, + "east": {"uv": [2, 0, 14, 2], "rotation": 90, "texture": "#side"}, + "south": {"uv": [2, 2, 14, 14], "texture": "#end"}, + "west": {"uv": [2, 0, 14, 2], "rotation": 270, "texture": "#side"}, + "up": {"uv": [2, 0, 14, 2], "texture": "#side"}, + "down": {"uv": [2, 14, 14, 16], "texture": "#side"} + } + }, + { + "from": [2, 2, 14], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#end"}, + "east": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#side"}, + "south": {"uv": [2, 2, 14, 14], "texture": "#end"}, + "west": {"uv": [2, 0, 14, 2], "rotation": 90, "texture": "#side"}, + "up": {"uv": [2, 14, 14, 16], "texture": "#side"}, + "down": {"uv": [2, 0, 14, 2], "texture": "#side"} + } + }, + { + "from": [4, 4, 11], + "to": [12, 12, 14], + "faces": { + "east": {"uv": [4, 11, 12, 14], "rotation": 90, "texture": "#side"}, + "west": {"uv": [4, 11, 12, 14], "rotation": 270, "texture": "#side"}, + "up": {"uv": [4, 11, 12, 14], "texture": "#side"}, + "down": {"uv": [4, 11, 12, 14], "rotation": 180, "texture": "#side"} + } + }, + { + "from": [4, 4, 2], + "to": [12, 12, 5], + "faces": { + "east": {"uv": [4, 11, 12, 14], "rotation": 90, "texture": "#side"}, + "west": {"uv": [4, 11, 12, 14], "rotation": 270, "texture": "#side"}, + "up": {"uv": [4, 2, 12, 5], "texture": "#side"}, + "down": {"uv": [4, 2, 12, 5], "rotation": 180, "texture": "#side"} + } + }, + { + "from": [3, 3, 5], + "to": [13, 13, 11], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#end"}, + "east": {"uv": [3, 5, 13, 11], "rotation": 90, "texture": "#side"}, + "south": {"uv": [4, 4, 12, 12], "texture": "#end"}, + "west": {"uv": [3, 5, 13, 11], "rotation": 270, "texture": "#side"}, + "up": {"uv": [3, 5, 13, 11], "texture": "#side"}, + "down": {"uv": [3, 5, 13, 11], "rotation": 180, "texture": "#side"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [120, 15, 0], + "translation": [-1, -1, -2], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_righthand": { + "rotation": [120, 30, 0], + "translation": [2, 3, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json index 634950b..cfa0394 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json @@ -162,6 +162,13 @@ "ingredient": { "item": "immersiveengineering:wooden_device0", "data": 0 }, "name": "crateTreatedWood" }, + { + "conditions": [ + { "type": "minecraft:item_exists", "item": "immersiveengineering:metal_device1" } + ], + "ingredient": { "item": "immersiveengineering:metal_device1", "data": 6 }, + "name": "itemFluidPipe" + }, { "conditions": [ { "type": "engineersdecor:grc", "missing": ["immersiveengineering:stone_decoration"] } diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_recipe.json new file mode 100644 index 0000000..8e7201f --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_recipe.json @@ -0,0 +1,22 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:straight_pipe_valve", + "required": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "PPP" + ], + "key": { + "P": { + "item": "#itemFluidPipe" + } + }, + "result": { + "item": "engineersdecor:straight_pipe_valve", + "count": 3 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_end_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_end_texture.png index 9584364c0f1de8429b45711d84ccc701c577dd9f..db9e94003284cccfc194617d098cc4b456f7c665 100644 GIT binary patch delta 296 zcmV+@0oVSI1l|IW83+ad001BJ|6!3KDu4b-L_t(I%XL#xvcxb50%LEs_dijU_wj~| z&2B$BDMTY;!q4X;0Eh@g1gZ+%jkOj?;=XTWCb}Dv9&wV85di?`ZulTcJ9w?N|0O-* zstN%BlHir(R^X~uB?+0i3y?&1HzEQg5fSKaWG1Q#06=oLW2F(XTiXhpU~CnxHh(`K z`tV?_^;Na1cJE$Yz#gPY8$)s*WZd1Ts_n~cB}szhmgkKrc}{BfPZBYcEdNY?>%Y7I zJ+MrZ)A`9?*Y&`=g61TACW)Bywt;>FCx2o|NY8h= ue&07FeepBVap4=~=Q&lJ{E63E_!R@uX?4SOeJq6l0000-_8SwRbrIg$~r8LF>004-BnGrFi zq^itpW{8+X1ORf*DJ5nmqA^C!834>IZixsHd+%mO*L9hhyEC(@B4VvoL=X`GRDU(5 zA!2-^Qi_PgX%zQ;BjUdADW!E?0btIVb0#8YrZEO0mQqwT49q!21HITwDmw$i QdjJ3c07*qoM6N<$f{|0#Hvj+t diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_side_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_side_texture.png index 9584364c0f1de8429b45711d84ccc701c577dd9f..db55c5615bee26adb4bced5e427c84f1272f5419 100644 GIT binary patch delta 215 zcmV;|04V>D1dalb83+ad001BJ|6!3KDu1p?L_t(I%k7Uj4#O}E1c!&=&X4l{KjY4a zNTw2l)JYiv0x3bW%awiKOGGd;G7}N$uBt=?RfVcjRhSuLjK2G}ZDb~@ikYFR09@CF zyAu(pD(+5Zl9^Ohcb~vij0o0sMMOT%gqCIDd7d^?pusthF}Ux$omCYPX*eRtOhf?u zI1bFLvzr+afrxOPXFJa==D)eMyF0UHj2Ww{`W-+-05G#R!9r delta 474 zcmV<00VV#90*?fc83+OZ005AYXf}}{Dt`xbNliru;{pi{B{-AiBuoGR0h~!hK~yNu zJ(63l!!QU$c^D_LQ*~9{|5932iQ@(v?g!HSLw>-_8SwRbrIg$~r8LF>004-BnGrFi zq^itpW{8+X1ORf*DJ5nmqA^C!834>IZixsHd+%mO*L9hhyEC(@B4VvoL=X`GRDU(5 zA!2-^Qi_PgX%zQ;BjUdADW!E?0btIVb0#8YrZEO0mQqwT49q!21HITwDmw$i QdjJ3c07*qoM6N<$g8d}c=Kufz diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_top_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/hsupport/steel_double_t_support_top_texture.png index 9584364c0f1de8429b45711d84ccc701c577dd9f..3d928b5e230ea70135a95f76ca386a96828982a5 100644 GIT binary patch delta 335 zcmV-V0kHm$1o#4w83+ad001BJ|6!3K9e=<801m(bYSxJf0003PNklSqD|cS_|NkL`o;u-G8i^ zSua%;X7-in&gb*l%;e1M>w%eVS=tK#SZiJGw9iaj2i?8vl~GbBxp&UpahbMV9g3u4 z)_vz(8O@A{pu6{~L=kb3uluU{^*}OZ;C$^o&)wR|?GiLqcNOlwTdKMz7ZKMvP4J9~} z4h%o*_YdZm=y zJ*70p0001pf|(I9rKGCNY-Wg)UunR6y0W~MO)B9>BAH4Mx- zMdUb+QcCYV)JB&%C&f5sj%Li9b7tmHxbJ(;xz-wQn3?9Bh=_=-H4zCQ*L4w506320 zx~>?js+4m^#AR7TWLcJY6ixzEn1B3-Mj`sX@80_uW8e2V=dvu@wyA1#{eHhWXLlze z3Y2D6YXyMTnyR+e0O0rgo#**@JZh~G?wpf|DB!3n5v}W*QhGk0B2r2rqR;1Z-?zKF zyO||so^wX*t+lX0M8|Q2=u%1uc6Sk>Ij6gy=gG|5wwc)&!^{F=&bhS~2~?PwsuDAY z@BcuE==b}%dx$i%_xoK+8DlVW8e_x?j4>kYm;eCo-dYQEkqiK&u%fEHcM&nOKoK8e d$D)WO`UAb#ODa19!+QV#002ovPDHLkV1nRL+b944 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_end_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_end_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..45081f0fbbedc55092d6eda5ab102c885b9bc953 GIT binary patch literal 456 zcmV;(0XP1MP)VGd00C%8L_t(I%f*vDj^aQNg})hFwqzt+ zB10q{a02Hh;RFO6fZK2zp8-MY&XJ5nMq-Hu$(9=fGr=y+cz(3O1pA~4x=Pim_g>Y@ zcDsG!FSOQ_Wl2?40L*4HwASo)JK{LzbUHDg&(T^xT6pD``1J=b%jMEhD2jq4NnG)K zKL40|z%R?vJ(48ha5zxcHO3f>F#zOwj))LN5yRn-!C>(G!1w*mNOfJa-|tzk*H~)- z2*Z#xO;Jky;r;q#?tkWFjA6A}(Y7tO+YJC~Et|~-5&5ElzgR5zXrnR4HMec+YE9E% zjA1&Rc5L*sEaRhy|3a2!T@jn6>4=!;IYAI`xm;Y{^E|>ZL`3NK`;11T=N>do!y^Dh zgvn$=5CnLh=bFVGd00F>BL_t(I%Y~E6uG%mVhQBzDiMWMu z5mGmxiWM)=bsz9NSygq<255wYL_koPgxI-saf;iXQqI4zJ(~Gv<{yvu^77IEtX30yl=-$Q{j4@bisq31eC|E9+07!nJ)oRi2_nA(oD5dayAK&*WiUKJmMN!~+ z9^35}-}mofi2G$Wn_-M0NfM67BT`BRg8`$_2x~2u%Z1HmL(??O=W|EkD)pgxGYPI zF?`ft@$e9yVE*IFtFsWUnx`TLUPb!hGXP~-az39Cm3@B-LI@|6zU`d7EK2~=G$jav z{}YVIV|NaRL!u~h>Yq+0CX>l?4es!L-_5y^?K}fI}V2fi^bwMfwh*~?S@i{x~|#p_Y_4zp63W5 i+&*ZnQA)X=3GfpD1 Date: Sun, 28 Apr 2019 15:48:03 +0200 Subject: [PATCH 07/15] Added redstone controlled fluid valves. Check valve recipe adapted. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 4 + .../engineersdecor/blocks/BlockDecor.java | 4 +- .../blocks/BlockDecorPipeValve.java | 107 +++++++++++++++--- .../wile/engineersdecor/blocks/ModBlocks.java | 21 +++- .../wile/engineersdecor/detail/ModConfig.java | 21 ++++ .../blockstates/straight_pipe_valve.json | 3 +- .../straight_pipe_valve_redstone.json | 19 ++++ .../straight_pipe_valve_redstone_analog.json | 19 ++++ .../assets/engineersdecor/lang/en_us.lang | 12 +- .../assets/engineersdecor/lang/ru_ru.lang | 12 +- ...ight_pipe_valve_rs_connector_submodel.json | 42 +++++++ .../engineersdecor/recipes/_constants.json | 18 +++ .../recipes/straight_pipe_valve_recipe.json | 5 +- ...ght_pipe_valve_redstone_analog_recipe.json | 16 +++ .../straight_pipe_valve_redstone_recipe.json | 17 +++ ..._pipe_valve_redstone_recipe_backcycle.json | 16 +++ ...ipe_valve_side_redstone_analog_texture.png | Bin 0 -> 624 bytes ...ht_pipe_valve_side_redstone_cn_texture.png | Bin 0 -> 266 bytes ...aight_pipe_valve_side_redstone_texture.png | Bin 0 -> 615 bytes meta/update.json | 3 +- 22 files changed, 317 insertions(+), 27 deletions(-) create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone_analog.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_analog_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_recipe_backcycle.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_analog_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_cn_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_texture.png diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 8ba36fd..af33e8b 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b5 +version_engineersdecor=1.0.4-b6 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 603bed6..6892ecb 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", "1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).", "1.0.4-b3": "[A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles.\n[A] Added support head/foot components for thin and thick steel poles.", @@ -29,6 +30,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b5" + "1.12.2-latest": "1.0.4-b6" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index c1a5ffa..db6b94a 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,10 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b6 [A] Added redstone controlled fluid valve. + [A] Added redstone controlled analog fluid valve. + [M] Check valve recipe adapted (thanks majijn). + - v1.0.4-b5 [A] Horizontal steel double-T support beam with pole connections. [A] Added fluid pipe check valve (straight, conducts only one way). [M] Internal registration block/te handling changed. diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecor.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecor.java index fb8e184..1032426 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecor.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecor.java @@ -51,7 +51,9 @@ public class BlockDecor extends Block public static final long CFG_TRANSLUCENT = 0x0000000000000040L; // indicates a block/pane is glass like (transparent, etc) public static final long CFG_LIGHT_VALUE_MASK = 0x0000000000000f00L; // fixed value for getLightValue() public static final long CFG_LIGHT_VALUE_SHIFT = 8L; - public static final long CFG_LAB_FURNACE_CRUDE = 0x0000000000010000L; // For DecorFurnace, denotes that it is a crude furnace. + public static final long CFG_ELECTRICAL = 0x0000000000010000L; // Denotes if a component is mainly flux driven. + public static final long CFG_REDSTONE_CONTROLLED = 0x0000000000020000L; // Denotes if a component has somehow a redstone control input + public static final long CFG_ANALOG = 0x0000000000040000L; // Denotes if a component has analog behaviour protected final AxisAlignedBB aabb; diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java index 956c64e..b6577a1 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java @@ -9,6 +9,8 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; import net.minecraft.item.ItemStack; import net.minecraft.block.Block; import net.minecraft.block.SoundType; @@ -16,6 +18,8 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; @@ -26,6 +30,7 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fluids.FluidStack; +import wile.engineersdecor.ModEngineersDecor; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -33,18 +38,59 @@ import javax.annotation.Nullable; public class BlockDecorPipeValve extends BlockDecorDirected { + public static final PropertyInteger RS_CONNECTION_DIR = PropertyInteger.create("rsdir", 0,4); + + public static void on_config(int container_size_decl, int redstone_slope) + { + BTileEntity.fluid_capacity_mb = MathHelper.clamp(container_size_decl, 1, 10000); + BTileEntity.redstone_flow_slope_mb = MathHelper.clamp(redstone_slope, 1, 10000); + ModEngineersDecor.logger.info("Config pipe valve: maxflow:" + BTileEntity.fluid_capacity_mb + "mb, redstone amp:" + BTileEntity.redstone_flow_slope_mb + "mb/sig"); + } + public BlockDecorPipeValve(@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 + protected BlockStateContainer createBlockState() + { return new BlockStateContainer(this, FACING, RS_CONNECTION_DIR); } + @Override @SuppressWarnings("deprecation") public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer); - if(!placer.isSneaking()) state = state.withProperty(FACING, state.getValue(FACING).getOpposite()); + if(!placer.isSneaking()) state = state.withProperty(FACING, state.getValue(FACING).getOpposite()).withProperty(RS_CONNECTION_DIR, 0); return state; } + // world to model index transformations. [Facing block][Facing neighbour] -> int 0=nothing, 1=top, 2=right, 3=down, 4=left. + private static final int rsconnectors[][] = { + //D U N S W E + {0, 0, 1, 3, 4, 2}, // D + {0, 0, 3, 1, 4, 2}, // U + {3, 1, 0, 0, 4, 2}, // N + {3, 1, 0, 0, 2, 4}, // S + {3, 1, 2, 4, 0, 0}, // W + {3, 1, 4, 2, 0, 0}, // E + }; + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) + { + if((config & (CFG_REDSTONE_CONTROLLED))==0) return state; + EnumFacing.Axis bfa = state.getValue(FACING).getAxis(); + int bfi = state.getValue(FACING).getIndex(); + for(EnumFacing f:EnumFacing.VALUES) { + if(f.getAxis() == bfa) continue; + BlockPos nbp = pos.offset(f); + IBlockState nbs = world.getBlockState(nbp); + if(nbs.canProvidePower() && (nbs.getBlock().canConnectRedstone(nbs, world, nbp, f))) { + return state.withProperty(RS_CONNECTION_DIR, rsconnectors[state.getValue(FACING).getIndex()][f.getIndex()]); + } + } + return state.withProperty(RS_CONNECTION_DIR, 0); + } + @Override @SuppressWarnings("deprecation") public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) @@ -60,6 +106,9 @@ public class BlockDecorPipeValve extends BlockDecorDirected world.notifyNeighborsOfStateChange(pos, this, true); } + public boolean canConnectRedstone(IBlockState state, IBlockAccess world, BlockPos pos, @Nullable EnumFacing side) + { return (side!=null) && (side!=state.getValue(FACING)) && (side!=state.getValue(FACING).getOpposite()); } + @Override public boolean hasTileEntity(IBlockState state) { return true; } @@ -71,7 +120,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected private void update_te(World world, IBlockState state, BlockPos pos) { TileEntity te = world.getTileEntity(pos); - if(te instanceof BlockDecorPipeValve.BTileEntity) ((BlockDecorPipeValve.BTileEntity)te).block_reconfigure(state.getValue(FACING)); + if(te instanceof BlockDecorPipeValve.BTileEntity) ((BlockDecorPipeValve.BTileEntity)te).block_reconfigure(state.getValue(FACING), config); } //-------------------------------------------------------------------------------------------------------------------- @@ -80,17 +129,34 @@ public class BlockDecorPipeValve extends BlockDecorDirected public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider { - public static final int FLUID_CAPACITY_MB = 1000; // likely also the max flow per tick private static final BackFlowHandler back_flow_handler_ = new BackFlowHandler(); + protected static int fluid_capacity_mb = 1000; // likely also the max flow per tick + protected static int redstone_flow_slope_mb = 1000/15; private final IFluidTankProperties[] fluid_props_ = {this}; private EnumFacing block_facing_ = EnumFacing.NORTH; - private boolean filling = false; + private boolean filling_ = false; + private boolean filling_enabled_ = true; + private long block_config_ = 0; public BTileEntity() {} - public void block_reconfigure(EnumFacing facing) - { block_facing_ = facing; } + public void block_reconfigure(EnumFacing facing, long block_config) + { + block_facing_ = facing; + block_config_ = block_config; + filling_enabled_ = false; + IFluidHandler fh = forward_fluid_handler(); + if(fh!=null) { + if(fh.getTankProperties().length==0) { + filling_enabled_ = true; // we don't know, so in doubt try filling. + } else { + for(IFluidTankProperties fp:fh.getTankProperties()) { + if((fp!=null) && (fp.canFill())) { filling_enabled_ = true; break; } + } + } + } + } // TileEntity ------------------------------------------------------------------------------ @@ -104,7 +170,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected if(!hasWorld()) return; final IBlockState state = world.getBlockState(pos); if((!(state.getBlock() instanceof BlockDecorPipeValve))) return; - block_reconfigure(state.getValue(FACING)); + block_reconfigure(state.getValue(FACING), block_config_); } // ICapabilityProvider -------------------------------------------------------------------- @@ -124,17 +190,28 @@ public class BlockDecorPipeValve extends BlockDecorDirected // IFluidHandler/IFluidTankProperties --------------------------------------------------------------- + @Nullable + private IFluidHandler forward_fluid_handler() + { + final TileEntity te = world.getTileEntity(pos.offset(block_facing_)); + if(te == null) return null; + return te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, block_facing_.getOpposite()); + } + @Override public int fill(FluidStack resource, boolean doFill) { - if(filling) return 0; - final TileEntity te = world.getTileEntity(pos.offset(block_facing_)); - if(te == null) return 0; - final IFluidHandler fh = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, block_facing_.getOpposite()); + if((filling_) || (!filling_enabled_)) return 0; + if((block_config_ & CFG_REDSTONE_CONTROLLED) != 0) { + int rs = world.getRedstonePowerFromNeighbors(pos); + if(rs <= 0) return 0; + if(((block_config_ & CFG_ANALOG) != 0) && (rs < 15)) resource.amount = MathHelper.clamp(rs * redstone_flow_slope_mb, 1, resource.amount); + } + final IFluidHandler fh = forward_fluid_handler(); if(fh==null) return 0; - filling = true; // in case someone does not check the cap, but just "forwards back" what is beeing filled right now. - int n_filled = fh.fill(resource, doFill); - filling = false; + filling_ = true; // in case someone does not check the cap, but just "forwards back" what is beeing filled right now. + int n_filled = forward_fluid_handler().fill(resource, doFill); + filling_ = false; return n_filled; } @@ -160,7 +237,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected { return null; } public int getCapacity() - { return FLUID_CAPACITY_MB; } + { return fluid_capacity_mb; } @Override public boolean canFill() diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index b188d75..0593125 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -181,13 +181,27 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(5,11,0, 11,16,16) ); - public static final BlockDecorPipeValve STRAIGHT_PIPE_VALVE = new BlockDecorPipeValve( + public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = new BlockDecorPipeValve( "straight_pipe_valve", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, Material.IRON, 1.0f, 15f, SoundType.METAL, ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) ); + public static final BlockDecorPipeValve STRAIGHT_REDSTONE_VALVE = new BlockDecorPipeValve( + "straight_pipe_valve_redstone", + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED, + Material.IRON, 1.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + ); + + public static final BlockDecorPipeValve STRAIGHT_REDSTONE_ANALOG_VALVE = new BlockDecorPipeValve( + "straight_pipe_valve_redstone_analog", + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG, + Material.IRON, 1.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + ); + //-------------------------------------------------------------------------------------------------------------------- //-- Tile entities //-------------------------------------------------------------------------------------------------------------------- @@ -247,11 +261,10 @@ public class ModBlocks THIN_STEEL_POLE_HEAD, THICK_STEEL_POLE_HEAD, STEEL_DOUBLE_T_SUPPORT, - STRAIGHT_PIPE_VALVE, STRAIGHT_PIPE_VALVE_TEI + STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, STRAIGHT_PIPE_VALVE_TEI }; - private static final Object dev_content[] = { - }; + private static final Object dev_content[] = {}; //-------------------------------------------------------------------------------------------------------------------- //-- Init diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java index 30bfffa..71dcf5c 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java @@ -201,6 +201,26 @@ public class ModConfig }) @Config.Name("Crafting table: Move buttons") public boolean with_crafting_quickmove_buttons = false; + + @Config.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. " + }) + @Config.Name("Valves: Max flow rate") + @Config.RangeInt(min=1, max=10000) + public int pipevalve_max_flowrate = 1000; + + @Config.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. " + }) + @Config.Name("Valves: Redstone slope") + @Config.RangeInt(min=1, max=10000) + public int pipevalve_redstone_slope = 20; } @SuppressWarnings("unused") @@ -268,6 +288,7 @@ public class ModConfig BlockDecorChair.on_config(optout.without_chair_sitting, optout.without_mob_chair_sitting, tweaks.chair_mob_sitting_probability_percent, tweaks.chair_mob_standup_probability_percent); BlockDecorLadder.on_config(optout.without_ladder_speed_boost); BlockDecorCraftingTable.on_config(optout.without_crafting_table_history, false, tweaks.with_crafting_quickmove_buttons); + BlockDecorPipeValve.on_config(tweaks.pipevalve_max_flowrate, tweaks.pipevalve_redstone_slope); } } diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json index d3feed0..83d92f0 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json @@ -4,6 +4,7 @@ "variants": { "normal": [{}], "inventory": [{}], - "facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} } + "facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} }, + "rsdir": { "0":{},"1":{},"2":{},"3":{},"4":{} } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone.json new file mode 100644 index 0000000..1ff17b3 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "engineersdecor:pipe/straight_pipe_valve_model", + "textures": { "side" : "engineersdecor:blocks/pipe/straight_pipe_valve_side_redstone_texture" } + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} }, + "rsdir": { + "0":{}, + "1":{ "submodel": {"rsdiru": { "model": "engineersdecor:pipe/straight_pipe_valve_rs_connector_submodel", "x": -90 }} }, + "2":{ "submodel": {"rsdirr": { "model": "engineersdecor:pipe/straight_pipe_valve_rs_connector_submodel", "y": 90 }} }, + "3":{ "submodel": {"rsdird": { "model": "engineersdecor:pipe/straight_pipe_valve_rs_connector_submodel", "x": 90 }} }, + "4":{ "submodel": {"rsdirl": { "model": "engineersdecor:pipe/straight_pipe_valve_rs_connector_submodel", "y": -90 }} } + } + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone_analog.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone_analog.json new file mode 100644 index 0000000..21f4069 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone_analog.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "engineersdecor:pipe/straight_pipe_valve_model", + "textures": { "side" : "engineersdecor:blocks/pipe/straight_pipe_valve_side_redstone_analog_texture" } + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} }, + "rsdir": { + "0":{}, + "1":{ "submodel": {"rsdiru": { "model": "engineersdecor:pipe/straight_pipe_valve_rs_connector_submodel", "x": -90 }} }, + "2":{ "submodel": {"rsdirr": { "model": "engineersdecor:pipe/straight_pipe_valve_rs_connector_submodel", "y": 90 }} }, + "3":{ "submodel": {"rsdird": { "model": "engineersdecor:pipe/straight_pipe_valve_rs_connector_submodel", "x": 90 }} }, + "4":{ "submodel": {"rsdirl": { "model": "engineersdecor:pipe/straight_pipe_valve_rs_connector_submodel", "y": -90 }} } + } + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index 72ce51d..cc31fa7 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -95,7 +95,17 @@ tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Sol smelting speed boost. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.straight_pipe_valve.name=Fluid pipe check valve -tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. Does not connect to the sides. Sneak to place in reverse direction. +tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \ + Does not connect to the sides. Reduces flow rate. Sneak to place in reverse direction. +tile.engineersdecor.straight_pipe_valve_redstone.name=Redstone controlled fluid valve +tile.engineersdecor.straight_pipe_valve_redstone.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \ + Does not connect to the sides. Sneak to place in reverse direction. \ + Blocks if not redstone powered. +tile.engineersdecor.straight_pipe_valve_redstone_analog.name=Redstone analog fluid valve +tile.engineersdecor.straight_pipe_valve_redstone_analog.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \ + Does not connect to the sides. Sneak to place in reverse direction. \ + Blocks if not redstone powered, reduces the flow rate linear from power 1 to 14, \ + opens to maximum possible valve flow rate for power 15. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor) tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang index 4c3bbeb..e9759ee 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang @@ -88,7 +88,17 @@ tile.engineersdecor.small_lab_furnace.name=Компактная лаборато tile.engineersdecor.small_lab_furnace.help=§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива - сверху. Немного горячее чем каменная, поэтому быстрее. Два внутренних слота для ввода, выхода и топлива. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.straight_pipe_valve.name=Straight fluid valve -#tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. Does not connect to the sides. Sneak to place in reverse direction. +#tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \ + Does not connect to the sides. Reduces flow rate. Sneak to place in reverse direction. +tile.engineersdecor.straight_pipe_valve_redstone.name=Redstone controlled fluid valve +#tile.engineersdecor.straight_pipe_valve_redstone.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \ + Does not connect to the sides. Sneak to place in reverse direction. \ + Blocks if not redstone powered. +tile.engineersdecor.straight_pipe_valve_redstone_analog.name=Redstone analog fluid valve +#tile.engineersdecor.straight_pipe_valve_redstone_analog.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \ + Does not connect to the sides. Sneak to place in reverse direction. \ + Blocks if not redstone powered, reduces the flow rate linear from power 1 to 14, \ + opens to maximum possible valve flow rate for power 15. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo) #tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json new file mode 100644 index 0000000..c1ed08d --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json @@ -0,0 +1,42 @@ +{ + "textures": { + "rsside": "engineersdecor:blocks/pipe/straight_pipe_valve_side_redstone_texture", + "particle": "engineersdecor:blocks/pipe/straight_pipe_valve_side_redstone_texture", + "rsend": "engineersdecor:blocks/pipe/straight_pipe_valve_side_redstone_cn_texture" + }, + "elements": [ + { + "from": [5, 5, 0], + "to": [11, 11, 3], + "faces": { + "north": {"uv": [5, 5, 11, 11], "rotation": 90, "texture": "#rsend"}, + "east": {"uv": [13, 5, 16, 11], "texture": "#rsside"}, + "west": {"uv": [13, 5, 16, 11], "rotation": 180, "texture": "#rsside"}, + "up": {"uv": [13, 5, 16, 11], "rotation": 270, "texture": "#rsside"}, + "down": {"uv": [13, 5, 16, 11], "rotation": 90, "texture": "#rsside"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [120, 15, 0], + "translation": [-1, -1, -2], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_righthand": { + "rotation": [120, 30, 0], + "translation": [2, 3, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json index cfa0394..a83c680 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json @@ -106,6 +106,20 @@ ], "name": "plateAnyMetal" }, + { + "ingredient": [ + { "item": "immersiveengineering:material", "data": 8 }, + { "item": "immersiveengineering:material", "data": 9 } + ], + "name": "anyMechanicalComponent" + }, + { + "ingredient": [ + { "item": "immersiveengineering:connector", "data": 12 }, + { "item": "immersiveengineering:connector", "data": 13 } + ], + "name": "anyDirectedRedstoneConnector" + }, { "ingredient": [ { "type": "forge:ore_dict", "ore": "ingotBrick" }, @@ -129,6 +143,10 @@ "ingredient": { "type": "forge:ore_dict", "ore": "blockGlass" }, "name": "blockGlass" }, + { + "ingredient": { "type": "forge:ore_dict", "ore": "dustRedstone" }, + "name": "dustRedstone" + }, { "ingredient": { "item": "minecraft:diamond", "data": 0 }, "name": "itemDiamond" diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_recipe.json index 8e7201f..8562a52 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_recipe.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_recipe.json @@ -8,11 +8,14 @@ ], "type": "minecraft:crafting_shaped", "pattern": [ - "PPP" + "PMP" ], "key": { "P": { "item": "#itemFluidPipe" + }, + "M": { + "item": "#anyMechanicalComponent" } }, "result": { diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_analog_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_analog_recipe.json new file mode 100644 index 0000000..9c1c82b --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_analog_recipe.json @@ -0,0 +1,16 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:straight_pipe_valve_redstone_analog", + "required": ["engineersdecor:straight_pipe_valve_redstone"] + } + ], + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { "item": "engineersdecor:straight_pipe_valve_redstone" } + ], + "result": { + "item": "engineersdecor:straight_pipe_valve_redstone_analog" + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_recipe.json new file mode 100644 index 0000000..5931be4 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_recipe.json @@ -0,0 +1,17 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:straight_pipe_valve_redstone", + "required": ["engineersdecor:straight_pipe_valve"] + } + ], + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { "item": "engineersdecor:straight_pipe_valve" }, + { "item": "#anyDirectedRedstoneConnector" } + ], + "result": { + "item": "engineersdecor:straight_pipe_valve_redstone" + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_recipe_backcycle.json b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_recipe_backcycle.json new file mode 100644 index 0000000..bda3489 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/straight_pipe_valve_redstone_recipe_backcycle.json @@ -0,0 +1,16 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:straight_pipe_valve_redstone", + "required": ["engineersdecor:straight_pipe_valve_redstone_analog"] + } + ], + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { "item": "engineersdecor:straight_pipe_valve_redstone_analog" } + ], + "result": { + "item": "engineersdecor:straight_pipe_valve_redstone" + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_analog_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_analog_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c34e60cd119765d008d1b65aa4b573ffae848e GIT binary patch literal 624 zcmV-$0+0QPP)VGd00Iz6L_t(I%YBngOY1-shM&w#Cb4Lu ztswO-6j2v$^pE({{9A(1tq87^BFJqUZtC^E!)OC&bo~o+2xVQj7@vbCE$g+%sg9EhINGXw0QdJd7DXOX> ziXxt$pOI3wX^8f5baaHZmhpJZY&JtF#qRDdgTa8ht|`lsr>7@E2pk_DcYw~pzgjMr z7-MLfhSh5Isp40C3+VNFY;SLq=Q-9|ilRU%g;MHgz}xLDv2*;%GE4{{1X^p>&f$e% zu~;CSBfq{Tj$;Oc!Dm3TwS_-9AL+eD9aKd#77fbX{|SQ z@9r25=M0B)q?CB?`F(aqK5Xs8lhV4%j&NOwP{{O$~r_4r?t!h|P|C?Pv)!QB1sE}Uf7=lN0000< KMNUMnLSTX_*c9^s literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_cn_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_cn_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..a21b62511f63b46afc4711b6bd9f0a7adc85df47 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DjSL74G){)!Z!;3`iS#}JFtPbb-O9dZz8-M_~3#)hd!m^qT3SMF&L-?VZ2hLaO* z9JkyknyhHQyR2!0lap2LU7kJt=KY?lR&nV}NLpAYny}W@g@Hp+K`A18af8V=lVcaI zl+Su_a`P0G&>3Izs+tyQyl88D{?x60UlV`E+UKPgzA~GBU^sTM{;fil)9q~$T6;KNg4AF}BxRTS;D@e+TGl22WQ% Jmvv4FO#s$aY=Zy* literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..041866046bc7eba128ebc75ab5615414e1ea387a GIT binary patch literal 615 zcmV-t0+{`YP)VGd00IX|L_t(I%YBo*PUAonMvrI4V0uUo}(QbHDo+U0+`Z zfcyJu1 z(=5Qp#NzV)r;ZJHuMbY&PTd^%bQQM@L7D$79;Ir6>v>9v%oGFquqxK=0sR zRaJ#ChOXv}KaM|}zy4u>2Z9FXTZ)>;;e1xhKDQeOk!Zf=O3W0_@`5I_jD)~ubw z3qe_y2MG_LeNmD2f6h#Q!B|tx-y0 ztz}yO2H;QrovNy^))IS<)*5RqNs_!z0bmdU&N-~LoSR=nM2JW*S^eBN5dx_-Aq1q9 zgb?-}1hL`8QOEq-4*;BVESF0}*8(8734{=v9r@T%e|JY13@F1LUP|yD4d6ZTa!Dj5 ztJMmvHC@+z09;<8fYHebqtS>w&jBckVlzr(HV)$$fW>05--Df`l>OYj_kAhG7|a&( z^z_8b%L~)#^c~Q) zE$j6ftu@|zo}Zs-nufZr5kmC$V2nX)O<9(`gTGg>0apth_IdyS002ovPDHLkV1lqM B2sr=% literal 0 HcmV?d00001 diff --git a/meta/update.json b/meta/update.json index d8ac810..f66de8b 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", "1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).", "1.0.4-b3": "[A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles.\n[A] Added support head/foot components for thin and thick steel poles.", @@ -38,7 +39,7 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b5", + "1.12.2-latest": "1.0.4-b6", "1.13.2-recommended": "", "1.13.2-latest": "1.0.4-b3" } From d2fcd0b59b1f075c04057b8785c43d09fd962ddf Mon Sep 17 00:00:00 2001 From: stfwi Date: Sun, 28 Apr 2019 21:33:58 +0200 Subject: [PATCH 08/15] Fluid valves support pressurized transfer. Fixed recipe json issue without IE installed. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 3 ++ .../blocks/BlockDecorPipeValve.java | 20 +++++++--- .../wile/engineersdecor/blocks/ModBlocks.java | 40 +++++++++---------- .../engineersdecor/recipes/_constants.json | 6 +++ meta/update.json | 3 +- 7 files changed, 49 insertions(+), 28 deletions(-) diff --git a/1.12/gradle.properties b/1.12/gradle.properties index af33e8b..86f2e0b 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b6 +version_engineersdecor=1.0.4-b7 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 6892ecb..5de66e5 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b7": "[F] Fixed recipe loading issue is IE is not installed.\n[M] Valves support IE pressureized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", "1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).", @@ -30,6 +31,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b6" + "1.12.2-latest": "1.0.4-b7" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index db6b94a..b762a61 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,9 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b7 [F] Fixed recipe loading issue is IE is not installed. + [M] Valves support IE pressureized fluid transfer. + - v1.0.4-b6 [A] Added redstone controlled fluid valve. [A] Added redstone controlled analog fluid valve. [M] Check valve recipe adapted (thanks majijn). diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java index b6577a1..76cf48b 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java @@ -17,6 +17,7 @@ import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.MathHelper; import net.minecraft.world.IBlockAccess; @@ -42,9 +43,9 @@ public class BlockDecorPipeValve extends BlockDecorDirected public static void on_config(int container_size_decl, int redstone_slope) { - BTileEntity.fluid_capacity_mb = MathHelper.clamp(container_size_decl, 1, 10000); + BTileEntity.fluid_maxflow_mb = MathHelper.clamp(container_size_decl, 1, 10000); BTileEntity.redstone_flow_slope_mb = MathHelper.clamp(redstone_slope, 1, 10000); - ModEngineersDecor.logger.info("Config pipe valve: maxflow:" + BTileEntity.fluid_capacity_mb + "mb, redstone amp:" + BTileEntity.redstone_flow_slope_mb + "mb/sig"); + ModEngineersDecor.logger.info("Config pipe valve: maxflow:" + BTileEntity.fluid_maxflow_mb + "mb, redstone amp:" + BTileEntity.redstone_flow_slope_mb + "mb/sig"); } public BlockDecorPipeValve(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB) @@ -130,7 +131,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider { private static final BackFlowHandler back_flow_handler_ = new BackFlowHandler(); - protected static int fluid_capacity_mb = 1000; // likely also the max flow per tick + protected static int fluid_maxflow_mb = 1000; protected static int redstone_flow_slope_mb = 1000/15; private final IFluidTankProperties[] fluid_props_ = {this}; private EnumFacing block_facing_ = EnumFacing.NORTH; @@ -207,11 +208,19 @@ public class BlockDecorPipeValve extends BlockDecorDirected if(rs <= 0) return 0; if(((block_config_ & CFG_ANALOG) != 0) && (rs < 15)) resource.amount = MathHelper.clamp(rs * redstone_flow_slope_mb, 1, resource.amount); } + FluidStack res = resource.copy(); + if(res.amount > fluid_maxflow_mb) res.amount = fluid_maxflow_mb; + if(res.amount > 50) { + // forward pressureized tag + if(res.tag==null) res.tag = new NBTTagCompound(); + res.tag.setBoolean("pressurized", true); + } final IFluidHandler fh = forward_fluid_handler(); if(fh==null) return 0; filling_ = true; // in case someone does not check the cap, but just "forwards back" what is beeing filled right now. - int n_filled = forward_fluid_handler().fill(resource, doFill); + int n_filled = forward_fluid_handler().fill(res, doFill); filling_ = false; + //if(n_filled > 0) System.out.println("F:" + resource.amount + "->" + n_filled); return n_filled; } @@ -237,7 +246,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected { return null; } public int getCapacity() - { return fluid_capacity_mb; } + { return 10000; } @Override public boolean canFill() @@ -271,5 +280,6 @@ public class BlockDecorPipeValve extends BlockDecorDirected @Override public boolean canFillFluidType(FluidStack fluidStack) { return false; } @Override public boolean canDrainFluidType(FluidStack fluidStack) { return false; } } + } } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index 0593125..de65884 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -40,46 +40,46 @@ public class ModBlocks //-- Blocks //-------------------------------------------------------------------------------------------------------------------- - public static final BlockDecorFull CLINKER_BRICK_BLOCK = new BlockDecorFull("clinker_brick_block", 0, Material.ROCK, 2f, 50f, SoundType.STONE); + public static final BlockDecorFull CLINKER_BRICK_BLOCK = new BlockDecorFull("clinker_brick_block", 0, Material.ROCK, 2f, 15f, SoundType.STONE); public static final BlockDecorStairs CLINKER_BRICK_STAIRS = new BlockDecorStairs("clinker_brick_stairs", CLINKER_BRICK_BLOCK.getDefaultState()); - public static final BlockDecorWall CLINKER_BRICK_WALL = new BlockDecorWall("clinker_brick_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 8f, 50f, SoundType.STONE); + public static final BlockDecorWall CLINKER_BRICK_WALL = new BlockDecorWall("clinker_brick_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 2f, 20f, SoundType.STONE); - public static final BlockDecorFull SLAG_BRICK_BLOCK = new BlockDecorFull("slag_brick_block", 0, Material.ROCK, 2f, 50f, SoundType.STONE); + public static final BlockDecorFull SLAG_BRICK_BLOCK = new BlockDecorFull("slag_brick_block", 0, Material.ROCK, 2f, 15f, SoundType.STONE); public static final BlockDecorStairs SLAG_BRICK_STAIRS = new BlockDecorStairs("slag_brick_stairs", SLAG_BRICK_BLOCK.getDefaultState()); - public static final BlockDecorWall SLAG_BRICK_WALL = new BlockDecorWall("slag_brick_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 8f, 50f, SoundType.STONE); + public static final BlockDecorWall SLAG_BRICK_WALL = new BlockDecorWall("slag_brick_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 2f, 15f, SoundType.STONE); - public static final BlockDecorFull REBAR_CONCRETE_BLOCK = new BlockDecorFull("rebar_concrete", 0, Material.ROCK, 8f, 2000f, SoundType.STONE); + public static final BlockDecorFull REBAR_CONCRETE_BLOCK = new BlockDecorFull("rebar_concrete", 0, Material.ROCK, 5f, 2000f, SoundType.STONE); public static final BlockDecorStairs REBAR_CONCRETE_STAIRS = new BlockDecorStairs("rebar_concrete_stairs", REBAR_CONCRETE_BLOCK.getDefaultState()); - public static final BlockDecorWall REBAR_CONCRETE_WALL = new BlockDecorWall("rebar_concrete_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 8f, 2000f, SoundType.STONE); - public static final BlockDecorFull REBAR_CONCRETE_TILE = new BlockDecorFull("rebar_concrete_tile", 0, Material.ROCK, 8f, 2000f, SoundType.STONE); + public static final BlockDecorWall REBAR_CONCRETE_WALL = new BlockDecorWall("rebar_concrete_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 5f, 2000f, SoundType.STONE); + public static final BlockDecorFull REBAR_CONCRETE_TILE = new BlockDecorFull("rebar_concrete_tile", 0, Material.ROCK, 5f, 2000f, SoundType.STONE); public static final BlockDecorStairs REBAR_CONCRETE_TILE_STAIRS = new BlockDecorStairs("rebar_concrete_tile_stairs", REBAR_CONCRETE_TILE.getDefaultState()); - public static final BlockDecorWall CONCRETE_WALL = new BlockDecorWall("concrete_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 8f, 50f, SoundType.STONE); + public static final BlockDecorWall CONCRETE_WALL = new BlockDecorWall("concrete_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 5f, 20f, SoundType.STONE); - public static final BlockDecorLadder METAL_RUNG_LADDER = new BlockDecorLadder("metal_rung_ladder", 0, Material.IRON, 1.0f, 25f, SoundType.METAL); - public static final BlockDecorLadder METAL_RUNG_STEPS = new BlockDecorLadder("metal_rung_steps", 0, Material.IRON, 1.0f, 25f, SoundType.METAL); - public static final BlockDecorLadder TREATED_WOOD_LADDER = new BlockDecorLadder("treated_wood_ladder", 0, Material.WOOD, 1.0f, 15f, SoundType.WOOD); + public static final BlockDecorLadder METAL_RUNG_LADDER = new BlockDecorLadder("metal_rung_ladder", 0, Material.IRON, 1.0f, 20f, SoundType.METAL); + public static final BlockDecorLadder METAL_RUNG_STEPS = new BlockDecorLadder("metal_rung_steps", 0, Material.IRON, 1.0f, 20f, SoundType.METAL); + public static final BlockDecorLadder TREATED_WOOD_LADDER = new BlockDecorLadder("treated_wood_ladder", 0, Material.WOOD, 1.0f, 10f, SoundType.WOOD); public static final BlockDecorGlassBlock PANZERGLASS_BLOCK = new BlockDecorGlassBlock("panzerglass_block", 0, Material.GLASS, 0.8f, 2000f, SoundType.GLASS); public static final BlockDecorStraightPole TREATED_WOOD_POLE = new BlockDecorStraightPole( "treated_wood_pole", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, - Material.WOOD, 1.0f, 15f, SoundType.WOOD, + Material.WOOD, 1.0f, 10f, SoundType.WOOD, ModAuxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) ); public static final BlockDecorStraightPole TREATED_WOOD_POLE_HEAD = new BlockDecorStraightPole( "treated_wood_pole_head", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, - Material.WOOD, 1.0f, 15f, SoundType.WOOD, + Material.WOOD, 1.0f, 10f, SoundType.WOOD, ModAuxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) ); public static final BlockDecorStraightPole TREATED_WOOD_POLE_SUPPORT = new BlockDecorStraightPole( "treated_wood_pole_support", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, - Material.WOOD, 1.0f, 15f, SoundType.WOOD, + Material.WOOD, 1.0f, 10f, SoundType.WOOD, ModAuxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) ); @@ -142,21 +142,21 @@ public class ModBlocks public static final BlockDecorDirected TREATED_WOOD_WINDOWSILL = new BlockDecorDirected( "treated_wood_windowsill", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_FACING_PLACEMENT, - Material.WOOD, 1.0f, 15f, SoundType.WOOD, + Material.WOOD, 1.0f, 10f, SoundType.WOOD, ModAuxiliaries.getPixeledAABB(0.5,15,10.5, 15.5,16,16) ); public static final BlockDecorWindow TREATED_WOOD_WINDOW = new BlockDecorWindow( "treated_wood_window", BlockDecor.CFG_TRANSLUCENT|BlockDecor.CFG_LOOK_PLACEMENT, - Material.WOOD, 0.5f, 15f, SoundType.GLASS, + Material.WOOD, 0.5f, 10f, SoundType.GLASS, ModAuxiliaries.getPixeledAABB(0,0,7, 16,16,9) ); public static final BlockDecorWindow STEEL_FRAMED_WINDOW = new BlockDecorWindow( "steel_framed_window", BlockDecor.CFG_TRANSLUCENT|BlockDecor.CFG_LOOK_PLACEMENT, - Material.IRON, 0.5f, 30f, SoundType.GLASS, + Material.IRON, 0.5f, 15f, SoundType.GLASS, ModAuxiliaries.getPixeledAABB(0,0,7.5, 16,16,8.5) ); @@ -184,21 +184,21 @@ public class ModBlocks public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = new BlockDecorPipeValve( "straight_pipe_valve", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, - Material.IRON, 1.0f, 15f, SoundType.METAL, + Material.IRON, 0.5f, 15f, SoundType.METAL, ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) ); public static final BlockDecorPipeValve STRAIGHT_REDSTONE_VALVE = new BlockDecorPipeValve( "straight_pipe_valve_redstone", BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED, - Material.IRON, 1.0f, 15f, SoundType.METAL, + Material.IRON, 0.5f, 15f, SoundType.METAL, ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) ); public static final BlockDecorPipeValve STRAIGHT_REDSTONE_ANALOG_VALVE = new BlockDecorPipeValve( "straight_pipe_valve_redstone_analog", BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG, - Material.IRON, 1.0f, 15f, SoundType.METAL, + Material.IRON, 0.5f, 15f, SoundType.METAL, ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) ); diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json index a83c680..600b3bc 100644 --- a/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/_constants.json @@ -107,6 +107,9 @@ "name": "plateAnyMetal" }, { + "conditions": [ + { "type": "minecraft:item_exists", "item": "immersiveengineering:material" } + ], "ingredient": [ { "item": "immersiveengineering:material", "data": 8 }, { "item": "immersiveengineering:material", "data": 9 } @@ -114,6 +117,9 @@ "name": "anyMechanicalComponent" }, { + "conditions": [ + { "type": "minecraft:item_exists", "item": "immersiveengineering:connector" } + ], "ingredient": [ { "item": "immersiveengineering:connector", "data": 12 }, { "item": "immersiveengineering:connector", "data": 13 } diff --git a/meta/update.json b/meta/update.json index f66de8b..c1d53b8 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b7": "[F] Fixed recipe loading issue is IE is not installed.\n[M] Valves support IE pressureized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", "1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).", @@ -39,7 +40,7 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b6", + "1.12.2-latest": "1.0.4-b7", "1.13.2-recommended": "", "1.13.2-latest": "1.0.4-b3" } From 23cb65689c9d2c983c40e23cacdb8bd4a00c3c26 Mon Sep 17 00:00:00 2001 From: stfwi Date: Mon, 29 Apr 2019 16:54:47 +0200 Subject: [PATCH 09/15] Valve TE load initialisation also updates adjacent pipe blocks. --- .../blocks/BlockDecorPipeValve.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java index 76cf48b..9628fd5 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java @@ -9,6 +9,7 @@ */ package wile.engineersdecor.blocks; +import wile.engineersdecor.ModEngineersDecor; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.item.ItemStack; @@ -31,7 +32,6 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fluids.FluidStack; -import wile.engineersdecor.ModEngineersDecor; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -172,6 +172,25 @@ public class BlockDecorPipeValve extends BlockDecorDirected final IBlockState state = world.getBlockState(pos); if((!(state.getBlock() instanceof BlockDecorPipeValve))) return; block_reconfigure(state.getValue(FACING), block_config_); + world.notifyNeighborsOfStateChange(pos, state.getBlock(), false); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + int i = nbt.getInteger("facing"); + if((i>=0) || (i<6)) block_facing_ = EnumFacing.byIndex(i); + block_config_ = nbt.getLong("conf"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("facing", block_facing_.getIndex()); + nbt.setLong("conf", block_config_); + return nbt; } // ICapabilityProvider -------------------------------------------------------------------- From 7daaca00736358f07a18994870f65b41c66b9692 Mon Sep 17 00:00:00 2001 From: stfwi Date: Mon, 29 Apr 2019 19:14:32 +0200 Subject: [PATCH 10/15] Readme/release notes updated. --- 1.12/meta/update.json | 2 +- 1.12/readme.md | 4 ++-- meta/update.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 5de66e5..75f7b0c 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,7 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { - "1.0.4-b7": "[F] Fixed recipe loading issue is IE is not installed.\n[M] Valves support IE pressureized fluid transfer.", + "1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", "1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).", diff --git a/1.12/readme.md b/1.12/readme.md index b762a61..1859989 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,8 +10,8 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history - - v1.0.4-b7 [F] Fixed recipe loading issue is IE is not installed. - [M] Valves support IE pressureized fluid transfer. + - v1.0.4-b7 [F] Fixed recipe loading issue if IE is not installed. + [M] Valves support IE pressurized fluid transfer. - v1.0.4-b6 [A] Added redstone controlled fluid valve. [A] Added redstone controlled analog fluid valve. diff --git a/meta/update.json b/meta/update.json index c1d53b8..b14a1b3 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,7 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { - "1.0.4-b7": "[F] Fixed recipe loading issue is IE is not installed.\n[M] Valves support IE pressureized fluid transfer.", + "1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", "1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).", From 54bc1307903176ddd5cb68e1b6d2f3a05396a7d9 Mon Sep 17 00:00:00 2001 From: stfwi Date: Tue, 30 Apr 2019 18:05:04 +0200 Subject: [PATCH 11/15] Fixed stairs rendering when smooth lighting is disabled. Cumulated deprecation overrides into BlockDecor where possible ('overriding is fine methods'). Unified block placement flags. Started experimental passive fluid accumulator. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 3 + .../engineersdecor/blocks/BlockDecor.java | 44 ++--- .../blocks/BlockDecorChair.java | 2 +- .../blocks/BlockDecorCraftingTable.java | 2 +- .../blocks/BlockDecorDirected.java | 14 +- .../engineersdecor/blocks/BlockDecorFull.java | 5 +- .../blocks/BlockDecorFurnace.java | 14 +- .../blocks/BlockDecorGlassBlock.java | 5 - .../blocks/BlockDecorHorizontalSupport.java | 8 +- .../BlockDecorPassiveFluidAccumulator.java | 176 ++++++++++++++++++ .../blocks/BlockDecorPipeValve.java | 11 +- .../blocks/BlockDecorStairs.java | 15 +- .../blocks/BlockDecorStraightPole.java | 6 +- .../engineersdecor/blocks/BlockDecorWall.java | 11 -- .../wile/engineersdecor/blocks/ModBlocks.java | 28 ++- .../blockstates/clinker_brick_block.json | 2 +- .../passive_fluid_accumulator.json | 11 ++ .../blockstates/rebar_concrete.json | 2 +- .../blockstates/rebar_concrete_tile.json | 2 +- .../blockstates/slag_brick_block.json | 2 +- .../assets/engineersdecor/lang/en_us.lang | 3 + .../assets/engineersdecor/lang/ru_ru.lang | 3 + .../models/block/decor_full_block_model.json | 1 - .../pipe/passive_fluid_accumulator_model.json | 55 ++++++ .../block/std/decor_full_block_model.json | 4 + .../passive_fluid_accumulator_recipe.json | 30 +++ meta/update.json | 3 +- readme.md | 2 +- 30 files changed, 364 insertions(+), 105 deletions(-) create mode 100644 1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/passive_fluid_accumulator.json delete mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/decor_full_block_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/std/decor_full_block_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/passive_fluid_accumulator_recipe.json diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 86f2e0b..5265633 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b7 +version_engineersdecor=1.0.4-b8 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 75f7b0c..714af8a 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[A] Added passive fluid accumulator.", "1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", @@ -31,6 +32,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b7" + "1.12.2-latest": "1.0.4-b8" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index 1859989..ae4b005 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,9 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b8 [F] Fixed stairs rendering without smooth light (thanks rastot9). + [A] Added passive fluid accumulator. + - v1.0.4-b7 [F] Fixed recipe loading issue if IE is not installed. [M] Valves support IE pressurized fluid transfer. diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecor.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecor.java index 1032426..06575c5 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecor.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecor.java @@ -9,13 +9,14 @@ * - MC block defaults. * - Tooltip functionality * - Model initialisation + * - Accumulating "deprecated" warnings from Block where "overriding/implementing is fine". */ package wile.engineersdecor.blocks; -import net.minecraft.block.SoundType; -import net.minecraft.util.*; import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.detail.ModAuxiliaries; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.Block; import net.minecraft.block.material.EnumPushReaction; import net.minecraft.block.material.Material; @@ -25,8 +26,8 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraft.item.ItemStack; import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.*; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; @@ -48,7 +49,8 @@ public class BlockDecor extends Block public static final long CFG_FACING_PLACEMENT = 0x0000000000000008L; // placed on the facing the player has clicked. public static final long CFG_OPPOSITE_PLACEMENT = 0x0000000000000010L; // placed placed in the opposite direction of the face the player clicked. public static final long CFG_FLIP_PLACEMENT_IF_SAME = 0x0000000000000020L; // placement direction flipped if an instance of the same class was clicked - public static final long CFG_TRANSLUCENT = 0x0000000000000040L; // indicates a block/pane is glass like (transparent, etc) + public static final long CFG_FLIP_PLACEMENT_SHIFTCLICK = 0x0000000000000040L; // placement direction flipped if player is sneaking + public static final long CFG_TRANSLUCENT = 0x0000000000000080L; // indicates a block/pane is glass like (transparent, etc) public static final long CFG_LIGHT_VALUE_MASK = 0x0000000000000f00L; // fixed value for getLightValue() public static final long CFG_LIGHT_VALUE_SHIFT = 8L; public static final long CFG_ELECTRICAL = 0x0000000000010000L; // Denotes if a component is mainly flux driven. @@ -91,6 +93,11 @@ public class BlockDecor extends Block public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) { return true; } + @Override + @SuppressWarnings("deprecation") + public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) + { return BlockFaceShape.SOLID; } + @Override @SuppressWarnings("deprecation") public boolean isFullCube(IBlockState state) @@ -158,37 +165,18 @@ public class BlockDecor extends Block public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return aabb; } + @SideOnly(Side.CLIENT) + @SuppressWarnings("deprecation") + public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) + { return state.getBoundingBox(worldIn, pos).offset(pos); } + @Override public boolean hasTileEntity(IBlockState state) { return false; } - @Override - public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) - {} - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) - { return false; } - - @Override - public void onBlockClicked(World world, BlockPos pos, EntityPlayer player) - {} - @Override @SuppressWarnings("deprecation") public void neighborChanged(IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos) {} - @Override - public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) - { return (int)((config & CFG_LIGHT_VALUE_MASK) >> CFG_LIGHT_VALUE_SHIFT); } - - @Override - public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) - { return super.canPlaceBlockOnSide(world, pos, side); } - - @Override - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) - { return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand); } - } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java index ba82522..4d9bb6c 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java @@ -8,6 +8,7 @@ */ package wile.engineersdecor.blocks; +import wile.engineersdecor.ModEngineersDecor; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -21,7 +22,6 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; -import wile.engineersdecor.ModEngineersDecor; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java index c7e4f87..8d225cb 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java @@ -10,6 +10,7 @@ package wile.engineersdecor.blocks; import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.detail.Networking; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -44,7 +45,6 @@ import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.registries.IForgeRegistry; import com.google.common.collect.ImmutableList; -import wile.engineersdecor.detail.Networking; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java index 95bea2d..acb35e4 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java @@ -8,7 +8,6 @@ */ package wile.engineersdecor.blocks; -import net.minecraft.block.SoundType; import wile.engineersdecor.detail.ModAuxiliaries; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.BlockDirectional; @@ -16,9 +15,11 @@ import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.state.IBlockState; +import net.minecraft.block.SoundType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; import net.minecraft.world.IBlockAccess; +import net.minecraft.util.EnumHand; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; import net.minecraft.util.EnumFacing; @@ -67,12 +68,14 @@ public class BlockDecorDirected extends BlockDecor { return false; } @Override - @SuppressWarnings("deprecation") + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { return (int)((config & CFG_LIGHT_VALUE_MASK) >> CFG_LIGHT_VALUE_SHIFT); } + + @Override public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) { return BlockFaceShape.UNDEFINED; } @Override - @SuppressWarnings("deprecation") public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return AABBs.get(((EnumFacing)state.getValue(FACING)).getIndex() & 0x7); } @@ -102,7 +105,6 @@ public class BlockDecorDirected extends BlockDecor { return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); } @Override - @SuppressWarnings("deprecation") public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) { if(!super.canPlaceBlockOnSide(world, pos, side)) return false; @@ -110,8 +112,7 @@ public class BlockDecorDirected extends BlockDecor } @Override - @SuppressWarnings("deprecation") - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { if((config & (CFG_HORIZIONTAL|CFG_LOOK_PLACEMENT)) == (CFG_HORIZIONTAL|CFG_LOOK_PLACEMENT)) { // horizontal placement in direction the player is looking @@ -126,6 +127,7 @@ public class BlockDecorDirected extends BlockDecor // default: placement on the face the player clicking } if((config & CFG_OPPOSITE_PLACEMENT)!=0) facing = facing.getOpposite(); + if(((config & CFG_FLIP_PLACEMENT_SHIFTCLICK) != 0) && (placer.isSneaking())) facing = facing.getOpposite(); return getDefaultState().withProperty(FACING, facing); } } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java index a237d36..1110a9a 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java @@ -23,10 +23,7 @@ import javax.annotation.Nullable; public class BlockDecorFull extends BlockDecor { public BlockDecorFull(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound) - { - super(registryName, config, material, hardness, resistance, sound); - setLightOpacity(255); - } + { super(registryName, config, material, hardness, resistance, sound); } @Override public boolean isOpaqueCube(IBlockState state) diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java index 5ffda4d..189861f 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java @@ -8,12 +8,9 @@ */ package wile.engineersdecor.blocks; -import com.google.common.collect.Maps; -import net.minecraft.entity.item.EntityXPOrb; -import net.minecraft.init.SoundEvents; -import net.minecraftforge.energy.CapabilityEnergy; -import net.minecraftforge.energy.IEnergyStorage; import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.detail.ExtItems; + import net.minecraft.stats.StatList; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; @@ -23,6 +20,7 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.world.World; import net.minecraft.world.Explosion; +import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -30,6 +28,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.tileentity.TileEntity; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.init.SoundEvents; import net.minecraft.init.Items; import net.minecraft.item.*; import net.minecraft.item.crafting.FurnaceRecipes; @@ -43,12 +42,15 @@ import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.math.MathHelper; import net.minecraft.util.*; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.SidedInvWrapper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import wile.engineersdecor.detail.ExtItems; + +import com.google.common.collect.Maps; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Map; diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java index 3bbe38e..62643ab 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java @@ -39,7 +39,6 @@ public class BlockDecorGlassBlock extends BlockDecor @Override @SideOnly(Side.CLIENT) - @SuppressWarnings("deprecation") public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) { final IBlockState neighbourState = world.getBlockState(pos.offset(side)); @@ -57,12 +56,10 @@ public class BlockDecorGlassBlock extends BlockDecor { return false; } @Override - @SuppressWarnings("deprecation") public boolean isFullCube(IBlockState state) { return true; } @Override - @SuppressWarnings("deprecation") public boolean isNormalCube(IBlockState state) { return false; } @@ -79,12 +76,10 @@ public class BlockDecorGlassBlock extends BlockDecor { return false; } @Override - @SuppressWarnings("deprecation") public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) { return BlockFaceShape.SOLID; } @Override - @SuppressWarnings("deprecation") public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return FULL_BLOCK_AABB; } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java index 043cac0..b86a57f 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java @@ -12,6 +12,7 @@ package wile.engineersdecor.blocks; import net.minecraft.block.SoundType; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.util.EnumHand; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import wile.engineersdecor.detail.ModAuxiliaries; @@ -72,17 +73,14 @@ public class BlockDecorHorizontalSupport extends BlockDecor { return false; } @Override - @SuppressWarnings("deprecation") public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) { return BlockFaceShape.UNDEFINED; } @SideOnly(Side.CLIENT) - @SuppressWarnings("deprecation") public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World world, BlockPos pos) { return AABBs.get(state.getValue(EASTWEST) ? 0x3 : 0x2).offset(pos); } @Override - @SuppressWarnings("deprecation") public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return AABBs.get(state.getValue(EASTWEST) ? 0x1 : 0x0); } @@ -136,13 +134,11 @@ public class BlockDecorHorizontalSupport extends BlockDecor { return state; } @Override - @SuppressWarnings("deprecation") public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) { return super.canPlaceBlockOnSide(world, pos, side); } @Override - @SuppressWarnings("deprecation") - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { return getActualState(getDefaultState().withProperty(EASTWEST, (placer.getHorizontalFacing().getAxis()==EnumFacing.Axis.X)), world, pos); } } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java new file mode 100644 index 0000000..0f6358d --- /dev/null +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java @@ -0,0 +1,176 @@ +/* + * @file BlockDecorPassiveFluidAccumulator.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Basically a piece of pipe that does not connect to + * pipes on the side, and conducts fluids only in one way. + */ +package wile.engineersdecor.blocks; + +import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.detail.ModAuxiliaries; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; +import net.minecraftforge.fluids.FluidStack; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + + +public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implements ModAuxiliaries.IExperimentalFeature +{ + public BlockDecorPassiveFluidAccumulator(@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; } + + @Nullable + public TileEntity createTileEntity(World world, IBlockState state) + { return new BlockDecorPassiveFluidAccumulator.BTileEntity(); } + + //-------------------------------------------------------------------------------------------------------------------- + // Tile entity + //-------------------------------------------------------------------------------------------------------------------- + + public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider +, ModAuxiliaries.IExperimentalFeature + { + protected static int tank_fill_rate_mb = 1000; + protected static int tank_capacity_mb = 2000; + private final IFluidTankProperties[] fluid_props_ = {this}; + private final InputFillHandler fill_handler_ = new InputFillHandler(this); + private EnumFacing block_facing_ = EnumFacing.NORTH; + private FluidStack tank_ = null; + private FluidStack last_filled_ = null; + private FluidStack last_drain_request_fluid_ = null; + private int last_drain_request_amount_ = 0; + + public BTileEntity() + {} + + // TileEntity ------------------------------------------------------------------------------ + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns) + { return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorPipeValve)); } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + tank_ = (!nbt.hasKey("tank")) ? (null) : (FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("tank"))); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + if(tank_ != null) nbt.setTag("tank", tank_.writeToNBT(new NBTTagCompound())); + return nbt; + } + + // ICapabilityProvider -------------------------------------------------------------------- + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { return ((capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)) || super.hasCapability(capability, facing); } + + @Override + @Nullable + @SuppressWarnings("unchecked") + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { return (capability!=CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) ? (super.getCapability(capability, facing)) : (facing==block_facing_) ? (((T)this)) : ((T)fill_handler_); } + + // IFluidHandler/IFluidTankProperties of the output port ----------------------------------- + + @Override public IFluidTankProperties[] getTankProperties() + { return fluid_props_; } + + @Override public int fill(FluidStack resource, boolean doFill) + { return 0; } + + @Override + @Nullable + public FluidStack drain(FluidStack resource, boolean doDrain) + { + last_drain_request_fluid_ = resource.copy(); + return ((tank_==null) || (!tank_.isFluidEqual(resource))) ? (null) : drain(resource.amount, doDrain); + } + + @Override + @Nullable + public FluidStack drain(int maxDrain, boolean doDrain) + { + last_drain_request_amount_ = maxDrain; + if(tank_==null) return null; + if(maxDrain >= tank_.amount) { + if(!doDrain) return tank_.copy(); + FluidStack res = tank_; + tank_ = null; + return res; + } else { + FluidStack res = tank_.copy(); + res.amount = maxDrain; + if(doDrain) tank_.amount -= maxDrain; + return res; + } + } + + // IFluidTankProperties -- + @Override @Nullable public FluidStack getContents() { return (tank_==null) ? (null) : (tank_.copy()); } + @Override public int getCapacity() { return tank_capacity_mb; } + @Override public boolean canFill() { return false; } + @Override public boolean canDrain() { return true; } + @Override public boolean canFillFluidType(FluidStack fluidStack) { return false; } + @Override public boolean canDrainFluidType(FluidStack fluidStack) { return true; } + + // Output flow handler -- + private static class InputFillHandler implements IFluidHandler, IFluidTankProperties + { + private final BTileEntity parent_; + private final IFluidTankProperties[] props_ = {this}; + InputFillHandler(BTileEntity parent) { parent_ = parent; } + @Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { return null; } + @Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain) { return null; } + @Override @Nullable public FluidStack getContents() { return (parent_.tank_==null) ? (null) : (parent_.tank_.copy()); } + @Override public IFluidTankProperties[] getTankProperties() { return props_; } + @Override public int getCapacity() { return tank_capacity_mb; } + @Override public boolean canFill() { return true; } + @Override public boolean canDrain() { return false; } + @Override public boolean canFillFluidType(FluidStack fluidStack) { return true; } + @Override public boolean canDrainFluidType(FluidStack fluidStack) { return false; } + + @Override public int fill(FluidStack resource, boolean doFill) + { + FluidStack res = resource.copy(); + if(parent_.tank_ == null) { + res.amount = MathHelper.clamp(res.amount, 0, tank_fill_rate_mb); + if(doFill) parent_.tank_ = res; + return res.amount; + } else { + res.amount = MathHelper.clamp(res.amount, 0, Math.min(tank_fill_rate_mb, tank_capacity_mb-parent_.tank_.amount)); + if((res.amount <= 0) || (!parent_.tank_.isFluidEqual(resource))) return 0; + if(doFill) parent_.tank_.amount += res.amount; + return res.amount; + } + } + } + } +} diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java index 9628fd5..2145e4e 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java @@ -9,6 +9,7 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.util.EnumHand; import wile.engineersdecor.ModEngineersDecor; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; @@ -56,13 +57,8 @@ public class BlockDecorPipeValve extends BlockDecorDirected { return new BlockStateContainer(this, FACING, RS_CONNECTION_DIR); } @Override - @SuppressWarnings("deprecation") - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) - { - IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer); - if(!placer.isSneaking()) state = state.withProperty(FACING, state.getValue(FACING).getOpposite()).withProperty(RS_CONNECTION_DIR, 0); - return state; - } + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand).withProperty(RS_CONNECTION_DIR, 0); } // world to model index transformations. [Facing block][Facing neighbour] -> int 0=nothing, 1=top, 2=right, 3=down, 4=left. private static final int rsconnectors[][] = { @@ -93,7 +89,6 @@ public class BlockDecorPipeValve extends BlockDecorDirected } @Override - @SuppressWarnings("deprecation") public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) { EnumFacing fc = state.getValue(FACING); diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java index 8623453..b560bd8 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java @@ -10,8 +10,10 @@ package wile.engineersdecor.blocks; import net.minecraft.block.material.EnumPushReaction; import net.minecraft.block.state.IBlockState; +import net.minecraft.block.BlockStairs; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -25,7 +27,7 @@ import javax.annotation.Nullable; import java.util.List; -public class BlockDecorStairs extends net.minecraft.block.BlockStairs +public class BlockDecorStairs extends BlockStairs { public BlockDecorStairs(@Nonnull String registryName, IBlockState modelState) { @@ -33,8 +35,7 @@ public class BlockDecorStairs extends net.minecraft.block.BlockStairs setCreativeTab(ModEngineersDecor.CREATIVE_TAB_ENGINEERSDECOR); setRegistryName(ModEngineersDecor.MODID, registryName); setTranslationKey(ModEngineersDecor.MODID + "." + registryName); - setLightLevel(0); - setLightOpacity(64); + setLightOpacity(0); } @Override @@ -57,10 +58,6 @@ public class BlockDecorStairs extends net.minecraft.block.BlockStairs public boolean isNormalCube(IBlockState state) { return false; } - @Override - public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) - { return 0; } - @Override public boolean canSpawnInBlock() { return false; } @@ -74,8 +71,4 @@ public class BlockDecorStairs extends net.minecraft.block.BlockStairs public EnumPushReaction getPushReaction(IBlockState state) { return EnumPushReaction.NORMAL; } - @Override - public boolean hasTileEntity(IBlockState state) - { return false; } - } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java index 7dc7ad7..b774ac6 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java @@ -12,6 +12,7 @@ import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.EnumHand; import net.minecraft.world.World; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; @@ -26,10 +27,9 @@ public class BlockDecorStraightPole extends BlockDecorDirected { super(registryName, config, material, hardness, resistance, sound, unrotatedAABB); } @Override - @SuppressWarnings("deprecation") - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { - IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer); + IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand); if((config & CFG_FLIP_PLACEMENT_IF_SAME) != 0) { if(world.getBlockState(pos.offset(facing.getOpposite())).getBlock() instanceof BlockDecorStraightPole) { state = state.withProperty(FACING, state.getValue(FACING).getOpposite()); diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java index 7fbfe6e..4886d2e 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java @@ -78,7 +78,6 @@ public class BlockDecorWall extends BlockDecor } @Override - @SuppressWarnings("deprecation") public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return AABB_BY_INDEX[getAABBIndex(getActualState(state, source, pos))]; } @@ -89,7 +88,6 @@ public class BlockDecorWall extends BlockDecor @Nullable @Override - @SuppressWarnings("deprecation") public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) { return CLIP_AABB_BY_INDEX[getAABBIndex(getActualState(state, world, pos))]; } @@ -101,22 +99,18 @@ public class BlockDecorWall extends BlockDecor } @Override - @SuppressWarnings("deprecation") public boolean isFullCube(IBlockState state) { return false; } @Override - @SuppressWarnings("deprecation") public boolean isPassable(IBlockAccess world, BlockPos pos) { return false; } @Override - @SuppressWarnings("deprecation") public boolean isOpaqueCube(IBlockState state) { return false; } @Override - @SuppressWarnings("deprecation") public boolean isNormalCube(IBlockState state) { return false; } @@ -143,23 +137,19 @@ public class BlockDecorWall extends BlockDecor { return Block.isExceptBlockForAttachWithPiston(b) || (b==Blocks.BARRIER) || (b==Blocks.MELON_BLOCK) || (b==Blocks.PUMPKIN) || (b==Blocks.LIT_PUMPKIN); } @Override - @SuppressWarnings("deprecation") @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) { return (side!=EnumFacing.DOWN) || (super.shouldSideBeRendered(blockState, blockAccess, pos, side)); } @Override - @SuppressWarnings("deprecation") public IBlockState getStateFromMeta(int meta) { return getDefaultState(); } @Override - @SuppressWarnings("deprecation") public int getMetaFromState(IBlockState state) { return 0; } @Override - @SuppressWarnings("deprecation") public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { boolean n = canWallConnectTo(world, pos, EnumFacing.NORTH); @@ -176,7 +166,6 @@ public class BlockDecorWall extends BlockDecor { return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH, TEXTURE_VARIANT}); } @Override - @SuppressWarnings("deprecation") public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) { return (face==EnumFacing.UP) ? (BlockFaceShape.SOLID) : ((face!=EnumFacing.DOWN) ? (BlockFaceShape.MIDDLE_POLE_THICK) : (BlockFaceShape.CENTER_BIG)); } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index de65884..e74d366 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -127,7 +127,7 @@ public class ModBlocks public static final BlockDecorCraftingTable TREATED_WOOD_CRAFTING_TABLE = new BlockDecorCraftingTable( "treated_wood_crafting_table", - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, Material.WOOD, 1.0f, 15f, SoundType.WOOD, ModAuxiliaries.getPixeledAABB(1,0,1, 15,15.9,15) ); @@ -162,7 +162,7 @@ public class ModBlocks public static final BlockDecorFurnace SMALL_LAB_FURNACE = new BlockDecorFurnace( "small_lab_furnace", - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, Material.IRON, 1.0f, 15f, SoundType.METAL, ModAuxiliaries.getPixeledAABB(1,0,1, 15,15,16.0) ); @@ -183,25 +183,36 @@ public class ModBlocks public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = new BlockDecorPipeValve( "straight_pipe_valve", - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| + BlockDecor.CFG_CUTOUT, Material.IRON, 0.5f, 15f, SoundType.METAL, ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) ); public static final BlockDecorPipeValve STRAIGHT_REDSTONE_VALVE = new BlockDecorPipeValve( "straight_pipe_valve_redstone", - BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED, + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED, Material.IRON, 0.5f, 15f, SoundType.METAL, ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) ); public static final BlockDecorPipeValve STRAIGHT_REDSTONE_ANALOG_VALVE = new BlockDecorPipeValve( "straight_pipe_valve_redstone_analog", - BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG, + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG, Material.IRON, 0.5f, 15f, SoundType.METAL, ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) ); + public static final BlockDecorPassiveFluidAccumulator PASSIVE_FLUID_ACCUMULATOR = new BlockDecorPassiveFluidAccumulator( + "passive_fluid_accumulator", + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| + BlockDecor.CFG_CUTOUT, + Material.IRON, 0.5f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) + ); + //-------------------------------------------------------------------------------------------------------------------- //-- Tile entities //-------------------------------------------------------------------------------------------------------------------- @@ -222,6 +233,9 @@ public class ModBlocks private static final TileEntityRegistrationData STRAIGHT_PIPE_VALVE_TEI = new TileEntityRegistrationData( BlockDecorPipeValve.BTileEntity.class, "te_pipe_valve" ); + private static final TileEntityRegistrationData PASSIVE_FLUID_ACCUMULATOR_TEI = new TileEntityRegistrationData( + BlockDecorPassiveFluidAccumulator.BTileEntity.class, "te_passive_fluid_accumulator" + ); //-------------------------------------------------------------------------------------------------------------------- //-- Registration list @@ -264,7 +278,9 @@ public class ModBlocks STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, STRAIGHT_PIPE_VALVE_TEI }; - private static final Object dev_content[] = {}; + private static final Object dev_content[] = { + PASSIVE_FLUID_ACCUMULATOR, PASSIVE_FLUID_ACCUMULATOR_TEI + }; //-------------------------------------------------------------------------------------------------------------------- //-- Init diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_block.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_block.json index 04aa8d2..e65c11b 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_block.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_block.json @@ -1,7 +1,7 @@ { "forge_marker": 1, "defaults": { - "model": "engineersdecor:decor_full_block_model", + "model": "engineersdecor:std/decor_full_block_model", "textures": { "all": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0" } }, "variants": { diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/passive_fluid_accumulator.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/passive_fluid_accumulator.json new file mode 100644 index 0000000..19953da --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/passive_fluid_accumulator.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "engineersdecor:pipe/passive_fluid_accumulator_model" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} } + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete.json index cbeaeeb..f636bd8 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete.json @@ -1,7 +1,7 @@ { "forge_marker": 1, "defaults": { - "model": "engineersdecor:decor_full_block_model", + "model": "engineersdecor:std/decor_full_block_model", "textures": { "all": "engineersdecor:blocks/concrete/rebar_concrete_texture0" } }, "variants": { diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_tile.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_tile.json index 037468a..4b1f865 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_tile.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_tile.json @@ -1,7 +1,7 @@ { "forge_marker": 1, "defaults": { - "model": "engineersdecor:decor_full_block_model", + "model": "engineersdecor:std/decor_full_block_model", "textures": { "all": "engineersdecor:blocks/concrete/rebar_concrete_tile_texture0" } }, "variants": { diff --git a/1.12/src/main/resources/assets/engineersdecor/blockstates/slag_brick_block.json b/1.12/src/main/resources/assets/engineersdecor/blockstates/slag_brick_block.json index 23fc1ef..8384070 100644 --- a/1.12/src/main/resources/assets/engineersdecor/blockstates/slag_brick_block.json +++ b/1.12/src/main/resources/assets/engineersdecor/blockstates/slag_brick_block.json @@ -1,7 +1,7 @@ { "forge_marker": 1, "defaults": { - "model": "engineersdecor:decor_full_block_model", + "model": "engineersdecor:std/decor_full_block_model", "textures": { "all": "engineersdecor:blocks/slag_brick/slag_brick_texture0" } }, "variants": { diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index cc31fa7..26262c0 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -106,6 +106,9 @@ tile.engineersdecor.straight_pipe_valve_redstone_analog.help=§6Straight fluid p Does not connect to the sides. Sneak to place in reverse direction. \ Blocks if not redstone powered, reduces the flow rate linear from power 1 to 14, \ opens to maximum possible valve flow rate for power 15. +tile.engineersdecor.passive_fluid_accumulator.name=Passive fluid accumulator +tile.engineersdecor.passive_fluid_accumulator.help=§6Vacuum suction based fluid collector.§r Has one output, all other sides are input. \ + Drains fluids from adjacent tanks when being drained from the output port by a pump. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor) tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang index e9759ee..d912692 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang @@ -99,6 +99,9 @@ tile.engineersdecor.straight_pipe_valve_redstone_analog.name=Redstone analog flu Does not connect to the sides. Sneak to place in reverse direction. \ Blocks if not redstone powered, reduces the flow rate linear from power 1 to 14, \ opens to maximum possible valve flow rate for power 15. +tile.engineersdecor.passive_fluid_accumulator.name=Passive fluid accumulator +#tile.engineersdecor.passive_fluid_accumulator.help=§6Vacuum suction based fluid collector.§r Has one output, all other sides are input. \ + Drains fluids from adjacent tanks when being drained from the output port by a pump. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo) #tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/decor_full_block_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/decor_full_block_model.json deleted file mode 100644 index f7aee27..0000000 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/decor_full_block_model.json +++ /dev/null @@ -1 +0,0 @@ -{ "parent": "block/cube_all", "textures": { "all": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0" } } \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json new file mode 100644 index 0000000..3da6cda --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json @@ -0,0 +1,55 @@ +{ + "textures": { + "end": "engineersdecor:blocks/pipe/straight_pipe_valve_end_texture", + "particle": "engineersdecor:blocks/pipe/straight_pipe_valve_end_texture", + "side": "engineersdecor:blocks/pipe/straight_pipe_valve_side_texture" + }, + "elements": [ + { + "from": [2, 2, 0], + "to": [14, 14, 1], + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#end"}, + "east": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#side"}, + "south": {"uv": [2, 2, 14, 14], "texture": "#end"}, + "west": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#side"}, + "up": {"uv": [2, 0, 14, 1], "texture": "#side"}, + "down": {"uv": [2, 15, 14, 16], "texture": "#side"} + } + }, + { + "from": [0, 0, 1], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#end"}, + "east": {"uv": [3, 5, 13, 11], "rotation": 90, "texture": "#side"}, + "south": {"uv": [4, 4, 12, 12], "texture": "#end"}, + "west": {"uv": [3, 5, 13, 11], "rotation": 270, "texture": "#side"}, + "up": {"uv": [3, 5, 13, 11], "texture": "#side"}, + "down": {"uv": [3, 5, 13, 11], "rotation": 180, "texture": "#side"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [120, 15, 0], + "translation": [-1, -1, -2], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_righthand": { + "rotation": [120, 30, 0], + "translation": [2, 3, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/std/decor_full_block_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/std/decor_full_block_model.json new file mode 100644 index 0000000..f3c37b1 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/std/decor_full_block_model.json @@ -0,0 +1,4 @@ +{ + "parent": "block/cube_all", + "textures": { "all": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0" } +} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/passive_fluid_accumulator_recipe.json b/1.12/src/main/resources/assets/engineersdecor/recipes/passive_fluid_accumulator_recipe.json new file mode 100644 index 0000000..0c6b0b6 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/passive_fluid_accumulator_recipe.json @@ -0,0 +1,30 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "result": "engineersdecor:passive_fluid_accumulator", + "required": ["immersiveengineering:material"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PMP", + "SPS" + ], + "key": { + "P": { + "item": "#itemFluidPipe" + }, + "M": { + "item": "#anyMechanicalComponent" + }, + "S": { + "item": "#slabSheetmetalIron" + } + }, + "result": { + "item": "engineersdecor:passive_fluid_accumulator", + "count": 1 + } +} diff --git a/meta/update.json b/meta/update.json index b14a1b3..08baa8b 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[A] Added passive fluid accumulator.", "1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", @@ -40,7 +41,7 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b7", + "1.12.2-latest": "1.0.4-b8", "1.13.2-recommended": "", "1.13.2-latest": "1.0.4-b3" } diff --git a/readme.md b/readme.md index 6f09d5f..2e23713 100644 --- a/readme.md +++ b/readme.md @@ -84,7 +84,7 @@ The mod has its focus decorative blocks. Current feature set: 3x3 from three steel ingots (output 12), thick poles crafted 3x3 from six thin steel poles. -- Double-T steel support: Horizontal top-aligned support beam, placed in the +- *Double-T steel support*: Horizontal top-aligned support beam, placed in the direction you look. Auto connects to adjacent beams if facing towards them. Auto connects to steel poles underneath. Crafted 3x3 from thin steel poles in a T-shape (output: 6 beams). From 7783cf94a6fc816d88fb6de99928a7181f673363 Mon Sep 17 00:00:00 2001 From: stfwi Date: Tue, 30 Apr 2019 18:34:50 +0200 Subject: [PATCH 12/15] update.json updated. --- meta/update.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/update.json b/meta/update.json index 08baa8b..d8669c3 100644 --- a/meta/update.json +++ b/meta/update.json @@ -41,7 +41,7 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b8", + "1.12.2-latest": "1.0.4-b7", "1.13.2-recommended": "", "1.13.2-latest": "1.0.4-b3" } From 16ddb6b84f5b43ce95e6f51605dcc956070d210e Mon Sep 17 00:00:00 2001 From: stfwi Date: Wed, 1 May 2019 00:54:11 +0200 Subject: [PATCH 13/15] Experimental passive fluid accumulator implemented. --- 1.12/meta/update.json | 2 +- 1.12/readme.md | 2 +- .../BlockDecorPassiveFluidAccumulator.java | 181 +++++++++++++----- .../pipe/passive_fluid_accumulator_model.json | 34 ++-- ...passive_fluid_accumulator_back_texture.png | Bin 0 -> 691 bytes ...assive_fluid_accumulator_front_texture.png | Bin 0 -> 693 bytes ...passive_fluid_accumulator_side_texture.png | Bin 0 -> 682 bytes meta/update.json | 4 +- 8 files changed, 154 insertions(+), 69 deletions(-) create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_back_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_front_texture.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_side_texture.png diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 714af8a..cae1048 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,7 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { - "1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[A] Added passive fluid accumulator.", + "1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[E] Added passive fluid accumulator (experimental feature, see config).", "1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", "1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.", diff --git a/1.12/readme.md b/1.12/readme.md index ae4b005..f4f93bd 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -11,7 +11,7 @@ Mod sources for Minecraft version 1.12.2. ## Revision history - v1.0.4-b8 [F] Fixed stairs rendering without smooth light (thanks rastot9). - [A] Added passive fluid accumulator. + [E] Added passive fluid accumulator (experimental feature, see config). - v1.0.4-b7 [F] Fixed recipe loading issue if IE is not installed. [M] Valves support IE pressurized fluid transfer. diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java index 0f6358d..2cccd40 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java @@ -9,8 +9,8 @@ */ package wile.engineersdecor.blocks; -import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.detail.ModAuxiliaries; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -18,6 +18,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; +import net.minecraft.util.ITickable; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -45,31 +46,85 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem public TileEntity createTileEntity(World world, IBlockState state) { return new BlockDecorPassiveFluidAccumulator.BTileEntity(); } + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) + { TileEntity te = world.getTileEntity(pos); if(te instanceof BlockDecorPipeValve.BTileEntity) ((BTileEntity)te).block_changed(); } + //-------------------------------------------------------------------------------------------------------------------- // Tile entity //-------------------------------------------------------------------------------------------------------------------- - public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider -, ModAuxiliaries.IExperimentalFeature + public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider, ITickable, ModAuxiliaries.IExperimentalFeature { - protected static int tank_fill_rate_mb = 1000; - protected static int tank_capacity_mb = 2000; + protected static int tick_idle_interval = 20; // ca 1000ms, simulates suction delay and saves CPU when not drained. + protected static int max_flowrate = 1000; + protected static int tank_capacity_mb = max_flowrate * 2; private final IFluidTankProperties[] fluid_props_ = {this}; private final InputFillHandler fill_handler_ = new InputFillHandler(this); private EnumFacing block_facing_ = EnumFacing.NORTH; private FluidStack tank_ = null; - private FluidStack last_filled_ = null; private FluidStack last_drain_request_fluid_ = null; private int last_drain_request_amount_ = 0; + private int vacuum_ = 0; + private int tick_timer_ = 0; + private int round_robin_ = 0; + private boolean initialized_ = false; + + public void block_changed() + { initialized_ = false; tick_timer_ = MathHelper.clamp(tick_timer_ , 0, tick_idle_interval); } + + // Output flow handler --------------------------------------------------------------------- + + private static class InputFillHandler implements IFluidHandler, IFluidTankProperties + { + private final BTileEntity parent_; + private final IFluidTankProperties[] props_ = {this}; + InputFillHandler(BTileEntity parent) { parent_ = parent; } + @Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { return null; } + @Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain) { return null; } + @Override public IFluidTankProperties[] getTankProperties() { return props_; } + @Override public int getCapacity() { return tank_capacity_mb; } + @Override public boolean canFill() { return true; } + @Override public boolean canDrain() { return false; } + @Override public boolean canFillFluidType(FluidStack fluidStack) { return true; } + @Override public boolean canDrainFluidType(FluidStack fluidStack) { return false; } + + @Nullable + @Override public FluidStack getContents() + { + if(parent_.tank_==null) return null; + FluidStack res = parent_.tank_.copy(); + if(res.amount > max_flowrate) res.amount = max_flowrate; + return res; + } + + @Override public int fill(FluidStack resource, boolean doFill) + { + if(!parent_.initialized_) return 0; + FluidStack res = resource.copy(); + if(parent_.tank_ == null) { + res.amount = MathHelper.clamp(res.amount, 0, max_flowrate*2); + if(doFill) parent_.tank_ = res; + return res.amount; + } else { + res.amount = MathHelper.clamp(res.amount, 0, Math.min(max_flowrate*2, tank_capacity_mb-parent_.tank_.amount)); + if((res.amount <= 0) || (!parent_.tank_.isFluidEqual(resource))) return 0; + if(doFill) parent_.tank_.amount += res.amount; + return res.amount; + } + } + } + + // TileEntity ------------------------------------------------------------------------------ public BTileEntity() {} - // TileEntity ------------------------------------------------------------------------------ - @Override public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns) - { return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorPipeValve)); } + { + block_changed(); + return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorPipeValve)); + } @Override public void readFromNBT(NBTTagCompound nbt) @@ -90,27 +145,32 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem @Override public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) - { return ((capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)) || super.hasCapability(capability, facing); } + { return (initialized_ && (capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)) || super.hasCapability(capability, facing); } @Override @Nullable @SuppressWarnings("unchecked") public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) - { return (capability!=CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) ? (super.getCapability(capability, facing)) : (facing==block_facing_) ? (((T)this)) : ((T)fill_handler_); } + { + if(capability != CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) return super.getCapability(capability, facing); + return (facing==block_facing_) ? (((T)this)) : ((T)fill_handler_); + } - // IFluidHandler/IFluidTankProperties of the output port ----------------------------------- + // IFluidHandler of the output port -------------------------------------------------------- - @Override public IFluidTankProperties[] getTankProperties() + @Override + public IFluidTankProperties[] getTankProperties() { return fluid_props_; } - @Override public int fill(FluidStack resource, boolean doFill) + @Override + public int fill(FluidStack resource, boolean doFill) { return 0; } @Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { - last_drain_request_fluid_ = resource.copy(); + if(doDrain) last_drain_request_fluid_ = resource.copy(); return ((tank_==null) || (!tank_.isFluidEqual(resource))) ? (null) : drain(resource.amount, doDrain); } @@ -118,58 +178,83 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem @Nullable public FluidStack drain(int maxDrain, boolean doDrain) { - last_drain_request_amount_ = maxDrain; + if(!initialized_) return null; + if(doDrain) last_drain_request_amount_ = maxDrain; if(tank_==null) return null; + FluidStack res; if(maxDrain >= tank_.amount) { if(!doDrain) return tank_.copy(); - FluidStack res = tank_; + res = tank_; tank_ = null; - return res; } else { - FluidStack res = tank_.copy(); + res = tank_.copy(); res.amount = maxDrain; if(doDrain) tank_.amount -= maxDrain; - return res; } + return res; } - // IFluidTankProperties -- + // IFluidTankProperties -------------------------------------------------------------------- + @Override @Nullable public FluidStack getContents() { return (tank_==null) ? (null) : (tank_.copy()); } - @Override public int getCapacity() { return tank_capacity_mb; } + @Override public int getCapacity() { return max_flowrate; } @Override public boolean canFill() { return false; } @Override public boolean canDrain() { return true; } @Override public boolean canFillFluidType(FluidStack fluidStack) { return false; } @Override public boolean canDrainFluidType(FluidStack fluidStack) { return true; } - // Output flow handler -- - private static class InputFillHandler implements IFluidHandler, IFluidTankProperties - { - private final BTileEntity parent_; - private final IFluidTankProperties[] props_ = {this}; - InputFillHandler(BTileEntity parent) { parent_ = parent; } - @Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { return null; } - @Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain) { return null; } - @Override @Nullable public FluidStack getContents() { return (parent_.tank_==null) ? (null) : (parent_.tank_.copy()); } - @Override public IFluidTankProperties[] getTankProperties() { return props_; } - @Override public int getCapacity() { return tank_capacity_mb; } - @Override public boolean canFill() { return true; } - @Override public boolean canDrain() { return false; } - @Override public boolean canFillFluidType(FluidStack fluidStack) { return true; } - @Override public boolean canDrainFluidType(FluidStack fluidStack) { return false; } + // ITickable-------------------------------------------------------------------------------- - @Override public int fill(FluidStack resource, boolean doFill) - { - FluidStack res = resource.copy(); - if(parent_.tank_ == null) { - res.amount = MathHelper.clamp(res.amount, 0, tank_fill_rate_mb); - if(doFill) parent_.tank_ = res; - return res.amount; + public void update() + { + if((world.isRemote) || (--tick_timer_ > 0)) return; + tick_timer_ = tick_idle_interval; + if(!initialized_) { + initialized_ = true; + IBlockState state = world.getBlockState(pos); + if((state==null) || (!(state.getBlock() instanceof BlockDecorPassiveFluidAccumulator))) return; + block_facing_ = state.getValue(FACING); + } + int n_requested = last_drain_request_amount_; + final FluidStack req_res = last_drain_request_fluid_; + last_drain_request_amount_ = 0; + last_drain_request_fluid_ = null; + if(tank_!=null) { + if((n_requested > 0) && ((req_res == null) || (tank_.isFluidEqual(req_res)))) { vacuum_ += 2; } else { --vacuum_; } + vacuum_ = MathHelper.clamp(vacuum_, 0, 5); + if(vacuum_ <= 0) return; // nothing to do, noone's draining or can't because the fuild does not match. + } else { + n_requested = 10; // drip in + } + int tank_level = MathHelper.clamp( (tank_==null) ? 0 : tank_.amount, 0, tank_capacity_mb); + if(tank_level >= Math.min(tank_capacity_mb, n_requested * 4)) return; // enough reserve + tick_timer_ = 0; // pull next tick + FluidStack match = (tank_==null) ? (req_res) : (tank_); + for(int i=0; i<6; ++i) { + if(++round_robin_ > 5) round_robin_ = 0; + final EnumFacing f = EnumFacing.byIndex(round_robin_); + if(f == block_facing_) continue; + final TileEntity te = world.getTileEntity(pos.offset(f)); + if((te==null) || (!te.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, f.getOpposite()))) continue; + final IFluidHandler fh = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, f.getOpposite()); + if(fh==null) continue; + int refill = Math.min(Math.max(n_requested, 100), tank_capacity_mb-tank_level); + if(refill <= 0) break; + FluidStack res; + if(match==null) { + res = fh.drain(refill, true); + if(res != null) match = res.copy(); } else { - res.amount = MathHelper.clamp(res.amount, 0, Math.min(tank_fill_rate_mb, tank_capacity_mb-parent_.tank_.amount)); - if((res.amount <= 0) || (!parent_.tank_.isFluidEqual(resource))) return 0; - if(doFill) parent_.tank_.amount += res.amount; - return res.amount; + match.amount = refill; + res = fh.drain(match.copy(), true); } + if(res == null) continue; + if(tank_==null) { + tank_ = res; + } else { + tank_.amount += res.amount; + } + if(tank_.amount >= tank_capacity_mb) break; } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json index 3da6cda..7f9c16e 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json @@ -1,32 +1,32 @@ { "textures": { - "end": "engineersdecor:blocks/pipe/straight_pipe_valve_end_texture", - "particle": "engineersdecor:blocks/pipe/straight_pipe_valve_end_texture", - "side": "engineersdecor:blocks/pipe/straight_pipe_valve_side_texture" + "end": "engineersdecor:blocks/pipe/passive_fluid_accumulator_front_texture", + "particle": "engineersdecor:blocks/pipe/passive_fluid_accumulator_front_texture", + "side": "engineersdecor:blocks/pipe/passive_fluid_accumulator_side_texture", + "back": "engineersdecor:blocks/pipe/passive_fluid_accumulator_back_texture" }, "elements": [ { - "from": [2, 2, 0], - "to": [14, 14, 1], + "from": [3, 3, 0], + "to": [13, 13, 1], "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#end"}, - "east": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#side"}, - "south": {"uv": [2, 2, 14, 14], "texture": "#end"}, - "west": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#side"}, - "up": {"uv": [2, 0, 14, 1], "texture": "#side"}, - "down": {"uv": [2, 15, 14, 16], "texture": "#side"} + "north": {"uv": [3, 3, 13, 13], "texture": "#end"}, + "east": {"uv": [15, 4, 16, 16], "texture": "#side"}, + "west": {"uv": [0, 4, 1, 16], "texture": "#side"}, + "up": {"uv": [4, 0, 16, 1], "texture": "#side"}, + "down": {"uv": [0, 15, 12, 16], "texture": "#side"} } }, { "from": [0, 0, 1], "to": [16, 16, 16], "faces": { - "north": {"uv": [4, 4, 12, 12], "texture": "#end"}, - "east": {"uv": [3, 5, 13, 11], "rotation": 90, "texture": "#side"}, - "south": {"uv": [4, 4, 12, 12], "texture": "#end"}, - "west": {"uv": [3, 5, 13, 11], "rotation": 270, "texture": "#side"}, - "up": {"uv": [3, 5, 13, 11], "texture": "#side"}, - "down": {"uv": [3, 5, 13, 11], "rotation": 180, "texture": "#side"} + "north": {"uv": [0, 0, 16, 16], "texture": "#end"}, + "east": {"uv": [0, 1, 16, 16], "rotation": 90, "texture": "#side"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#back"}, + "west": {"uv": [0, 1, 16, 16], "rotation": 270, "texture": "#side"}, + "up": {"uv": [0, 1, 16, 16], "texture": "#side"}, + "down": {"uv": [0, 1, 16, 16], "rotation": 180, "texture": "#side"} } } ], diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_back_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_back_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..90dda9b05fdcdbcdc5f823bf681ea1086c105117 GIT binary patch literal 691 zcmV;k0!;mhP)VGd00L7@QO zXsyXPQ%b=YgSD2nZMnR>L@9+*ij)#U2to*i5YWRgFbo3#N-2a8lv239zUJ%25f4`v zoNR76K0ZcDNzNJP9Nv58c}9BgS*=!-Qb;MGwMI$_z{AxAH{ZXpf29<1&S=@L zAp{2p2RP@J=6kzc*P-{&0II5DnkMe=?|JwBJ)o4MGUC)`SpHN@1&AVM>WyG62?Ey!S{cF~*QmVi<-U0{|fe z#u%J))OEvpy{4%vrs)rrwY2RTYwfa1r4%tnGk)wKPq`fXP20B1M)r-p_shKi)OAhMG-x3N-g{zP5?rCfrPb0(#<3*b18 z^nK5Iy>0aK?t!Zh%pjE Z;4l8QddowV$uIx_002ovPDHLkV1n>LHM0N! literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_front_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_front_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..d40c59527988326e2247352dbd18230ab06f62ff GIT binary patch literal 693 zcmV;m0!safP)VGd00LD>L_t(I%Y~E8N+d}Xg}?a8NKDj< zgk(Svx}G5y?#fNQ#=tzmyo0-b9GBy!1W}F7fZfF82E-rA+5o09Ah;xpstE=M3IfpR@?>*8v zR~WQy%Povnuhs&jG|{&0Z+Vx?CAYV?yuH2s z_I7=J&CbpaP1B%-5P0tiA@K6@f>Mf<5+MZ6&d$neODTyla(;eJRaL|ozYcJ{USq9g zZ*LDF1jZOb2&9w{LQqvziI`F<*BWE|V({_t!TtR`#+dRk##l(_oY7j7b4Cb(5TZDo briuRm&=698{R;+D00000NkvXXu0mjfTlhQQ literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_side_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_side_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..11e46c961b4328f619a129acfcd8e7e196ba4ede GIT binary patch literal 682 zcmV;b0#*HqP)VGd00K%$L_t(I%T<%jP82~Dg}?fttGlNs z)004qXu^tjaO-<$z=Rl|gIB;{d=KBn6&pcK7=h3*cGtg)NmpX6YEij$&v(ud=jZ2n zZ*LE+HBw4)&g7gCLJ&d#KnQ`95~UO=B>AGx@^q+N8R7%^4F$@_O492}J2XHIgOCcO8= z7_rt8W90J7S03&k`2FiAo6R4_apL0QGqYT4Emc+RT(H&_2F4hsY2tbNgj5X2Aq1q9r2{D?VvH!I(8Dm$_dUzy zvVaUBkWykU+AJ}p#2maB Date: Thu, 2 May 2019 00:04:04 +0200 Subject: [PATCH 14/15] Valves redstone connection adaptions, valves remove pressurized flag when not inserting to fluid pipes, fluid accumulator refilling changed. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 5 + .../api/fluid/IFluidPipe.java | 18 +++ .../BlockDecorPassiveFluidAccumulator.java | 142 +++++++++--------- .../blocks/BlockDecorPipeValve.java | 53 +++++-- .../engineersdecor/detail/ModAuxiliaries.java | 9 ++ .../pipe/passive_fluid_accumulator_model.json | 8 +- ...ight_pipe_valve_rs_connector_submodel.json | 22 ++- ...passive_fluid_accumulator_back_texture.png | Bin 691 -> 639 bytes ...assive_fluid_accumulator_front_texture.png | Bin 693 -> 680 bytes ...passive_fluid_accumulator_side_texture.png | Bin 682 -> 618 bytes ...ht_pipe_valve_side_redstone_cn_texture.png | Bin 266 -> 324 bytes meta/update.json | 3 +- 14 files changed, 172 insertions(+), 93 deletions(-) create mode 100644 1.12/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 5265633..5b3f7e2 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b8 +version_engineersdecor=1.0.4-b9 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index cae1048..921c35d 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.4-b9": "[F] Inserting fluids with pressurized tag only into IE piping.\n[F] Valve redstone connector rendering does not check for \"can connect redstone\" but only for \"can provide power\".\n[M] Valves are adpted to be detected as pipe by IE.", "1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[E] Added passive fluid accumulator (experimental feature, see config).", "1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", @@ -32,6 +33,6 @@ }, "promos": { "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b8" + "1.12.2-latest": "1.0.4-b9" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index f4f93bd..e525b34 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,11 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.4-b9 [F] Inserting fluids with pressurized tag only into IE piping. + [F] Valve redstone connector rendering does not check for + "can connect redstone" but only for "can provide power". + [M] Valves are adpted to be detected as pipe by IE. + - v1.0.4-b8 [F] Fixed stairs rendering without smooth light (thanks rastot9). [E] Added passive fluid accumulator (experimental feature, see config). diff --git a/1.12/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java b/1.12/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java new file mode 100644 index 0000000..f22061e --- /dev/null +++ b/1.12/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java @@ -0,0 +1,18 @@ +/* + * BluSunrize + * Copyright (c) 2017 + * + * This code is licensed under "Blu's License of Common Sense" + * Details can be found in the license file in the root folder of this project + */ + +package blusunrize.immersiveengineering.api.fluid; + +import net.minecraft.util.EnumFacing; + +public interface IFluidPipe +{ + boolean canOutputPressurized(boolean consumePower); + + boolean hasOutputConnection(EnumFacing side); +} diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java index 2cccd40..5bfd95b 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java @@ -4,11 +4,19 @@ * @copyright (C) 2019 Stefan Wilhelm * @license MIT (see https://opensource.org/licenses/MIT) * - * Basically a piece of pipe that does not connect to - * pipes on the side, and conducts fluids only in one way. + * A device that collects fluids from adjacent tank outputs + * when a pump drains on the (only) output side. Shall support + * high flow rates, and a vavuum suction delay. Shall not drain + * high amounts of fluid from the adjacent tanks when no fluid + * is requested at the output port. Shall drain balanced from + * the adjacent input sides. */ package wile.engineersdecor.blocks; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumHand; +import net.minecraftforge.fml.common.gameevent.PlayerEvent; +import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.detail.ModAuxiliaries; import net.minecraft.block.Block; import net.minecraft.block.SoundType; @@ -46,6 +54,15 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem public TileEntity createTileEntity(World world, IBlockState state) { return new BlockDecorPassiveFluidAccumulator.BTileEntity(); } + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if(world.isRemote) return true; + TileEntity te = world.getTileEntity(pos); + if(!(te instanceof BTileEntity)) return true; + ((BTileEntity)te).debug_info_dump(player); + return true; + } + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) { TileEntity te = world.getTileEntity(pos); if(te instanceof BlockDecorPipeValve.BTileEntity) ((BTileEntity)te).block_changed(); } @@ -57,18 +74,26 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem { protected static int tick_idle_interval = 20; // ca 1000ms, simulates suction delay and saves CPU when not drained. protected static int max_flowrate = 1000; - protected static int tank_capacity_mb = max_flowrate * 2; private final IFluidTankProperties[] fluid_props_ = {this}; private final InputFillHandler fill_handler_ = new InputFillHandler(this); private EnumFacing block_facing_ = EnumFacing.NORTH; private FluidStack tank_ = null; - private FluidStack last_drain_request_fluid_ = null; private int last_drain_request_amount_ = 0; private int vacuum_ = 0; private int tick_timer_ = 0; private int round_robin_ = 0; private boolean initialized_ = false; + + private int total_volume_filled_ = 0; + private int total_volume_drained_ = 0; + @Deprecated + public void debug_info_dump(EntityPlayer player) + { + int t_vol = (tank_==null) ? 0 : (tank_.amount); + ModAuxiliaries.playerChatMessage(player,"pfacc I:" + total_volume_filled_ + " O:" + total_volume_drained_ + " B:" + t_vol); + } + public void block_changed() { initialized_ = false; tick_timer_ = MathHelper.clamp(tick_timer_ , 0, tick_idle_interval); } @@ -79,39 +104,16 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem private final BTileEntity parent_; private final IFluidTankProperties[] props_ = {this}; InputFillHandler(BTileEntity parent) { parent_ = parent; } + @Override public int fill(FluidStack resource, boolean doFill) { return 0; } @Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { return null; } @Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain) { return null; } + @Override @Nullable public FluidStack getContents() { return null; } @Override public IFluidTankProperties[] getTankProperties() { return props_; } - @Override public int getCapacity() { return tank_capacity_mb; } + @Override public int getCapacity() { return max_flowrate; } @Override public boolean canFill() { return true; } @Override public boolean canDrain() { return false; } @Override public boolean canFillFluidType(FluidStack fluidStack) { return true; } @Override public boolean canDrainFluidType(FluidStack fluidStack) { return false; } - - @Nullable - @Override public FluidStack getContents() - { - if(parent_.tank_==null) return null; - FluidStack res = parent_.tank_.copy(); - if(res.amount > max_flowrate) res.amount = max_flowrate; - return res; - } - - @Override public int fill(FluidStack resource, boolean doFill) - { - if(!parent_.initialized_) return 0; - FluidStack res = resource.copy(); - if(parent_.tank_ == null) { - res.amount = MathHelper.clamp(res.amount, 0, max_flowrate*2); - if(doFill) parent_.tank_ = res; - return res.amount; - } else { - res.amount = MathHelper.clamp(res.amount, 0, Math.min(max_flowrate*2, tank_capacity_mb-parent_.tank_.amount)); - if((res.amount <= 0) || (!parent_.tank_.isFluidEqual(resource))) return 0; - if(doFill) parent_.tank_.amount += res.amount; - return res.amount; - } - } } // TileEntity ------------------------------------------------------------------------------ @@ -170,8 +172,8 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { - if(doDrain) last_drain_request_fluid_ = resource.copy(); - return ((tank_==null) || (!tank_.isFluidEqual(resource))) ? (null) : drain(resource.amount, doDrain); + if((resource==null) || (tank_==null)) return null; + return (!(tank_.isFluidEqual(resource))) ? (null) : drain(resource.amount, doDrain); } @Override @@ -179,18 +181,15 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem public FluidStack drain(int maxDrain, boolean doDrain) { if(!initialized_) return null; - if(doDrain) last_drain_request_amount_ = maxDrain; + if(doDrain && (maxDrain > 0)) last_drain_request_amount_ = maxDrain; if(tank_==null) return null; - FluidStack res; - if(maxDrain >= tank_.amount) { - if(!doDrain) return tank_.copy(); - res = tank_; - tank_ = null; - } else { - res = tank_.copy(); - res.amount = maxDrain; - if(doDrain) tank_.amount -= maxDrain; - } + maxDrain = MathHelper.clamp(maxDrain ,0 , tank_.amount); + if(!doDrain) return tank_.copy(); + FluidStack res = tank_.copy(); + res.amount = maxDrain; + tank_.amount -= maxDrain; + if(tank_.amount <= 0) tank_= null; + total_volume_drained_ += res.amount; return res; } @@ -216,46 +215,53 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem block_facing_ = state.getValue(FACING); } int n_requested = last_drain_request_amount_; - final FluidStack req_res = last_drain_request_fluid_; last_drain_request_amount_ = 0; - last_drain_request_fluid_ = null; - if(tank_!=null) { - if((n_requested > 0) && ((req_res == null) || (tank_.isFluidEqual(req_res)))) { vacuum_ += 2; } else { --vacuum_; } - vacuum_ = MathHelper.clamp(vacuum_, 0, 5); - if(vacuum_ <= 0) return; // nothing to do, noone's draining or can't because the fuild does not match. + if(n_requested > 0) { + vacuum_ += 2; + if(vacuum_ > 5) vacuum_ = 5; } else { - n_requested = 10; // drip in + if((--vacuum_) <= 0) { + vacuum_ = 0; + if(tank_!=null) { + return; // nothing to do, noone's draining. + } else { + n_requested = 10; // drip in + } + } } - int tank_level = MathHelper.clamp( (tank_==null) ? 0 : tank_.amount, 0, tank_capacity_mb); - if(tank_level >= Math.min(tank_capacity_mb, n_requested * 4)) return; // enough reserve - tick_timer_ = 0; // pull next tick - FluidStack match = (tank_==null) ? (req_res) : (tank_); + boolean has_refilled = false; + n_requested += (vacuum_ * 50); + int tank_buffer_needed = n_requested; + if(tank_buffer_needed > max_flowrate) tank_buffer_needed = max_flowrate; for(int i=0; i<6; ++i) { if(++round_robin_ > 5) round_robin_ = 0; + if(n_requested <= 0) break; + if(((tank_!=null) && (tank_.amount >= tank_buffer_needed))) break; final EnumFacing f = EnumFacing.byIndex(round_robin_); if(f == block_facing_) continue; final TileEntity te = world.getTileEntity(pos.offset(f)); - if((te==null) || (!te.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, f.getOpposite()))) continue; + if((te==null) || (te instanceof BTileEntity) || (!te.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, f.getOpposite()))) continue; final IFluidHandler fh = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, f.getOpposite()); if(fh==null) continue; - int refill = Math.min(Math.max(n_requested, 100), tank_capacity_mb-tank_level); - if(refill <= 0) break; - FluidStack res; - if(match==null) { - res = fh.drain(refill, true); - if(res != null) match = res.copy(); - } else { - match.amount = refill; - res = fh.drain(match.copy(), true); - } - if(res == null) continue; if(tank_==null) { - tank_ = res; + FluidStack res = fh.drain(n_requested, true); + if((res == null) || (res.amount==0)) continue; + total_volume_filled_ += res.amount; + tank_ = res.copy(); + has_refilled = true; } else { + if((tank_.amount + n_requested) > max_flowrate) n_requested = (max_flowrate - tank_.amount); + FluidStack rq = tank_.copy(); + rq.amount = n_requested; + FluidStack res = fh.drain(rq, true); + if(res == null) continue; tank_.amount += res.amount; + total_volume_filled_ += res.amount; + has_refilled = true; + if(tank_.amount >= max_flowrate) break; } - if(tank_.amount >= tank_capacity_mb) break; } + if(has_refilled) tick_timer_ = 0; } } } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java index 2145e4e..d86cb90 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java @@ -9,21 +9,23 @@ */ package wile.engineersdecor.blocks; -import net.minecraft.util.EnumHand; import wile.engineersdecor.ModEngineersDecor; +import blusunrize.immersiveengineering.api.fluid.IFluidPipe; +import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.item.ItemStack; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.EnumHand; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -81,9 +83,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected if(f.getAxis() == bfa) continue; BlockPos nbp = pos.offset(f); IBlockState nbs = world.getBlockState(nbp); - if(nbs.canProvidePower() && (nbs.getBlock().canConnectRedstone(nbs, world, nbp, f))) { - return state.withProperty(RS_CONNECTION_DIR, rsconnectors[state.getValue(FACING).getIndex()][f.getIndex()]); - } + if(nbs.canProvidePower()) return state.withProperty(RS_CONNECTION_DIR, rsconnectors[state.getValue(FACING).getIndex()][f.getIndex()]); } return state.withProperty(RS_CONNECTION_DIR, 0); } @@ -102,6 +102,11 @@ public class BlockDecorPipeValve extends BlockDecorDirected world.notifyNeighborsOfStateChange(pos, this, true); } + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { return BlockFaceShape.SOLID; } + + @Override public boolean canConnectRedstone(IBlockState state, IBlockAccess world, BlockPos pos, @Nullable EnumFacing side) { return (side!=null) && (side!=state.getValue(FACING)) && (side!=state.getValue(FACING).getOpposite()); } @@ -123,7 +128,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected // Tile entity //-------------------------------------------------------------------------------------------------------------------- - public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider + public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider, IFluidPipe { private static final BackFlowHandler back_flow_handler_ = new BackFlowHandler(); protected static int fluid_maxflow_mb = 1000; @@ -131,6 +136,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected private final IFluidTankProperties[] fluid_props_ = {this}; private EnumFacing block_facing_ = EnumFacing.NORTH; private boolean filling_ = false; + private boolean getlocked_ = false; private boolean filling_enabled_ = true; private long block_config_ = 0; @@ -224,14 +230,17 @@ public class BlockDecorPipeValve extends BlockDecorDirected } FluidStack res = resource.copy(); if(res.amount > fluid_maxflow_mb) res.amount = fluid_maxflow_mb; - if(res.amount > 50) { - // forward pressureized tag - if(res.tag==null) res.tag = new NBTTagCompound(); - res.tag.setBoolean("pressurized", true); - } final IFluidHandler fh = forward_fluid_handler(); if(fh==null) return 0; filling_ = true; // in case someone does not check the cap, but just "forwards back" what is beeing filled right now. + if(res.amount > 50) { + final TileEntity te = world.getTileEntity(pos.offset(block_facing_)); + if(te instanceof IFluidPipe) { + // forward pressureized tag + if(res.tag == null) res.tag = new NBTTagCompound(); + res.tag.setBoolean("pressurized", true); + } + } int n_filled = forward_fluid_handler().fill(res, doFill); filling_ = false; //if(n_filled > 0) System.out.println("F:" + resource.amount + "->" + n_filled); @@ -260,7 +269,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected { return null; } public int getCapacity() - { return 10000; } + { return 1000; } @Override public boolean canFill() @@ -295,5 +304,23 @@ public class BlockDecorPipeValve extends BlockDecorDirected @Override public boolean canDrainFluidType(FluidStack fluidStack) { return false; } } + // IFluidPipe + + @Override + public boolean hasOutputConnection(EnumFacing side) + { return (side == block_facing_); } + + @Override + public boolean canOutputPressurized(boolean consumePower) + { + if(getlocked_ || (!filling_enabled_)) return false; + final TileEntity te = world.getTileEntity(pos.offset(block_facing_)); + if(!(te instanceof IFluidPipe)) return false; + getlocked_ = true; // not sure if IE explicitly pre-detects loops, so let's lock recurion here, too. + boolean r = ((IFluidPipe)te).canOutputPressurized(consumePower); + getlocked_ = false; + return r; + } + } } diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java b/1.12/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java index f79041e..ba97651 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java @@ -8,6 +8,7 @@ */ package wile.engineersdecor.detail; +import net.minecraft.entity.player.EntityPlayer; import wile.engineersdecor.ModEngineersDecor; import net.minecraft.world.World; import net.minecraft.item.ItemStack; @@ -145,5 +146,13 @@ public class ModAuxiliaries return bb; } + @SuppressWarnings("unused") + public static void playerChatMessage(EntityPlayer player, final String message) + { + String s = message.trim(); + if(!s.isEmpty()) player.sendMessage(new TextComponentTranslation(s)); + } + + @SuppressWarnings("unused") public interface IExperimentalFeature{} } diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json index 7f9c16e..b99b703 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json @@ -22,11 +22,11 @@ "to": [16, 16, 16], "faces": { "north": {"uv": [0, 0, 16, 16], "texture": "#end"}, - "east": {"uv": [0, 1, 16, 16], "rotation": 90, "texture": "#side"}, + "east": {"uv": [0, 0, 15, 16], "texture": "#side"}, "south": {"uv": [0, 0, 16, 16], "texture": "#back"}, - "west": {"uv": [0, 1, 16, 16], "rotation": 270, "texture": "#side"}, - "up": {"uv": [0, 1, 16, 16], "texture": "#side"}, - "down": {"uv": [0, 1, 16, 16], "rotation": 180, "texture": "#side"} + "west": {"uv": [1, 0, 16, 16], "texture": "#side"}, + "up": {"uv": [0, 0, 16, 15], "texture": "#side"}, + "down": {"uv": [0, 0, 16, 15], "rotation": 180, "texture": "#side"} } } ], diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json index c1ed08d..ca077a3 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json @@ -6,14 +6,26 @@ }, "elements": [ { - "from": [5, 5, 0], + "from": [5, 5, 2], "to": [11, 11, 3], "faces": { "north": {"uv": [5, 5, 11, 11], "rotation": 90, "texture": "#rsend"}, - "east": {"uv": [13, 5, 16, 11], "texture": "#rsside"}, - "west": {"uv": [13, 5, 16, 11], "rotation": 180, "texture": "#rsside"}, - "up": {"uv": [13, 5, 16, 11], "rotation": 270, "texture": "#rsside"}, - "down": {"uv": [13, 5, 16, 11], "rotation": 90, "texture": "#rsside"} + "east": {"uv": [13, 5, 14, 11], "texture": "#rsside"}, + "west": {"uv": [13, 5, 14, 11], "rotation": 180, "texture": "#rsside"}, + "up": {"uv": [13, 5, 14, 11], "rotation": 270, "texture": "#rsside"}, + "down": {"uv": [13, 5, 14, 11], "rotation": 90, "texture": "#rsside"} + } + }, + { + "from": [4, 4, 0], + "to": [12, 12, 2], + "faces": { + "north": {"uv": [4, 4, 12, 12], "rotation": 90, "texture": "#rsend"}, + "east": {"uv": [13, 4, 16, 12], "texture": "#rsside"}, + "south": {"uv": [4, 4, 12, 12], "texture": "#rsend"}, + "west": {"uv": [13, 4, 16, 12], "rotation": 180, "texture": "#rsside"}, + "up": {"uv": [13, 4, 16, 12], "rotation": 270, "texture": "#rsside"}, + "down": {"uv": [13, 4, 16, 12], "rotation": 90, "texture": "#rsside"} } } ], diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_back_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_back_texture.png index 90dda9b05fdcdbcdc5f823bf681ea1086c105117..2d9fcd6896ac25c4f1d684d99cf92a3386b0fef2 100644 GIT binary patch delta 575 zcmV-F0>J&V1^)z)OMf3pL_t(I%T<%XYFjZ7MbC`%-m~izvI>L{Z$biDcGF!UztA7( zPvuwo7uhA7kOqQRPHZp~+W0+5BXwaUnuQREnX5bZ-jUne+v2@v7zRoyq?B;ZAtIi`Y_^Z6WAC8Y#FN(oiv$F~#Ugp|?;>h+WP ze2%Y_N-2m4(=@T&ZdoiAIOpj5zWusdtynIX0Eh@8f;TgA&XiIxGj_WjkB^UyRg4i; zMTsS&9Vi*Q)Zf=M%l5^(m?Tz#EbDo}_TBDf}LO{)| zQH(K?QljsBLI})eGd7zI+wB%J!^}u2QCa7l(TZ3d7={5=CFjiD-5n1P50p|Gc&)2F z-Z@7-06AyIapd*&6%pa|^ptTNNhy(Y{tz3{p4X__!IuCK3IE|;W~h%pjE z;Q06$RmFQ>19Z5Zb97yYsxk}%&(F`S*K6+Y?+-JoHjAr$mGLkPco8Az+!VjOyyW8I zqKy<|tcgQa+3)vlR5Qb;ln5apBE%RGk(Nm39PjV%bY0hWVVWkKbHo@A05zIb)hbR( zsi|JKF*t;Psy1fhIO4}~r0Y8Rz9+`mqC1Ww-g`m_bX|v;wPpI>)_-IL_t(I%T<%hZqz^!MNdDb+jcy%M{*V!{v*oAfC3Uid`9+2 zY(OCXgMVR_4GFLac{vGozgY}piC$M%-FvF8I6FHl)>@QOXsyXPQ%b=YgSD2nZMnR> zL@9+*ij)#U2to*i5YWRgFbo3#N-2a8lv239zUJ%25f4`voPTU?IX*r{N=eQc=N#U9 z=6ObX?^&%@lu}43p|wUz3BbeE1vlTnv45o$a?WV2(OTo2LwoO0N>NH7#z>5jloEG$ zcbsf)QA0-vfpHwEs%rP?-;fXjy6<~{MN-o=G)=>HyXENU2q6Rq2M0LkmgalAUDu)a z&;Y8cVwxuI?|<)k_x?T2K}${vYYe9^o^yD3_@Bj`Gjg71LI|XkaL$oZ;?w6Z+}_;s z>*o)yu6{F3Gao*DWN+6whcO24J=!_9FtFA#&ohrt4@jkP^F+=Ql*Fd%sO$Papz}N< zH=7MY2(;FO5Ku~Ct6gDAiCi)O)>^#xNGUPKkWyk8hJPIc03ig%7@Tv|b;EkSrl~8Y z=?|5)wCx&e?XpUx6fs8RG)>F#gb_=5$_zYU!9_q+L4wL=Nwg4EyMPAqr0vHAcVj)P1JQw+qTO__Km&w z%e?^9b!<)3G-x3N-g{zP5?rCfrPb0(#<3*b18^nK5Iy>0aK?t!Zh%pjE;4l8QddowV$uIx_ N002ovPDHLkV1fzkDDD6N diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_front_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_front_texture.png index d40c59527988326e2247352dbd18230ab06f62ff..1cf9adfae09927777c6da9100bb46db0c650db5d 100644 GIT binary patch delta 616 zcmV-u0+;=@1*ip(OMgg7L_t(I%Y~CaPuxHd#ed#Ew$DgtuS5dr(xi=aO{$~050KBs zC!tD70UQz)9R<25A{9Cg#T&u-Y_E4W1@TH$S!t!6k>2dQ_hz!Qv$LqRrYH(xj10qo zl#(pV5JDiO#5spj3L!+w_kB;-btt72MNx2YaDWhk5CT$4`hULX`;Usnr;|&%8bV;^Ei$&5Pgn&}&-G%X|7$X2xRWX~*Fvfha(HKKj zRf&p}l045*S(Xt(pss7C)9DAk%jJ^0yF2Q-{*b%9y(NTz_Z~G21AX7K-ELX0*Sx&E z;JwFt&tcWo6-p_9)Zxv|OvIkQ@===;7D{PV}({96B_|MrdN=Vt)c>otdmhe#>EB3Nqy@ZQt+Jx@uz%LlGz|v_2ZRt%N->+w&|7F*Z8jSo9v-;7yu`UL`*mHjSS*;&=YbCNF$V8F(m7Wcv~9~U45i_AR53=z zaby?>AkecxlP#TbK9imIxp zstTnPbzNhvWq*I4ZA}OP`T6--mIuIE%klAXX|gR|EEa4hR@XI6)A0WOjt(IJl;vrf zhWUJswYEUB)|N4D^XHriA)sfo835BX(YEbxd6&y2x3{;vy}kYRc71)#&dv@^)1ZYA zc<%`z@NV+*f>Mf<5+MZ6&d$neODTyla(;eJRaL|ozYcJ{USq9gZ*LDF1jZOb2&9w{ zLQqvziI`F<*BWE|V({_t!TtR`#+dRk##l(_oY7j7b4Cb(5TZDoriuRm&=698{R;+D P00000NkvXXu0mjfwjVCY diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_side_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/passive_fluid_accumulator_side_texture.png index 11e46c961b4328f619a129acfcd8e7e196ba4ede..a1daa3b1c89439458d97f872060a8f5b8443aed0 100644 GIT binary patch delta 554 zcmV+_0@eMh1?mKlOMePUL_t(I%T<#-P8>lHg}?5qo*9i0I3s{{KmdpfI3w~Md;*_| zd-xz^8?1;Bfwe4J$wp zedhG^D`rNm6%irl+|j72GEEbzN+|^qX_fi;eE}@UITJ#l)=DV_?>!>IJkMx@(>m{V zJKo;jnCBVqJ;N~IoFk>g%gYN_S66uN0dUTtr4*XgTG?*5tX3frEc%GfIe*m5h%quv6K2NA$q69@?(gqODPd;3zP@sCalzBm6J~~U?*BMBXKJm) z7)dFSb7mYzVvLOA$Y!%)v)NEeA?Mu9%#HrV;Ba!_m~-vkB=;uO8`BdYl!yyJ*r9wfs|4|rnY)* s0mCqKog+7>Ap~;H{qoxS+P{>-KmXHU>rWw75C8xG07*qoM6N<$g6u*NQvd(} delta 618 zcmV-w0+s#h1gZs)OMgm9L_t(I%T<%jP82~Dg}?fttGlNs)004qXu^tjaO-<$z=Rl| zgIB;{d=KBn6&pcK7=h3*cGtg)NmpX6YEij$&v(ud=jZ2nZ*LE+HBw4)&g7gCLJ&d# zKnQ`95~UO=B>+Bt_(ikvec1VRYJ7y)?N zTyy{9JFGi~VW6&SthGh1_a5E%ebF>c6K&hlwk@}}x4b>vB457%z!>x2aHSNh)e4nEGdAI5Rw;^H&2Tx%^=Rqb4`))ofF7^Z3BdHaM^8as`oG(wK7S1X#PVLmx$rfEX1 z*K33jXsz+yqm;tbO|dKGR2VqtkWx}r6){Hk_xE=U=6|qMRfV;drfFF&m$XgIIR2$J zhOS#;j3MVtN(rSDAq3<&jtC*hIpe)YO39~>XLMahRT=ue=kV|qr>7?+ea0Btw&nTx z89m2UN=ef+48wr4ma`8hCAv~dthFVLbKFA+=+$ZkfcKtp9BG<{uIq{;^I+#($qPW! zG_-BI>tlj*jt~OQxgEHa2q6@>Aq1q9r2{D?VvH!I(8Dm$_dUzyvVaUBkWykU+AJ}p z#2maBlE4OMm1^L_t(I%jJ_XO2t4FMbBJkCXhftZ~=n+&h@wfH)LaPVUs1f zg0F2LGsz_X#m>S6{qP&XTfXAF`|jnruIpAVkhoBP5YYEMIcLm_WmzyY%#55fec%5M z2qBPCqLhLpoO6^?NGTCQ*Z}-y;5|*#kdAMp)ri64ylAfPka~1p231v2mW7Y!SLUY| zu$36&c^Nq8kVKgmj=(!`IvJ979c)gJM9vxMio@drF$QdfaU6GDYyi_Vky7I3_MR9c zk{HL4VHhZ-(6;T*fO(z?A>h6Ls!Y{q6 delta 199 zcmV;&0671|0*V5VOMj|KL_t(I%jJ?i3c^4Tg} Date: Sat, 4 May 2019 13:11:35 +0200 Subject: [PATCH 15/15] Added experimental electrical pass-through furnace. Release version commit v1.0.4-mc1.12.2. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 7 +- 1.12/readme.md | 18 +- .../engineersdecor/ModEngineersDecor.java | 3 + .../blocks/BlockDecorFurnace.java | 135 ++-- .../blocks/BlockDecorFurnaceElectrical.java | 683 ++++++++++++++++++ .../wile/engineersdecor/blocks/ModBlocks.java | 29 +- .../wile/engineersdecor/detail/ModConfig.java | 20 + .../blockstates/small_electrical_furnace.json | 12 + .../assets/engineersdecor/lang/en_us.lang | 6 + .../assets/engineersdecor/lang/ru_ru.lang | 6 + .../small_electrical_furnace_model.json | 106 +++ .../engineersdecor/recipes/_constants.json | 11 + .../small_electrical_furnace_recipe.json | 32 + .../furnace/small_electrical_furnace_back.png | Bin 0 -> 533 bytes .../small_electrical_furnace_bottom.png | Bin 0 -> 472 bytes .../small_electrical_furnace_front.png | Bin 0 -> 531 bytes .../small_electrical_furnace_gloom_off.png | Bin 0 -> 184 bytes .../small_electrical_furnace_gloom_on.png | Bin 0 -> 693 bytes ...all_electrical_furnace_gloom_on.png.mcmeta | 1 + .../furnace/small_electrical_furnace_left.png | Bin 0 -> 522 bytes .../small_electrical_furnace_right.png | Bin 0 -> 517 bytes .../furnace/small_electrical_furnace_top.png | Bin 0 -> 484 bytes .../gui/small_electrical_furnace_gui.png | Bin 0 -> 22957 bytes meta/update.json | 7 +- 25 files changed, 994 insertions(+), 84 deletions(-) create mode 100644 1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/small_electrical_furnace.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/furnace/small_electrical_furnace_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/small_electrical_furnace_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_back.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_bottom.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_front.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_off.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_on.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_on.png.mcmeta create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_left.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_right.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_top.png create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/gui/small_electrical_furnace_gui.png diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 5b3f7e2..4b6c77f 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.4-b9 +version_engineersdecor=1.0.4 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 921c35d..15eb6a0 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,7 +1,8 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { - "1.0.4-b9": "[F] Inserting fluids with pressurized tag only into IE piping.\n[F] Valve redstone connector rendering does not check for \"can connect redstone\" but only for \"can provide power\".\n[M] Valves are adpted to be detected as pipe by IE.", + "1.0.4": "[R] Release based on v1.0.3-b9. Release-to-release changes: * Crafting table: Quick crafting history re-fab, JEI integration. * Rendering improvements and issue fixes (stairs, ambient occlusion, optifine, etc). * Walls with texture variations. * Thin/thick steel poles with support feet/heads. * Horizontal steel double-T support beams added. * Fluid pipe valves added: Check valve, redstone controlled valve, analog redstone controlled valve. Support pressuzized transfer. * Tooltip documentation (CTRL-SHIFT) for stairs added. * Internal code cleanups. * Recipes tuned.\n[E] Added pass-through electrical furnace (experimental, see config).", + "1.0.4-b9": "[F] Inserting fluids with pressurized tag only into IE piping.\n[F] Valve redstone connector rendering does not check for \"can connect redstone\" but only for \"can provide power\".\n[M] Valves are adapted to be detected as pipe by IE.", "1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[E] Added passive fluid accumulator (experimental feature, see config).", "1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", @@ -32,7 +33,7 @@ "1.0.0-b1": "[A] Initial structure.\n[A] Added clinker bricks and clinker brick stairs.\n[A] Added slag bricks and slag brick stairs.\n[A] Added metal rung ladder.\n[A] Added staggered metal steps ladder.\n[A] Added treated wood ladder.\n[A] Added treated wood pole.\n[A] Added treated wood table." }, "promos": { - "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b9" + "1.12.2-recommended": "1.0.4", + "1.12.2-latest": "1.0.4" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index e525b34..6549ddd 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,10 +10,26 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + ------------------------------------------------------------------- + - v1.0.4 [R] Release based on v1.0.3-b9. Release-to-release changes: + * Crafting table: Quick crafting history re-fab, JEI integration. + * Rendering improvements and issue fixes (stairs, ambient occlusion, + optifine, etc). + * Walls with texture variations. + * Thin/thick steel poles with support feet/heads. + * Horizontal steel double-T support beams added. + * Fluid pipe valves added: Check valve, redstone controlled valve, + analog redstone controlled valve. Support pressuzized transfer. + * Tooltip documentation (CTRL-SHIFT) for stairs added. + * Internal code cleanups. + * Recipes tuned. + ------------------------------------------------------------------- + [E] Added pass-through electrical furnace (experimental, see config). + - v1.0.4-b9 [F] Inserting fluids with pressurized tag only into IE piping. [F] Valve redstone connector rendering does not check for "can connect redstone" but only for "can provide power". - [M] Valves are adpted to be detected as pipe by IE. + [M] Valves are adapted to be detected as pipe by IE. - v1.0.4-b8 [F] Fixed stairs rendering without smooth light (thanks rastot9). [E] Added passive fluid accumulator (experimental feature, see config). diff --git a/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java b/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java index b96866d..aad5da8 100644 --- a/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java +++ b/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java @@ -153,6 +153,7 @@ public class ModEngineersDecor { public static final int GUIID_CRAFTING_TABLE = 213101; public static final int GUIID_SMALL_LAB_FURNACE = 213102; + public static final int GUIID_ELECTRICAL_LAB_FURNACE = 213103; @Override public Object getServerGuiElement(final int guiid, final EntityPlayer player, final World world, int x, int y, int z) @@ -162,6 +163,7 @@ public class ModEngineersDecor switch(guiid) { case GUIID_CRAFTING_TABLE: return BlockDecorCraftingTable.getServerGuiElement(player, world, pos, te); case GUIID_SMALL_LAB_FURNACE: return BlockDecorFurnace.getServerGuiElement(player, world, pos, te); + case GUIID_ELECTRICAL_LAB_FURNACE: return BlockDecorFurnaceElectrical.getServerGuiElement(player, world, pos, te); } return null; } @@ -175,6 +177,7 @@ public class ModEngineersDecor switch(guiid) { case GUIID_CRAFTING_TABLE: return BlockDecorCraftingTable.getClientGuiElement(player, world, pos, te); case GUIID_SMALL_LAB_FURNACE: return BlockDecorFurnace.getClientGuiElement(player, world, pos, te); + case GUIID_ELECTRICAL_LAB_FURNACE: return BlockDecorFurnaceElectrical.getClientGuiElement(player, world, pos, te); } return null; } diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java index 189861f..c5317ca 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java @@ -471,7 +471,7 @@ public class BlockDecorFurnace extends BlockDecorDirected private int proc_time_needed_; private int boost_energy_; // small, not saved in nbt. private boolean heater_inserted_ = false; - private NonNullList stacks_; + protected NonNullList stacks_; public static void on_config(int speed_percent, int fuel_efficiency_percent, int boost_energy_per_tick) { @@ -485,7 +485,7 @@ public class BlockDecorFurnace extends BlockDecorDirected public BTileEntity() { reset(); } - public void reset() + protected void reset() { stacks_ = NonNullList.withSize(NUM_OF_SLOTS, ItemStack.EMPTY); proc_time_elapsed_ = 0; @@ -507,7 +507,7 @@ public class BlockDecorFurnace extends BlockDecorDirected fuel_burntime_ = getItemBurnTime(stacks_.get(SMELTING_FUEL_SLOT_NO)); } - private void writenbt(NBTTagCompound compound) + protected void writenbt(NBTTagCompound compound) { compound.setInteger("BurnTime", MathHelper.clamp(burntime_left_,0 , MAX_BURNTIME)); compound.setInteger("CookTime", MathHelper.clamp(proc_time_elapsed_, 0, MAX_BURNTIME)); @@ -652,68 +652,6 @@ public class BlockDecorFurnace extends BlockDecorDirected public void clear() { stacks_.clear(); } - @Override - public void update() - { - if(--tick_timer_ > 0) return; - tick_timer_ = TICK_INTERVAL; - final boolean was_burning = isBurning(); - if(was_burning) burntime_left_ -= TICK_INTERVAL; - if(burntime_left_ < 0) burntime_left_ = 0; - if(world.isRemote) return; - boolean dirty = false; - if(--fifo_timer_ <= 0) { - fifo_timer_ = FIFO_INTERVAL/TICK_INTERVAL; - // note, intentionally not using bitwise OR piping. - if(transferItems(FIFO_OUTPUT_0_SLOT_NO, FIFO_OUTPUT_1_SLOT_NO, 1)) dirty = true; - if(transferItems(SMELTING_OUTPUT_SLOT_NO, FIFO_OUTPUT_0_SLOT_NO, 1)) dirty = true; - if(transferItems(FIFO_FUEL_0_SLOT_NO, SMELTING_FUEL_SLOT_NO, 1)) dirty = true; - if(transferItems(FIFO_FUEL_1_SLOT_NO, FIFO_FUEL_0_SLOT_NO, 1)) dirty = true; - if(transferItems(FIFO_INPUT_0_SLOT_NO, SMELTING_INPUT_SLOT_NO, 1)) dirty = true; - if(transferItems(FIFO_INPUT_1_SLOT_NO, FIFO_INPUT_0_SLOT_NO, 1)) dirty = true; - heater_inserted_ = (ExtItems.IE_EXTERNAL_HEATER==null) // without IE always allow electrical boost - || (stacks_.get(AUX_0_SLOT_NO).getItem()==ExtItems.IE_EXTERNAL_HEATER) - || (stacks_.get(AUX_1_SLOT_NO).getItem()==ExtItems.IE_EXTERNAL_HEATER); - } - ItemStack fuel = stacks_.get(SMELTING_FUEL_SLOT_NO); - if(isBurning() || (!fuel.isEmpty()) && (!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty())) { - if(!isBurning() && canSmelt()) { - burntime_left_ = (int)MathHelper.clamp((proc_fuel_efficiency_ * getItemBurnTime(fuel)), 0, MAX_BURNTIME); - fuel_burntime_ = (burntime_left_ * proc_speed_interval_) / VANILLA_FURNACE_SPEED_INTERVAL; - if(isBurning()) { - dirty = true; - if(!fuel.isEmpty()) { - Item fuel_item = fuel.getItem(); - fuel.shrink(1); - if(fuel.isEmpty()) stacks_.set(SMELTING_FUEL_SLOT_NO, fuel_item.getContainerItem(fuel)); - } - } - } - if(isBurning() && canSmelt()) { - proc_time_elapsed_ += TICK_INTERVAL; - if(heater_inserted_ && (boost_energy_ >= boost_energy_consumption)) { boost_energy_ = 0; proc_time_elapsed_ += TICK_INTERVAL; } - if(proc_time_elapsed_ >= proc_time_needed_) { - proc_time_elapsed_ = 0; - proc_time_needed_ = getCookTime(stacks_.get(SMELTING_INPUT_SLOT_NO)); - smeltItem(); - dirty = true; - } - } else { - proc_time_elapsed_ = 0; - } - } else if(!isBurning() && (proc_time_elapsed_ > 0)) { - proc_time_elapsed_ = MathHelper.clamp(proc_time_elapsed_-2, 0, proc_time_needed_); - } - if(was_burning != isBurning()) { - dirty = true; - final IBlockState state = world.getBlockState(pos); - if(state.getBlock() instanceof BlockDecorFurnace) { - world.setBlockState(pos, state.withProperty(LIT, isBurning())); - } - } - if(dirty) markDirty(); - } - public boolean isBurning() { return burntime_left_ > 0; } @@ -754,7 +692,7 @@ public class BlockDecorFurnace extends BlockDecorDirected return changed; } - private boolean canSmelt() + protected boolean canSmelt() { if(stacks_.get(SMELTING_INPUT_SLOT_NO).isEmpty()) return false; final ItemStack recipe_result_items = BRecipes.instance().getSmeltingResult(stacks_.get(SMELTING_INPUT_SLOT_NO)); @@ -772,7 +710,6 @@ public class BlockDecorFurnace extends BlockDecorDirected final ItemStack smelting_input_stack = stacks_.get(SMELTING_INPUT_SLOT_NO); final ItemStack recipe_result_items = BRecipes.instance().getSmeltingResult(smelting_input_stack); final ItemStack smelting_output_stack = stacks_.get(SMELTING_OUTPUT_SLOT_NO); - final ItemStack fuel_stack = stacks_.get(SMELTING_FUEL_SLOT_NO); if(smelting_output_stack.isEmpty()) { stacks_.set(SMELTING_OUTPUT_SLOT_NO, recipe_result_items.copy()); } else if(smelting_output_stack.getItem() == recipe_result_items.getItem()) { @@ -853,6 +790,70 @@ public class BlockDecorFurnace extends BlockDecorDirected return super.getCapability(capability, facing); } } + + // ITickable ------------------------------------------------------------------------------------ + + @Override + public void update() + { + if(--tick_timer_ > 0) return; + tick_timer_ = TICK_INTERVAL; + final boolean was_burning = isBurning(); + if(was_burning) burntime_left_ -= TICK_INTERVAL; + if(burntime_left_ < 0) burntime_left_ = 0; + if(world.isRemote) return; + boolean dirty = false; + if(--fifo_timer_ <= 0) { + fifo_timer_ = FIFO_INTERVAL/TICK_INTERVAL; + // note, intentionally not using bitwise OR piping. + if(transferItems(FIFO_OUTPUT_0_SLOT_NO, FIFO_OUTPUT_1_SLOT_NO, 1)) dirty = true; + if(transferItems(SMELTING_OUTPUT_SLOT_NO, FIFO_OUTPUT_0_SLOT_NO, 1)) dirty = true; + if(transferItems(FIFO_FUEL_0_SLOT_NO, SMELTING_FUEL_SLOT_NO, 1)) dirty = true; + if(transferItems(FIFO_FUEL_1_SLOT_NO, FIFO_FUEL_0_SLOT_NO, 1)) dirty = true; + if(transferItems(FIFO_INPUT_0_SLOT_NO, SMELTING_INPUT_SLOT_NO, 1)) dirty = true; + if(transferItems(FIFO_INPUT_1_SLOT_NO, FIFO_INPUT_0_SLOT_NO, 1)) dirty = true; + heater_inserted_ = (ExtItems.IE_EXTERNAL_HEATER==null) // without IE always allow electrical boost + || (stacks_.get(AUX_0_SLOT_NO).getItem()==ExtItems.IE_EXTERNAL_HEATER) + || (stacks_.get(AUX_1_SLOT_NO).getItem()==ExtItems.IE_EXTERNAL_HEATER); + } + ItemStack fuel = stacks_.get(SMELTING_FUEL_SLOT_NO); + if(isBurning() || (!fuel.isEmpty()) && (!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty())) { + if(!isBurning() && canSmelt()) { + burntime_left_ = (int)MathHelper.clamp((proc_fuel_efficiency_ * getItemBurnTime(fuel)), 0, MAX_BURNTIME); + fuel_burntime_ = (burntime_left_ * proc_speed_interval_) / VANILLA_FURNACE_SPEED_INTERVAL; + if(isBurning()) { + dirty = true; + if(!fuel.isEmpty()) { + Item fuel_item = fuel.getItem(); + fuel.shrink(1); + if(fuel.isEmpty()) stacks_.set(SMELTING_FUEL_SLOT_NO, fuel_item.getContainerItem(fuel)); + } + } + } + if(isBurning() && canSmelt()) { + proc_time_elapsed_ += TICK_INTERVAL; + if(heater_inserted_ && (boost_energy_ >= boost_energy_consumption)) { boost_energy_ = 0; proc_time_elapsed_ += TICK_INTERVAL; } + if(proc_time_elapsed_ >= proc_time_needed_) { + proc_time_elapsed_ = 0; + proc_time_needed_ = getCookTime(stacks_.get(SMELTING_INPUT_SLOT_NO)); + smeltItem(); + dirty = true; + } + } else { + proc_time_elapsed_ = 0; + } + } else if(!isBurning() && (proc_time_elapsed_ > 0)) { + proc_time_elapsed_ = MathHelper.clamp(proc_time_elapsed_-2, 0, proc_time_needed_); + } + if(was_burning != isBurning()) { + dirty = true; + final IBlockState state = world.getBlockState(pos); + if(state.getBlock() instanceof BlockDecorFurnace) { + world.setBlockState(pos, state.withProperty(LIT, isBurning())); + } + } + if(dirty) markDirty(); + } } //-------------------------------------------------------------------------------------------------------------------- diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java new file mode 100644 index 0000000..92c9694 --- /dev/null +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java @@ -0,0 +1,683 @@ +/* + * @file BlockDecorFurnaceElectrical.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * ED electrical furnace. + */ +package wile.engineersdecor.blocks; + + +import wile.engineersdecor.ModEngineersDecor; + +import net.minecraft.stats.StatList; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.init.Items; +import net.minecraft.item.*; +import net.minecraft.inventory.*; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.*; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Random; + +public class BlockDecorFurnaceElectrical extends BlockDecorFurnace +{ + public BlockDecorFurnaceElectrical(@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); + } + + @Nullable + public TileEntity createTileEntity(World world, IBlockState state) + { return new BlockDecorFurnaceElectrical.BTileEntity(); } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if(world.isRemote) return true; + player.openGui(ModEngineersDecor.instance, ModEngineersDecor.GuiHandler.GUIID_ELECTRICAL_LAB_FURNACE, world, pos.getX(), pos.getY(), pos.getZ()); + player.addStat(StatList.FURNACE_INTERACTION); + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rnd) + {} + + //-------------------------------------------------------------------------------------------------------------------- + // ModEngineersDecor.GuiHandler connectors + //-------------------------------------------------------------------------------------------------------------------- + + public static Object getServerGuiElement(final EntityPlayer player, final World world, final BlockPos pos, final TileEntity te) + { return (te instanceof BTileEntity) ? (new BContainer(player.inventory, world, pos, (BTileEntity)te)) : null; } + + public static Object getClientGuiElement(final EntityPlayer player, final World world, final BlockPos pos, final TileEntity te) + { return (te instanceof BTileEntity) ? (new BGui(player.inventory, world, pos, (BTileEntity)te)) : null; } + + //-------------------------------------------------------------------------------------------------------------------- + // GUI + //-------------------------------------------------------------------------------------------------------------------- + + @SideOnly(Side.CLIENT) + private static class BGui extends GuiContainer + { + private final BTileEntity te; + + public BGui(InventoryPlayer playerInventory, World world, BlockPos pos, BTileEntity te) + { super(new BContainer(playerInventory, world, pos, te)); this.te = te; } + + @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/small_electrical_furnace_gui.png")); + final int x0=(width-xSize)/2, y0=(height-ySize)/2, w=xSize, h=ySize; + drawTexturedModalRect(x0, y0, 0, 0, w, h); + if(BTileEntity.isBurning(te)) { + if(BlockDecorFurnace.BTileEntity.isBurning(te)) { + final int hi = 13; + final int k = heat_px(hi); + drawTexturedModalRect(x0+61, y0+53+hi-k, 177, hi-k, 13, k); + } + } + drawTexturedModalRect(x0+79, y0+30, 176, 15, 1+progress_px(17), 15); + int we = energy_px(32, 8); + if(we>0) drawTexturedModalRect(x0+88, y0+53, 185, 30, we, 13); + } + + private int progress_px(int pixels) + { final int tc=te.getField(2), T=te.getField(3); return ((T>0) && (tc>0)) ? (tc * pixels / T) : (0); } + + private int heat_px(int pixels) + { + int k = ((te.getField(0) * (pixels+1)) / (BlockDecorFurnaceElectrical.BTileEntity.HEAT_CAPACITY)); + return (k < pixels) ? k : pixels; + } + + private int energy_px(int maxwidth, int quantization) + { + int k = ((maxwidth * te.getField(1) * 9) / 8) / (te.getMaxEnergyStored()+1); + k = (k >= maxwidth-2) ? maxwidth : k; + if(quantization > 0) k = ((k+(quantization/2))/quantization) * quantization; + return k; + } + + } + + //-------------------------------------------------------------------------------------------------------------------- + // container + //-------------------------------------------------------------------------------------------------------------------- + + public static class BContainer extends Container + { + private static final int PLAYER_INV_START_SLOTNO = 7; + private final World world; + private final BlockPos pos; + private final EntityPlayer player; + private final BTileEntity te; + private int burntime_left_, energy_stored_, proc_time_elapsed_, proc_time_needed_, speed_; + + public BContainer(InventoryPlayer playerInventory, World world, BlockPos pos, BTileEntity te) + { + this.player = playerInventory.player; + this.world = world; + this.pos = pos; + this.te = te; + addSlotToContainer(new Slot(te, 0, 59, 28)); // smelting input + addSlotToContainer(new Slot(te, 1, 16, 52)); // aux + addSlotToContainer(new BSlotResult(playerInventory.player, te, 2, 101, 28)); // smelting result + addSlotToContainer(new BSlotInpFifo(te, 3, 34, 28)); // input fifo 0 + addSlotToContainer(new BSlotInpFifo(te, 4, 16, 28)); // input fifo 1 + addSlotToContainer(new BSlotOutFifo(playerInventory.player, te, 5, 126, 28)); // out fifo 0 + addSlotToContainer(new BSlotOutFifo(playerInventory.player, te, 6, 144, 28)); // out fifo 1 + for(int x=0; x<9; ++x) { + addSlotToContainer(new Slot(playerInventory, x, 8+x*18, 144)); // player slots: 0..8 + } + for(int y=0; y<3; ++y) { + for(int x=0; x<9; ++x) { + addSlotToContainer(new Slot(playerInventory, x+y*9+9, 8+x*18, 86+y*18)); // player slots: 9..35 + } + } + } + + @Override + public void addListener(IContainerListener listener) + { super.addListener(listener); listener.sendAllWindowProperties(this, te); } + + @Override + public void detectAndSendChanges() + { + super.detectAndSendChanges(); + for(int i=0; i= PLAYER_INV_START_SLOTNO) && (index <= PLAYER_INV_START_SLOTNO+36)) { + // Player inventory + if(!BRecipes.instance().getSmeltingResult(slot_stack).isEmpty()) { + if( + (!mergeItemStack(slot_stack, 0, 1, false)) && // smelting input + (!mergeItemStack(slot_stack, 3, 4, false)) && // fifo0 + (!mergeItemStack(slot_stack, 4, 5, false)) // fifo1 + ) return ItemStack.EMPTY; + } else if((index >= PLAYER_INV_START_SLOTNO) && (index < PLAYER_INV_START_SLOTNO+27)) { + // player inventory --> player hotbar + if(!mergeItemStack(slot_stack, PLAYER_INV_START_SLOTNO+27, PLAYER_INV_START_SLOTNO+36, false)) return ItemStack.EMPTY; + } else if((index >= PLAYER_INV_START_SLOTNO+27) && (index < PLAYER_INV_START_SLOTNO+36) && (!mergeItemStack(slot_stack, PLAYER_INV_START_SLOTNO, PLAYER_INV_START_SLOTNO+27, false))) { + // player hotbar --> player inventory + return ItemStack.EMPTY; + } + } else { + // invalid slot + return ItemStack.EMPTY; + } + if(slot_stack.isEmpty()) { + slot.putStack(ItemStack.EMPTY); + } else { + slot.onSlotChanged(); + } + if(slot_stack.getCount() == transferred.getCount()) return ItemStack.EMPTY; + slot.onTake(player, slot_stack); + return transferred; + } + } + + //-------------------------------------------------------------------------------------------------------------------- + // Tile entity + //-------------------------------------------------------------------------------------------------------------------- + + public static class BTileEntity extends BlockDecorFurnace.BTileEntity implements ITickable, ISidedInventory, IEnergyStorage, IItemHandler + { + public static final int TICK_INTERVAL = 4; + public static final int FIFO_INTERVAL = 20; + public static final int HEAT_CAPACITY = 200; + 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 NUM_OF_SLOTS = 7; + public static final int SMELTING_INPUT_SLOT_NO = 0; + public static final int SMELTING_AUX_SLOT_NO = 1; + public static final int SMELTING_OUTPUT_SLOT_NO = 2; + public static final int FIFO_INPUT_0_SLOT_NO = 3; + public static final int FIFO_INPUT_1_SLOT_NO = 4; + public static final int FIFO_OUTPUT_0_SLOT_NO = 5; + public static final int FIFO_OUTPUT_1_SLOT_NO = 6; + public static final int DEFAULT_SPEED_PERCENT = 200; + public static final int DEFAULT_ENERGY_CONSUMPTION = 16 ; + public static final int DEFAULT_SCALED_ENERGY_CONSUMPTION = DEFAULT_ENERGY_CONSUMPTION * HEAT_INCREMENT * DEFAULT_SPEED_PERCENT/100; + + private static int energy_consumption_ = DEFAULT_SCALED_ENERGY_CONSUMPTION; + private static int transfer_energy_consumption_ = DEFAULT_SCALED_ENERGY_CONSUMPTION/8; + private static int proc_speed_percent_ = DEFAULT_SPEED_PERCENT; + private int burntime_left_; + private int proc_time_elapsed_; + private int proc_time_needed_; + private int energy_stored_; + private int speed_; + private int tick_timer_; + private int fifo_timer_; + + public static void on_config(int speed_percent, int standard_energy_per_tick) + { + proc_speed_percent_ = MathHelper.clamp(speed_percent, 10, 500); + energy_consumption_ = MathHelper.clamp(standard_energy_per_tick, 10, 256) * HEAT_INCREMENT * proc_speed_percent_ / 100; + transfer_energy_consumption_ = MathHelper.clamp(energy_consumption_/8, 8, HEAT_INCREMENT); + ModEngineersDecor.logger.info("Config electrical furnace speed:" + proc_speed_percent_ + ", power consumption:" + energy_consumption_); + } + + public BTileEntity() + { super(); reset(); } + + public void reset() + { + stacks_ = NonNullList.withSize(NUM_OF_SLOTS, ItemStack.EMPTY); + burntime_left_ = 0; + proc_time_elapsed_ = 0; + proc_time_needed_ = 0; + fifo_timer_ = 0; + tick_timer_ = 0; + energy_stored_= 0; + speed_ = 0; + } + + public void readnbt(NBTTagCompound compound) + { + reset(); + ItemStackHelper.loadAllItems(compound, this.stacks_); + while(this.stacks_.size() < NUM_OF_SLOTS) this.stacks_.add(ItemStack.EMPTY); + burntime_left_ = compound.getInteger("BurnTime"); + proc_time_elapsed_ = compound.getInteger("CookTime"); + proc_time_needed_ = compound.getInteger("CookTimeTotal"); + energy_stored_ = compound.getInteger("Energy"); + speed_ = compound.getInteger("SpeedSetting"); + } + + protected void writenbt(NBTTagCompound compound) + { + compound.setInteger("BurnTime", MathHelper.clamp(burntime_left_,0 , HEAT_CAPACITY)); + 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)); + ItemStackHelper.saveAllItems(compound, stacks_); + } + + // TileEntity ------------------------------------------------------------------------------ + // IWorldNamable --------------------------------------------------------------------------- + // IInventory ------------------------------------------------------------------------------ + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) + { + switch(index) { + case SMELTING_INPUT_SLOT_NO: + case FIFO_INPUT_0_SLOT_NO: + case FIFO_INPUT_1_SLOT_NO: + return true; + default: + return false; + } + } + + @Override + public int getField(int id) + { + switch (id) { + case 0: return burntime_left_; + case 1: return energy_stored_; + case 2: return proc_time_elapsed_; + case 3: return proc_time_needed_; + case 4: return speed_; + default: return 0; + } + } + + @Override + public void setField(int id, int value) + { + switch(id) { + case 0: burntime_left_ = value; break; + case 1: energy_stored_ = value; break; + case 2: proc_time_elapsed_ = value; break; + case 3: proc_time_needed_ = value; break; + case 4: speed_ = value; break; + } + } + + @Override + public int getFieldCount() + { return 7; } + + public boolean isBurning() + { return burntime_left_ > 0; } + + private boolean transferItems(final int index_from, final int index_to, int count) + { + ItemStack from = stacks_.get(index_from); + if(from.isEmpty()) return false; + ItemStack to = stacks_.get(index_to); + if(from.getCount() < count) count = from.getCount(); + if(count <= 0) return false; + boolean changed = true; + if(to.isEmpty()) { + stacks_.set(index_to, from.splitStack(count)); + } else if(to.getCount() >= to.getMaxStackSize()) { + changed = false; + } else if((!from.isItemEqual(to)) || (!ItemStack.areItemStackTagsEqual(from, to))) { + changed = false; + } else { + if((to.getCount()+count) >= to.getMaxStackSize()) { + from.shrink(to.getMaxStackSize()-to.getCount()); + to.setCount(to.getMaxStackSize()); + } else { + from.shrink(count); + to.grow(count); + } + } + if(from.isEmpty() && from!=ItemStack.EMPTY) { + stacks_.set(index_from, ItemStack.EMPTY); + changed = true; + } + return changed; + } + + // ISidedInventory ---------------------------------------------------------------------------- + + private static final int[] SIDED_INV_SLOTS = new int[] { + SMELTING_INPUT_SLOT_NO, SMELTING_AUX_SLOT_NO, SMELTING_OUTPUT_SLOT_NO, + FIFO_INPUT_0_SLOT_NO, FIFO_INPUT_1_SLOT_NO, FIFO_OUTPUT_0_SLOT_NO, FIFO_OUTPUT_1_SLOT_NO + }; + + @Override + public int[] getSlotsForFace(EnumFacing side) + { return SIDED_INV_SLOTS; } + + @Override + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { return isItemValidForSlot(index, itemStackIn); } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { return ((index!=SMELTING_INPUT_SLOT_NO) && (index!=FIFO_INPUT_0_SLOT_NO) && (index!=FIFO_INPUT_1_SLOT_NO)) || (stack.getItem()==Items.BUCKET); } + + // IEnergyStorage ---------------------------------------------------------------------------- + + public boolean canExtract() + { return false; } + + public boolean canReceive() + { return true; } + + public int getMaxEnergyStored() + { return MAX_ENERGY_BUFFER; } + + public int getEnergyStored() + { return energy_stored_; } + + public int extractEnergy(int maxExtract, boolean simulate) + { return 0; } + + public int receiveEnergy(int maxReceive, boolean simulate) + { + if(energy_stored_ >= MAX_ENERGY_BUFFER) return 0; + int n = Math.min(maxReceive, (MAX_ENERGY_BUFFER - energy_stored_)); + if(n > MAX_ENERGY_TRANSFER) n = MAX_ENERGY_TRANSFER; + if(!simulate) {energy_stored_ += n; markDirty(); } + return n; + } + + // IItemHandler -------------------------------------------------------------------------------- + + @Override + public int getSlots() + { return SIDED_INV_SLOTS.length; } + + @Override + @Nonnull + public ItemStack getStackInSlot(int index) + { return ((index < 0) || (index >= SIDED_INV_SLOTS.length)) ? ItemStack.EMPTY : stacks_.get(SIDED_INV_SLOTS[index]); } + + @Override + public int getSlotLimit(int index) + { return getInventoryStackLimit(); } + + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) + { return true; } + + @Override + @Nonnull + public ItemStack insertItem(int index, @Nonnull ItemStack stack, boolean simulate) + { + if(stack.isEmpty()) return ItemStack.EMPTY; + if((index < 0) || (index >= SIDED_INV_SLOTS.length)) return ItemStack.EMPTY; + int slotno = SIDED_INV_SLOTS[index]; + ItemStack slotstack = getStackInSlot(slotno); + if(!slotstack.isEmpty()) + { + if(slotstack.getCount() >= Math.min(slotstack.getMaxStackSize(), getSlotLimit(index))) return stack; + if(!ItemHandlerHelper.canItemStacksStack(stack, slotstack)) return stack; + if(!canInsertItem(slotno, stack, EnumFacing.UP) || (!isItemValidForSlot(slotno, stack))) return stack; + int n = Math.min(stack.getMaxStackSize(), getSlotLimit(index)) - slotstack.getCount(); + if(stack.getCount() <= n) { + if(!simulate) { + ItemStack copy = stack.copy(); + copy.grow(slotstack.getCount()); + setInventorySlotContents(slotno, copy); + } + return ItemStack.EMPTY; + } else { + stack = stack.copy(); + if(!simulate) { + ItemStack copy = stack.splitStack(n); + copy.grow(slotstack.getCount()); + setInventorySlotContents(slotno, copy); + return stack; + } else { + stack.shrink(n); + return stack; + } + } + } else { + if(!canInsertItem(slotno, stack, EnumFacing.UP) || (!isItemValidForSlot(slotno, stack))) return stack; + int n = Math.min(stack.getMaxStackSize(), getSlotLimit(index)); + if(n < stack.getCount()) { + stack = stack.copy(); + if(!simulate) { + setInventorySlotContents(slotno, stack.splitStack(n)); + return stack; + } else { + stack.shrink(n); + return stack; + } + } else { + if(!simulate) setInventorySlotContents(slotno, stack); + return ItemStack.EMPTY; + } + } + } + + @Override + @Nonnull + public ItemStack extractItem(int index, int amount, boolean simulate) + { + if(amount == 0) return ItemStack.EMPTY; + if((index < 0) || (index >= SIDED_INV_SLOTS.length)) return ItemStack.EMPTY; + int slotno = SIDED_INV_SLOTS[index]; + ItemStack stackInSlot = getStackInSlot(slotno); + if(stackInSlot.isEmpty()) return ItemStack.EMPTY; + if(!canExtractItem(slotno, stackInSlot, EnumFacing.DOWN)) return ItemStack.EMPTY; + if(simulate) { + if(stackInSlot.getCount() < amount) return stackInSlot.copy(); + ItemStack ostack = stackInSlot.copy(); + ostack.setCount(amount); + return ostack; + } else { + ItemStack ostack = decrStackSize(slotno, Math.min(stackInSlot.getCount(), amount)); + markDirty(); + return ostack; + } + } + + // Capability export ---------------------------------------------------------------------------- + + @Override + public boolean hasCapability(Capability cap, EnumFacing facing) + { return ((cap==CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) || (cap==CapabilityEnergy.ENERGY)) || super.hasCapability(cap, facing); } + + @Override + @SuppressWarnings("unchecked") + @Nullable + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if((capability == CapabilityEnergy.ENERGY) || (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)) { + return ((T)this); + } else { + return super.getCapability(capability, facing); + } + } + + // ITickable ------------------------------------------------------------------------------------ + + private boolean adjacent_inventory_shift(boolean inp, boolean out) + { + boolean dirty = false; + if(energy_stored_ < transfer_energy_consumption_) return false; + final IBlockState state = world.getBlockState(pos); + if(!(state.getBlock() instanceof BlockDecorFurnaceElectrical)) return false; + final EnumFacing out_facing = state.getValue(FACING); + final EnumFacing inp_facing = state.getValue(FACING).getOpposite(); + if(out && (!stacks_.get(FIFO_OUTPUT_1_SLOT_NO).isEmpty())) { + TileEntity te = world.getTileEntity(pos.offset(out_facing)); + if((te!=null) && (te.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, inp_facing))) { + IItemHandler hnd = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, inp_facing); + ItemStack remaining = ItemHandlerHelper.insertItemStacked(hnd, stacks_.get(FIFO_OUTPUT_1_SLOT_NO).copy(), false); + stacks_.set(FIFO_OUTPUT_1_SLOT_NO, remaining); + energy_stored_ -= transfer_energy_consumption_; + dirty = true; + } + } + if(inp && (stacks_.get(FIFO_INPUT_1_SLOT_NO).isEmpty())) { + TileEntity te = world.getTileEntity(pos.offset(inp_facing)); + if((te!=null) && (te.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, out_facing))) { + IItemHandler hnd = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, out_facing); + for(int i=0; i< hnd.getSlots(); ++i) { + ItemStack adj_stack = hnd.getStackInSlot(i); + if(!adj_stack.isEmpty()) { + ItemStack my_stack = adj_stack.copy(); + if(my_stack.getCount() > getInventoryStackLimit()) my_stack.setCount(getInventoryStackLimit()); + adj_stack.shrink(my_stack.getCount()); + stacks_.set(FIFO_INPUT_1_SLOT_NO, my_stack); + energy_stored_ -= transfer_energy_consumption_; + dirty = true; + break; + } + } + } + } + return dirty; + } + + // returns TE dirty + private boolean heat_up() + { + if(energy_stored_ < (energy_consumption_)) return false; + if(burntime_left_ >= (HEAT_CAPACITY-HEAT_INCREMENT)) return false; + energy_stored_ -= energy_consumption_; + burntime_left_ += HEAT_INCREMENT; + this.markDirty(); + return true; + } + + @Override + public void update() + { + if(--tick_timer_ > 0) return; + tick_timer_ = TICK_INTERVAL; + final boolean was_burning = isBurning(); + if(was_burning) burntime_left_ -= TICK_INTERVAL; + if(burntime_left_ < 0) burntime_left_ = 0; + if(world.isRemote) return; + boolean dirty = false; + boolean shift_in = false; + boolean shift_out = false; + if(--fifo_timer_ <= 0) { + fifo_timer_ = FIFO_INTERVAL/TICK_INTERVAL; + if(transferItems(FIFO_OUTPUT_0_SLOT_NO, FIFO_OUTPUT_1_SLOT_NO, 64)) { dirty = true; } else { shift_out = true; } + if(transferItems(SMELTING_OUTPUT_SLOT_NO, FIFO_OUTPUT_0_SLOT_NO, 64)) dirty = true; + if(transferItems(FIFO_INPUT_0_SLOT_NO, SMELTING_INPUT_SLOT_NO, 64)) dirty = true; + if(transferItems(FIFO_INPUT_1_SLOT_NO, FIFO_INPUT_0_SLOT_NO, 64)) { dirty = true; } else { shift_in = true; } + } + if((!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty()) && (energy_stored_ >= energy_consumption_)) { + final boolean can_smelt = canSmelt(); + if((!can_smelt) && (BRecipes.instance().getSmeltingResult(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty())) { + // bypass + if(transferItems(SMELTING_INPUT_SLOT_NO, SMELTING_OUTPUT_SLOT_NO, 1)) dirty = true; + } else { + // smelt + if(!isBurning() && can_smelt) { + if(heat_up()) dirty = true; + } + if(isBurning() && can_smelt) { + if(heat_up()) dirty = true; + proc_time_elapsed_ += (TICK_INTERVAL * proc_speed_percent_/100); + if(proc_time_elapsed_ >= proc_time_needed_) { + proc_time_elapsed_ = 0; + proc_time_needed_ = getCookTime(stacks_.get(SMELTING_INPUT_SLOT_NO)); + smeltItem(); + dirty = true; + shift_out = true; + } + } else { + proc_time_elapsed_ = 0; + } + } + } else if(proc_time_elapsed_ > 0) { + proc_time_elapsed_ -= ((stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty() ? 20 : 1); + if(proc_time_elapsed_ < 0) { proc_time_elapsed_ = 0; shift_out = true; } + } + if(was_burning != isBurning()) { + dirty = true; + final IBlockState state = world.getBlockState(pos); + if(state.getBlock() instanceof BlockDecorFurnace) { + world.setBlockState(pos, state.withProperty(LIT, isBurning())); + } + } + if(adjacent_inventory_shift(shift_in, shift_out)) dirty = true; + if(dirty) markDirty(); + } + } +} diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index e74d366..ee7d7d8 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -163,21 +163,28 @@ public class ModBlocks public static final BlockDecorFurnace SMALL_LAB_FURNACE = new BlockDecorFurnace( "small_lab_furnace", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Material.IRON, 1.0f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(1,0,1, 15,15,16.0) + Material.IRON, 0.35f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(1,0,1, 15,15,16) + ); + + public static final BlockDecorFurnaceElectrical SMALL_ELECTRICAL_FURNACE = new BlockDecorFurnaceElectrical( + "small_electrical_furnace", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, + Material.IRON, 0.35f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) ); public static final BlockDecorDirected SIGN_MODLOGO = new BlockDecorDirected( "sign_decor", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(1<*J+Bj?OGj;JcbFmOB`xAzz$0D&`geSOW<)fHXWQEMfHK;QQqk4HoVGsE3cRa8V+ zkGqpn!ptx;9`>J^KYT(&7Pj!4ueG*-hzP2RnQcs}O0AWjKfZJK?JKGZK;QR-5H`Zr z8oDBi2z}qvT0=xArSNY2!h1h#005VlmxK^#tu3SgW=7X_%=3)9^ZfiwN{M-%w+tR1 z9|5Sf(skWtA*kw!?35A>P*qY&lv)uHQqFj-q@1BajFE912_k~1ayT6Rn8s>n_4~SR zZa%&pqi}zJ$23jM^L%c)#285_F$@D{FTuMzUL9zZQqDFvK!EAho4W&`i_Ast-f6F*8(k^SV|_ z33sQpM$UPe!Zb~|JHs%Xu&g_<1*W=5FQqJ>44{<4e!s`vPd2TTvNf97$r6=PaCd$I XkZ0(Nzn|h_00000NkvXXu0mjf6!_|v literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_bottom.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..d806f99ce5122b32c69900e40429a1079770cfbd GIT binary patch literal 472 zcmV;}0Vn>6P)6|+(FLN z_rFmmi20d?WT%1IwHG!ZQ&iO}O5fk#otgag831Dp9*+kgx(fgwgYG6XaWl-Fj36SB z;PrYD5g5R}?^HML4nVK&CSekipwHD=cfa3f&8a{VnZa=!m^4qzB&+_D-QBb4*+6SU zbz^3LrkyIfimIAc+>wm#hEIbjaoaX*Eke^>m>IIUL1t7H5||ko`GI(<0C0C2hzPoy z{p*X2SQZm=$9;S(NPOg&VP;g;lnKOfT#O`xZYIs4A*@NjJ=<-N^g} zu^W@Y%D;L-i->8bi}(9Y#Btf;R|;dsa&B&fK!%yaIR|FTqOZD{6Trw!s-_XGmz!Tc zBZ7TRB{Yqw%4^)L7nCD{%v{7_+cw4+jBVq*D<@#O@lzGRaU5)8fP{~Mnc+Ua!=2mh zhNLx6lg-(5NaFc?a@%)IVvKRYY*-2Cn$Yg1x_LdHABdUB^XKPJ*ZCj%hWO0rx`;0T O0000XP)!HELlwKV%ZP5ZgR!)D3zxrSG-~PVr&h}y4hI9sIb&ul zmrG`|8RzpEGh?&aFpeWHFE1@Vjw5D*joQcCoFPo4XD62AW$QB}P6 z^nFiCsl@?e2mw_krPP9T!RH?z8HNE>Y1qRsaJ${waU;+WMTF<)=Y}XEJUu-TLSP(6 zN-2#b=gjSPBdRK^)rzj`P*p+*6f;zW5CUcfK)+m4R4Hb3u_MOF>+9=85W9}!@yL7K z7q=Q!?f3iX2;O^2DS+dAJ~gyQ>bj1U66^K48As8D_3 z|IF;(eZk@Wkb7076l;i+A^*`t3rqyHGb_Per#@6ErDcir`T!P-1v%$-oo@wxQ%Z?a z3Nc3J^Et7Uf{0K`VZC1em8EuHHK`4zs;wKF!EU!Bgg}h3J?&~x=S8Gd|9ZUw@Edo6 V3C7p;wm<*?002ovPDHLkV1mP`;Uxe7 literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_off.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_off.png new file mode 100644 index 0000000000000000000000000000000000000000..481f72d5478496abde8a9fc19405437c8f46f7d7 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP%z8W z#WBR<^xF#?MVkY7oG+@^nmw3oD)enWrx?R+%@;u}O>;t4gcSDc+Qt_bDn3ifd%#x5 z#54csE*+OQA`YUHPWY%?j!J&>*LuTS>8YNwOspIYEU*4Fr3r_69B<#&!I6{vTjs^( d$NQD{F=p_{zuxql$r@-YgQu&X%Q~loCIIb@K0yEg literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_on.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_on.png new file mode 100644 index 0000000000000000000000000000000000000000..02da0360fe33acdd23c7f887409f9b706e6c3f4c GIT binary patch literal 693 zcmV;m0!safP)h649aa%+62aP!(pEtsjg}G%ksyf1T<#-oF8j_{>_#MlyWk-f@0RZ_&rUJ>Fuz$j zySU{1#ijh^l>iAa5+5Aw*oLVdo1-q0wlo5d>|mAh$!X`2q7r$R?i2Q z7jwqvPjK}3N#sZy@_l0Vm6gZu>iOW&+a@9%j5pv8?mw$aK1hHB_~$-AK)|h-ghM0X zKx?vH{W)JdKSQH6L1-#@Ho&r79B1`atgZlH^>rU)fSG|AZicEN8fy5UJ)im@0TN&| zKKO>}!Bp;8jOBa~K!ny*l@G*OzIYl5O=7mou(yp59h%DOi=8??5LTYO2NbgirIAFn zuvDcFX68~KBtQa;!Uw%>=>u1ABbp(A9{8X#FCg5!vV?n+ILyiSGQC^`akN_j`LBEHJfCE@D zvAYpMz^OAIxN-OPGG>vy|A}E|gZ-UNoXCUcyEW&75DFi}94{-7a(_^nSkiou00}TE zAM|!mQNWA55c6O1g4X-LaO?U7@@&9x`y<)bCh>b89Sb~MAFG=eifmvp2XovVQBZCC bhk4-#zUdTDfe9UT00000NkvXXu0mjf1t2%c literal 0 HcmV?d00001 diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_on.png.mcmeta b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_on.png.mcmeta new file mode 100644 index 0000000..e745021 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_gloom_on.png.mcmeta @@ -0,0 +1 @@ +{ "animation":{ "frames": [0,1,2,3,4,5,6,7], "frametime":8, "interpolate":true }} \ No newline at end of file diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_left.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/furnace/small_electrical_furnace_left.png new file mode 100644 index 0000000000000000000000000000000000000000..40012d5e95074321d79db1abe41d9c960b6c7490 GIT binary patch literal 522 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 W3(FSP0H!UoS()2ksyFj~^#1_OyMS5% literal 0 HcmV?d00001 diff --git a/meta/update.json b/meta/update.json index a6d98b8..b0a040d 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,7 +1,8 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { - "1.0.4-b9": "[F] Inserting fluids with pressurized tag only into IE piping.\n[F] Valve redstone connector rendering does not check for \"can connect redstone\" but only for \"can provide power\".\n[M] Valves are adpted to be detected as pipe by IE.", + "1.0.4": "[R] Release based on v1.0.3-b9. Release-to-release changes: * Crafting table: Quick crafting history re-fab, JEI integration. * Rendering improvements and issue fixes (stairs, ambient occlusion, optifine, etc). * Walls with texture variations. * Thin/thick steel poles with support feet/heads. * Horizontal steel double-T support beams added. * Fluid pipe valves added: Check valve, redstone controlled valve, analog redstone controlled valve. Support pressuzized transfer. * Tooltip documentation (CTRL-SHIFT) for stairs added. * Internal code cleanups. * Recipes tuned.\n[E] Added pass-through electrical furnace (experimental, see config).", + "1.0.4-b9": "[F] Inserting fluids with pressurized tag only into IE piping.\n[F] Valve redstone connector rendering does not check for \"can connect redstone\" but only for \"can provide power\".\n[M] Valves are adapted to be detected as pipe by IE.", "1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[E] Added passive fluid accumulator (experimental feature, see config).", "1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.", "1.0.4-b6": "[A] Added redstone controlled fluid valve.\n[A] Added redstone controlled analog fluid valve.\n[M] Check valve recipe adapted (thanks majijn).", @@ -41,8 +42,8 @@ "1.0.0-a1": "[A] Initial port to 1.13.2 with Forge beta." }, "promos": { - "1.12.2-recommended": "1.0.3", - "1.12.2-latest": "1.0.4-b9", + "1.12.2-recommended": "1.0.4", + "1.12.2-latest": "1.0.4", "1.13.2-recommended": "", "1.13.2-latest": "1.0.4-b3" }