Crafting Table output slot sync reworked. Shingle Roof Wire Conduit added.
This commit is contained in:
parent
034d439860
commit
915abca4fa
12 changed files with 739 additions and 72 deletions
|
@ -5,4 +5,4 @@ version_minecraft=1.16.4
|
||||||
version_forge_minecraft=1.16.4-35.1.10
|
version_forge_minecraft=1.16.4-35.1.10
|
||||||
version_fml_mappings=20201028-1.16.3
|
version_fml_mappings=20201028-1.16.3
|
||||||
version_jei=1.16.4:7.6.1.63
|
version_jei=1.16.4:7.6.1.63
|
||||||
version_engineersdecor=1.1.8-b2
|
version_engineersdecor=1.1.8
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
|
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
|
||||||
"1.16.4": {
|
"1.16.4": {
|
||||||
|
"1.1.8": "[F] Crafting Table Output slot sync rework (issue #138).\n[A] Dark Shingle Roof Wire Conduit added (CFR#347).",
|
||||||
"1.1.8-b2": "[F] Fixed Iron Hatch isLadder bug (thx jerryw09).\n[F] Fixed Block Placer block placing pre-conditions (issue #160, ty XFactHD).\n[F] Added explicit scheduled Crafting Table client sync.\n[F] Fixed directional waterloggable block default state forwarding (issue #162, ty b52src).",
|
"1.1.8-b2": "[F] Fixed Iron Hatch isLadder bug (thx jerryw09).\n[F] Fixed Block Placer block placing pre-conditions (issue #160, ty XFactHD).\n[F] Added explicit scheduled Crafting Table client sync.\n[F] Fixed directional waterloggable block default state forwarding (issue #162, ty b52src).",
|
||||||
"1.1.8-b1": "[F] Fluid Funnel waterlogged fluid picking fixed (issue #158, thx ZoMadeStuff).\n[F] Roof rendering fixes (issues #153/#159, thx Salamance73/Murph).\n[A] Recessed Clinkers, Vertically Slit Clinkers, and Structured Vertical Clinker Slab added.",
|
"1.1.8-b1": "[F] Fluid Funnel waterlogged fluid picking fixed (issue #158, thx ZoMadeStuff).\n[F] Roof rendering fixes (issues #153/#159, thx Salamance73/Murph).\n[A] Recessed Clinkers, Vertically Slit Clinkers, and Structured Vertical Clinker Slab added.",
|
||||||
"1.1.7": "[M] 1.16.5 support.\n[F] Fixed Labeled Crate include (issue #157, ty NillerMedDild).",
|
"1.1.7": "[M] 1.16.5 support.\n[F] Fixed Labeled Crate include (issue #157, ty NillerMedDild).",
|
||||||
|
@ -27,7 +28,7 @@
|
||||||
"1.1.2-b1": "[U] Ported to MC1.16.2."
|
"1.1.2-b1": "[U] Ported to MC1.16.2."
|
||||||
},
|
},
|
||||||
"promos": {
|
"promos": {
|
||||||
"1.16.4-recommended": "1.1.7",
|
"1.16.4-recommended": "1.1.8",
|
||||||
"1.16.4-latest": "1.1.8-b2"
|
"1.16.4-latest": "1.1.8"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,6 +11,9 @@ Mod sources for Minecraft version 1.16.x.
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
|
- v1.1.8 [F] Crafting Table Output slot sync rework (issue #138).
|
||||||
|
[A] Dark Shingle Roof Wire Conduit added (CFR#347).
|
||||||
|
|
||||||
- v1.1.8-b2 [F] Fixed Iron Hatch isLadder bug (thx jerryw09).
|
- v1.1.8-b2 [F] Fixed Iron Hatch isLadder bug (thx jerryw09).
|
||||||
[F] Fixed Block Placer block placing pre-conditions (issue #160, ty XFactHD).
|
[F] Fixed Block Placer block placing pre-conditions (issue #160, ty XFactHD).
|
||||||
[F] Added explicit scheduled Crafting Table client sync.
|
[F] Added explicit scheduled Crafting Table client sync.
|
||||||
|
|
|
@ -15,6 +15,7 @@ package wile.engineersdecor;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.util.SoundEvents;
|
import net.minecraft.util.SoundEvents;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.shapes.IBooleanFunction;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.block.material.MaterialColor;
|
import net.minecraft.block.material.MaterialColor;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
@ -277,6 +278,21 @@ public class ModContent
|
||||||
VoxelShapes.create(Auxiliaries.getPixeledAABB(5, 0, 5, 11, 16, 11))
|
VoxelShapes.create(Auxiliaries.getPixeledAABB(5, 0, 5, 11, 16, 11))
|
||||||
)).setRegistryName(new ResourceLocation(MODID, "dark_shingle_roof_chimneytrunk"));
|
)).setRegistryName(new ResourceLocation(MODID, "dark_shingle_roof_chimneytrunk"));
|
||||||
|
|
||||||
|
public static final EdChimneyTrunkBlock DARK_CERAMIC_SHINGLE_ROOF_WIRECONDUIT = (EdChimneyTrunkBlock)(new EdChimneyTrunkBlock(
|
||||||
|
DecorBlock.CFG_CUTOUT,
|
||||||
|
Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(2f, 15f).sound(SoundType.STONE).notSolid().variableOpacity().setAllowsSpawn(ModContent::disallowSpawn),
|
||||||
|
VoxelShapes.combineAndSimplify(
|
||||||
|
VoxelShapes.create(Auxiliaries.getPixeledAABB(3, 0, 3, 13, 13, 13)),
|
||||||
|
VoxelShapes.create(Auxiliaries.getPixeledAABB(5, 13, 5, 11, 16, 11)),
|
||||||
|
IBooleanFunction.OR
|
||||||
|
),
|
||||||
|
VoxelShapes.combineAndSimplify(
|
||||||
|
VoxelShapes.create(Auxiliaries.getPixeledAABB(5, 0, 5, 11, 15, 11)),
|
||||||
|
VoxelShapes.create(Auxiliaries.getPixeledAABB(7, 15, 7, 9, 16, 9)),
|
||||||
|
IBooleanFunction.OR
|
||||||
|
)
|
||||||
|
)).setRegistryName(new ResourceLocation(MODID, "dark_shingle_roof_wireconduit"));
|
||||||
|
|
||||||
public static final EdChimneyBlock DARK_CERAMIC_SHINGLE_ROOF_CHIMNEY = (EdChimneyBlock)(new EdChimneyBlock(
|
public static final EdChimneyBlock DARK_CERAMIC_SHINGLE_ROOF_CHIMNEY = (EdChimneyBlock)(new EdChimneyBlock(
|
||||||
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_AI_PASSABLE,
|
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_AI_PASSABLE,
|
||||||
Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE).variableOpacity().setAllowsSpawn(ModContent::disallowSpawn),
|
Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE).variableOpacity().setAllowsSpawn(ModContent::disallowSpawn),
|
||||||
|
@ -1047,6 +1063,7 @@ public class ModContent
|
||||||
DARK_CERAMIC_SHINGLE_ROOF_METALIZED,
|
DARK_CERAMIC_SHINGLE_ROOF_METALIZED,
|
||||||
DARK_CERAMIC_SHINGLE_ROOF_SKYLIGHT,
|
DARK_CERAMIC_SHINGLE_ROOF_SKYLIGHT,
|
||||||
DARK_CERAMIC_SHINGLE_ROOF_CHIMNEYTRUNK,
|
DARK_CERAMIC_SHINGLE_ROOF_CHIMNEYTRUNK,
|
||||||
|
DARK_CERAMIC_SHINGLE_ROOF_WIRECONDUIT,
|
||||||
DARK_CERAMIC_SHINGLE_ROOF_BLOCK,
|
DARK_CERAMIC_SHINGLE_ROOF_BLOCK,
|
||||||
DARK_CERAMIC_SHINGLE_ROOF_SLAB,
|
DARK_CERAMIC_SHINGLE_ROOF_SLAB,
|
||||||
HALFSLAB_DARK_CERAMIC_SHINGLE_ROOF,
|
HALFSLAB_DARK_CERAMIC_SHINGLE_ROOF,
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
package wile.engineersdecor.blocks;
|
package wile.engineersdecor.blocks;
|
||||||
|
|
||||||
import net.minecraft.inventory.container.*;
|
import net.minecraft.inventory.container.*;
|
||||||
import net.minecraft.network.play.server.SSetSlotPacket;
|
|
||||||
import net.minecraft.network.NetworkManager;
|
import net.minecraft.network.NetworkManager;
|
||||||
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
|
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
|
||||||
import net.minecraft.world.*;
|
import net.minecraft.world.*;
|
||||||
|
@ -177,7 +176,8 @@ public class EdCraftingTable
|
||||||
{
|
{
|
||||||
public static final int NUM_OF_STORAGE_SLOTS = 18;
|
public static final int NUM_OF_STORAGE_SLOTS = 18;
|
||||||
public static final int NUM_OF_STORAGE_ROWS = 2;
|
public static final int NUM_OF_STORAGE_ROWS = 2;
|
||||||
public static final int NUM_OF_SLOTS = 9+NUM_OF_STORAGE_SLOTS;
|
public static final int NUM_OF_SLOTS = 9+NUM_OF_STORAGE_SLOTS+1;
|
||||||
|
public static final int CRAFTING_RESULT_SLOT = NUM_OF_SLOTS-1;
|
||||||
|
|
||||||
protected Inventories.StorageInventory inventory_;
|
protected Inventories.StorageInventory inventory_;
|
||||||
protected CompoundNBT history = new CompoundNBT();
|
protected CompoundNBT history = new CompoundNBT();
|
||||||
|
@ -289,7 +289,7 @@ public class EdCraftingTable
|
||||||
final Block crafting_table_block = getBlockState().getBlock();
|
final Block crafting_table_block = getBlockState().getBlock();
|
||||||
if(!(crafting_table_block instanceof CraftingTableBlock)) return;
|
if(!(crafting_table_block instanceof CraftingTableBlock)) return;
|
||||||
if(world.getPendingBlockTicks().isTickScheduled(getPos(), crafting_table_block)) return;
|
if(world.getPendingBlockTicks().isTickScheduled(getPos(), crafting_table_block)) return;
|
||||||
world.getPendingBlockTicks().scheduleTick(getPos(), crafting_table_block, 20, TickPriority.LOW);
|
world.getPendingBlockTicks().scheduleTick(getPos(), crafting_table_block, 10, TickPriority.LOW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,6 +322,7 @@ public class EdCraftingTable
|
||||||
private final CraftingHistory history_;
|
private final CraftingHistory history_;
|
||||||
private final CraftingTableGrid matrix_;
|
private final CraftingTableGrid matrix_;
|
||||||
private final CraftResultInventory result_;
|
private final CraftResultInventory result_;
|
||||||
|
private final CraftingOutputSlot crafting_output_slot_;
|
||||||
private boolean has_recipe_collision_;
|
private boolean has_recipe_collision_;
|
||||||
private boolean crafting_matrix_changed_now_;
|
private boolean crafting_matrix_changed_now_;
|
||||||
private final InventoryRange crafting_grid_range_;
|
private final InventoryRange crafting_grid_range_;
|
||||||
|
@ -330,6 +331,7 @@ public class EdCraftingTable
|
||||||
private final InventoryRange player_storage_range_;
|
private final InventoryRange player_storage_range_;
|
||||||
private final InventoryRange player_hotbar_range_;
|
private final InventoryRange player_hotbar_range_;
|
||||||
private final InventoryRange player_inventory_range_;
|
private final InventoryRange player_inventory_range_;
|
||||||
|
private final @Nullable CraftingTableTileEntity te_;
|
||||||
|
|
||||||
public CraftingTableContainer(int cid, PlayerInventory pinv)
|
public CraftingTableContainer(int cid, PlayerInventory pinv)
|
||||||
{ this(cid, pinv, new Inventory(CraftingTableTileEntity.NUM_OF_SLOTS), IWorldPosCallable.DUMMY); }
|
{ this(cid, pinv, new Inventory(CraftingTableTileEntity.NUM_OF_SLOTS), IWorldPosCallable.DUMMY); }
|
||||||
|
@ -340,20 +342,24 @@ public class EdCraftingTable
|
||||||
wpc_ = wpc;
|
wpc_ = wpc;
|
||||||
player_ = pinv.player;
|
player_ = pinv.player;
|
||||||
inventory_ = block_inventory;
|
inventory_ = block_inventory;
|
||||||
|
inventory_.openInventory(player_);
|
||||||
World world = player_.world;
|
World world = player_.world;
|
||||||
if(world.isRemote && (inventory_ instanceof CraftingTableTileEntity)) world = ((CraftingTableTileEntity)inventory_).getWorld();
|
if((inventory_ instanceof StorageInventory) && ((((StorageInventory)inventory_).getTileEntity()) instanceof CraftingTableTileEntity)) {
|
||||||
history_ = new CraftingHistory(world);
|
te_ = (CraftingTableTileEntity)(((StorageInventory)inventory_).getTileEntity());
|
||||||
result_ = new CraftResultInventory();
|
} else {
|
||||||
matrix_ = new CraftingTableGrid(this, block_inventory);
|
te_ = null;
|
||||||
matrix_.openInventory(player_);
|
}
|
||||||
crafting_result_range_= new InventoryRange(result_, 0, 1, 1);
|
crafting_grid_range_ = new InventoryRange(inventory_, 0, 9, 3);
|
||||||
crafting_grid_range_ = new InventoryRange(matrix_, 0, 9, 3);
|
|
||||||
block_storage_range_ = new InventoryRange(inventory_, CRAFTING_SLOTS_SIZE, NUM_OF_STORAGE_SLOTS, NUM_OF_STORAGE_ROWS);
|
block_storage_range_ = new InventoryRange(inventory_, CRAFTING_SLOTS_SIZE, NUM_OF_STORAGE_SLOTS, NUM_OF_STORAGE_ROWS);
|
||||||
|
crafting_result_range_= new InventoryRange(inventory_, CraftingTableTileEntity.CRAFTING_RESULT_SLOT, 1, 1);
|
||||||
player_storage_range_ = InventoryRange.fromPlayerStorage(player_);
|
player_storage_range_ = InventoryRange.fromPlayerStorage(player_);
|
||||||
player_hotbar_range_ = InventoryRange.fromPlayerHotbar(player_);
|
player_hotbar_range_ = InventoryRange.fromPlayerHotbar(player_);
|
||||||
player_inventory_range_= InventoryRange.fromPlayerInventory(player_);
|
player_inventory_range_= InventoryRange.fromPlayerInventory(player_);
|
||||||
|
matrix_ = new CraftingTableGrid(this, inventory_);
|
||||||
|
result_ = new CraftOutputInventory(crafting_result_range_);
|
||||||
|
history_ = new CraftingHistory(world);
|
||||||
// container slotId 0 === crafting output
|
// container slotId 0 === crafting output
|
||||||
addSlot(new CraftingOutputSlot(this, pinv.player, matrix_, result_, 0, 118, 27));
|
addSlot(crafting_output_slot_=(new CraftingOutputSlot(this, pinv.player, matrix_, result_, 0, 118, 27)));
|
||||||
ArrayList<Tuple<Integer,Integer>> slotpositions = new ArrayList<Tuple<Integer,Integer>>();
|
ArrayList<Tuple<Integer,Integer>> slotpositions = new ArrayList<Tuple<Integer,Integer>>();
|
||||||
slotpositions.add(new Tuple<>(118, 27));
|
slotpositions.add(new Tuple<>(118, 27));
|
||||||
// container slotId 1..9 === TE slots 0..8
|
// container slotId 1..9 === TE slots 0..8
|
||||||
|
@ -381,23 +387,25 @@ public class EdCraftingTable
|
||||||
addSlot(new Slot(inventory_, 9+x+y*9, 8+x*18, 65+y*18));
|
addSlot(new Slot(inventory_, 9+x+y*9, 8+x*18, 65+y*18));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if((!player_.world.isRemote) && (inventory_ instanceof CraftingTableTileEntity)) {
|
if((!player_.world.isRemote()) && (te_ != null)) {
|
||||||
history_.read(((CraftingTableTileEntity)inventory_).history.copy());
|
history_.read(te_.history.copy());
|
||||||
}
|
}
|
||||||
CRAFTING_SLOT_COORDINATES = ImmutableList.copyOf(slotpositions);
|
CRAFTING_SLOT_COORDINATES = ImmutableList.copyOf(slotpositions);
|
||||||
onCraftMatrixChanged(matrix_);
|
onCraftMatrixChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canInteractWith(PlayerEntity player)
|
public boolean canInteractWith(PlayerEntity player)
|
||||||
{ return inventory_.isUsableByPlayer(player); }
|
{ return inventory_.isUsableByPlayer(player); }
|
||||||
|
|
||||||
|
public void onCraftMatrixChanged()
|
||||||
|
{ onCraftMatrixChanged(matrix_); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCraftMatrixChanged(IInventory inv)
|
public void onCraftMatrixChanged(IInventory inv)
|
||||||
{
|
{
|
||||||
detectAndSendChanges();
|
|
||||||
wpc_.consume((world,pos)->{
|
wpc_.consume((world,pos)->{
|
||||||
if(world.isRemote) return;
|
if(world.isRemote()) return;
|
||||||
try {
|
try {
|
||||||
crafting_matrix_changed_now_ = true;
|
crafting_matrix_changed_now_ = true;
|
||||||
ServerPlayerEntity player = (ServerPlayerEntity) player_;
|
ServerPlayerEntity player = (ServerPlayerEntity) player_;
|
||||||
|
@ -412,12 +420,12 @@ public class EdCraftingTable
|
||||||
recipe = (ICraftingRecipe)currently_used;
|
recipe = (ICraftingRecipe)currently_used;
|
||||||
}
|
}
|
||||||
if(result_.canUseRecipe(world, player, recipe)) {
|
if(result_.canUseRecipe(world, player, recipe)) {
|
||||||
|
detectAndSendChanges();
|
||||||
stack = recipe.getCraftingResult(matrix_);
|
stack = recipe.getCraftingResult(matrix_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result_.setInventorySlotContents(0, stack);
|
result_.setInventorySlotContents(0, stack);
|
||||||
player.connection.sendPacket(new SSetSlotPacket(windowId, 0, stack));
|
detectAndSendChanges();
|
||||||
sync();
|
|
||||||
} catch(Throwable exc) {
|
} catch(Throwable exc) {
|
||||||
ModEngineersDecor.logger().error("Recipe failed:", exc);
|
ModEngineersDecor.logger().error("Recipe failed:", exc);
|
||||||
}
|
}
|
||||||
|
@ -426,18 +434,7 @@ public class EdCraftingTable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onContainerClosed(PlayerEntity player)
|
public void onContainerClosed(PlayerEntity player)
|
||||||
{
|
{ inventory_.closeInventory(player); }
|
||||||
matrix_.closeInventory(player);
|
|
||||||
result_.clear();
|
|
||||||
result_.closeInventory(player);
|
|
||||||
if(player!=null) {
|
|
||||||
for(Slot e:player.container.inventorySlots) {
|
|
||||||
if(e instanceof CraftingResultSlot) {
|
|
||||||
((CraftingResultSlot)e).putStack(ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canMergeSlot(ItemStack stack, Slot slot)
|
public boolean canMergeSlot(ItemStack stack, Slot slot)
|
||||||
|
@ -507,6 +504,7 @@ public class EdCraftingTable
|
||||||
}
|
}
|
||||||
if(nbt.contains("inventory")) {
|
if(nbt.contains("inventory")) {
|
||||||
Inventories.readNbtStacks(nbt, "inventory", inventory_);
|
Inventories.readNbtStacks(nbt, "inventory", inventory_);
|
||||||
|
this.onCraftMatrixChanged(matrix_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,7 +640,7 @@ public class EdCraftingTable
|
||||||
if(changed) inventory_.markDirty();
|
if(changed) inventory_.markDirty();
|
||||||
if(player_inventory_changed) player.inventory.markDirty();
|
if(player_inventory_changed) player.inventory.markDirty();
|
||||||
if(changed || player_inventory_changed) {
|
if(changed || player_inventory_changed) {
|
||||||
this.onCraftMatrixChanged(inventory_);
|
this.onCraftMatrixChanged();
|
||||||
this.detectAndSendChanges();
|
this.detectAndSendChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -652,18 +650,19 @@ public class EdCraftingTable
|
||||||
|
|
||||||
private void sync()
|
private void sync()
|
||||||
{
|
{
|
||||||
if(!with_assist) return;
|
|
||||||
this.wpc_.consume((world,pos)->{
|
this.wpc_.consume((world,pos)->{
|
||||||
if(world.isRemote()) return;
|
if(world.isRemote()) return;
|
||||||
CompoundNBT hist_nbt = history_.write();
|
inventory_.markDirty();
|
||||||
final CompoundNBT nbt = new CompoundNBT();
|
final CompoundNBT nbt = new CompoundNBT();
|
||||||
if((inventory_ instanceof CraftingTableTileEntity)) {
|
if(te_ != null) nbt.put("inventory", te_.mainInventory().save(false));
|
||||||
((CraftingTableTileEntity)inventory_).history = hist_nbt.copy();
|
if(with_assist) {
|
||||||
inventory_.markDirty();
|
CompoundNBT hist_nbt = history_.write();
|
||||||
nbt.put("inventory", ((CraftingTableTileEntity)inventory_).mainInventory().save(false));
|
if(te_ != null) {
|
||||||
|
te_.history = hist_nbt.copy();
|
||||||
|
}
|
||||||
|
nbt.put("history", hist_nbt);
|
||||||
|
nbt.putBoolean("hascollision", has_recipe_collision_);
|
||||||
}
|
}
|
||||||
nbt.put("history", hist_nbt);
|
|
||||||
nbt.putBoolean("hascollision", has_recipe_collision_);
|
|
||||||
Networking.PacketContainerSyncServerToClient.sendToListeners(world, this, nbt);
|
Networking.PacketContainerSyncServerToClient.sendToListeners(world, this, nbt);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -696,7 +695,7 @@ public class EdCraftingTable
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onCraftMatrixChanged(inv);
|
onCraftMatrixChanged();
|
||||||
} catch(Throwable exc) {
|
} catch(Throwable exc) {
|
||||||
ModEngineersDecor.logger().error("Recipe failed:", exc);
|
ModEngineersDecor.logger().error("Recipe failed:", exc);
|
||||||
}
|
}
|
||||||
|
@ -807,7 +806,7 @@ public class EdCraftingTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(recipe != null) {
|
if(recipe != null) {
|
||||||
onCraftMatrixChanged(inventory_);
|
onCraftMatrixChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1089,9 +1088,9 @@ public class EdCraftingTable
|
||||||
if(!slot.getStack().isEmpty()) { renderTooltip(mx, slot.getStack(), mouseX, mouseY); return; }
|
if(!slot.getStack().isEmpty()) { renderTooltip(mx, slot.getStack(), mouseX, mouseY); return; }
|
||||||
if(with_assist) {
|
if(with_assist) {
|
||||||
int hist_index = -1;
|
int hist_index = -1;
|
||||||
if(slot instanceof CraftingResultSlot) {
|
if(slot instanceof CraftingOutputSlot) {
|
||||||
hist_index = 0;
|
hist_index = 0;
|
||||||
} else if(slot.inventory instanceof CraftingInventory) {
|
} else if(slot.inventory instanceof CraftOutputInventory) {
|
||||||
hist_index = slot.getSlotIndex() + 1;
|
hist_index = slot.getSlotIndex() + 1;
|
||||||
}
|
}
|
||||||
if((hist_index < 0) || (hist_index >= history_slot_tooltip.length)) return;
|
if((hist_index < 0) || (hist_index >= history_slot_tooltip.length)) return;
|
||||||
|
@ -1183,7 +1182,7 @@ public class EdCraftingTable
|
||||||
{
|
{
|
||||||
tooltip.resetTimer();
|
tooltip.resetTimer();
|
||||||
if(type == ClickType.PICKUP) {
|
if(type == ClickType.PICKUP) {
|
||||||
boolean place_refab = (slot instanceof CraftingResultSlot) && (!slot.getHasStack());
|
boolean place_refab = (slot instanceof CraftingOutputSlot) && (!slot.getHasStack());
|
||||||
if(place_refab && with_assist_direct_history_refab) on_history_item_placement(); // place before crafting -> direct item pick
|
if(place_refab && with_assist_direct_history_refab) on_history_item_placement(); // place before crafting -> direct item pick
|
||||||
super.handleMouseClick(slot, slotId, mouseButton, type);
|
super.handleMouseClick(slot, slotId, mouseButton, type);
|
||||||
if(place_refab && (!with_assist_direct_history_refab)) on_history_item_placement(); // place after crafting -> confirmation first
|
if(place_refab && (!with_assist_direct_history_refab)) on_history_item_placement(); // place after crafting -> confirmation first
|
||||||
|
@ -1237,7 +1236,7 @@ public class EdCraftingTable
|
||||||
{
|
{
|
||||||
tooltip.resetTimer();
|
tooltip.resetTimer();
|
||||||
final Slot resultSlot = this.getSlotUnderMouse();
|
final Slot resultSlot = this.getSlotUnderMouse();
|
||||||
if((!with_crafting_slot_mouse_scrolling) || (!(resultSlot instanceof CraftingResultSlot))) {
|
if((!with_crafting_slot_mouse_scrolling) || (!(resultSlot instanceof CraftingOutputSlot))) {
|
||||||
return this.getEventListenerForPos(mouseX, mouseY).filter((evl) -> {
|
return this.getEventListenerForPos(mouseX, mouseY).filter((evl) -> {
|
||||||
return evl.mouseScrolled(mouseX, mouseY, wheel_inc);
|
return evl.mouseScrolled(mouseX, mouseY, wheel_inc);
|
||||||
}).isPresent();
|
}).isPresent();
|
||||||
|
@ -1268,7 +1267,7 @@ public class EdCraftingTable
|
||||||
{
|
{
|
||||||
if((getContainer().history().current().isEmpty())) return;
|
if((getContainer().history().current().isEmpty())) return;
|
||||||
final Slot resultSlot = this.getSlotUnderMouse(); // double check
|
final Slot resultSlot = this.getSlotUnderMouse(); // double check
|
||||||
if(!(resultSlot instanceof CraftingResultSlot)) return;
|
if(!(resultSlot instanceof CraftingOutputSlot)) return;
|
||||||
action(CraftingTableContainer.ACTION_PLACE_CURRENT_HISTORY_SEL);
|
action(CraftingTableContainer.ACTION_PLACE_CURRENT_HISTORY_SEL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1488,20 +1487,91 @@ public class EdCraftingTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Crafting slot of the container ------------------------------------------------------------------------------------
|
// Crafting Result Inventory of the container ------------------------------------------------------------------------
|
||||||
public static class CraftingOutputSlot extends CraftingResultSlot
|
public static class CraftOutputInventory extends CraftResultInventory implements IInventory, IRecipeHolder
|
||||||
|
{
|
||||||
|
private final IInventory result_inv_;
|
||||||
|
private IRecipe<?> recipe_used_;
|
||||||
|
|
||||||
|
public CraftOutputInventory(IInventory inventory)
|
||||||
|
{ result_inv_ = inventory; }
|
||||||
|
|
||||||
|
public int getSizeInventory()
|
||||||
|
{ return 1; }
|
||||||
|
|
||||||
|
public boolean isEmpty()
|
||||||
|
{ return result_inv_.getStackInSlot(0).isEmpty(); }
|
||||||
|
|
||||||
|
public ItemStack getStackInSlot(int index)
|
||||||
|
{ return result_inv_.getStackInSlot(0); }
|
||||||
|
|
||||||
|
public ItemStack decrStackSize(int index, int count)
|
||||||
|
{ return result_inv_.removeStackFromSlot(0); }
|
||||||
|
|
||||||
|
public ItemStack removeStackFromSlot(int index)
|
||||||
|
{ return result_inv_.removeStackFromSlot(0); }
|
||||||
|
|
||||||
|
public void setInventorySlotContents(int index, ItemStack stack)
|
||||||
|
{ result_inv_.setInventorySlotContents(0, stack); }
|
||||||
|
|
||||||
|
public void markDirty()
|
||||||
|
{ result_inv_.markDirty(); }
|
||||||
|
|
||||||
|
public boolean isUsableByPlayer(PlayerEntity player)
|
||||||
|
{ return true; }
|
||||||
|
|
||||||
|
public void clear()
|
||||||
|
{ result_inv_.setInventorySlotContents(0, ItemStack.EMPTY); }
|
||||||
|
|
||||||
|
public void setRecipeUsed(@Nullable IRecipe<?> recipe)
|
||||||
|
{ recipe_used_ = recipe; }
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public IRecipe<?> getRecipeUsed()
|
||||||
|
{ return recipe_used_; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crafting output slot of the container -----------------------------------------------------------------------------
|
||||||
|
// Has to be re-implemented because CraftingResultSlot is not synchronsized for detectAndSendChanges().
|
||||||
|
public static class CraftingOutputSlot extends Slot
|
||||||
{
|
{
|
||||||
private final CraftingTableContainer container;
|
private final CraftingTableContainer container;
|
||||||
private final PlayerEntity player;
|
private final PlayerEntity player;
|
||||||
|
private final CraftingInventory craftMatrix;
|
||||||
|
private int amountCrafted;
|
||||||
|
|
||||||
public CraftingOutputSlot(CraftingTableContainer container, PlayerEntity player, CraftingInventory craftingInventory, IInventory inventoryIn, int slotIndex, int xPosition, int yPosition)
|
public CraftingOutputSlot(CraftingTableContainer container, PlayerEntity player, CraftingInventory craftingInventory, IInventory resultInventory, int slotIndex, int xPosition, int yPosition)
|
||||||
{ super(player, craftingInventory, inventoryIn, slotIndex, xPosition, yPosition); this.container = container; this.player=player; }
|
{
|
||||||
|
super(resultInventory, slotIndex, xPosition, yPosition);
|
||||||
|
this.craftMatrix = craftingInventory;
|
||||||
|
this.container = container;
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isItemValid(ItemStack stack)
|
||||||
|
{ return false; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack decrStackSize(int amount)
|
||||||
|
{
|
||||||
|
if(getHasStack()) amountCrafted += Math.min(amount, getStack().getCount());
|
||||||
|
return super.decrStackSize(amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCrafting(ItemStack stack, int amount)
|
||||||
|
{ amountCrafted += amount; onCrafting(stack); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSwapCraft(int numItemsCrafted)
|
||||||
|
{ amountCrafted += numItemsCrafted; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCrafting(ItemStack stack)
|
protected void onCrafting(ItemStack stack)
|
||||||
{
|
{
|
||||||
if((with_assist) && ((player.world!=null) && (!(player.world.isRemote()))) && (!stack.isEmpty())) {
|
if((with_assist) && ((player.world!=null) && (!(player.world.isRemote()))) && (!stack.isEmpty())) {
|
||||||
final IRecipe recipe = ((CraftResultInventory)this.inventory).getRecipeUsed();
|
final IRecipe recipe = ((CraftOutputInventory)this.inventory).getRecipeUsed();
|
||||||
final ArrayList<ItemStack> grid = new ArrayList<ItemStack>();
|
final ArrayList<ItemStack> grid = new ArrayList<ItemStack>();
|
||||||
grid.add(stack);
|
grid.add(stack);
|
||||||
for(int i = 0; i<9; ++i) grid.add(container.inventory_.getStackInSlot(i));
|
for(int i = 0; i<9; ++i) grid.add(container.inventory_.getStackInSlot(i));
|
||||||
|
@ -1510,15 +1580,43 @@ public class EdCraftingTable
|
||||||
container.history().reset_current();
|
container.history().reset_current();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.onCrafting(stack);
|
// Normal crafting result slot behaviour
|
||||||
|
if(amountCrafted > 0) {
|
||||||
|
stack.onCrafting(this.player.world, this.player, this.amountCrafted);
|
||||||
|
net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerCraftingEvent(this.player, stack, this.craftMatrix);
|
||||||
|
}
|
||||||
|
if(inventory instanceof IRecipeHolder) {
|
||||||
|
((IRecipeHolder)inventory).onCrafting(player);
|
||||||
|
}
|
||||||
|
amountCrafted = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack onTake(PlayerEntity player, ItemStack stack)
|
public ItemStack onTake(PlayerEntity taking_player, ItemStack stack) {
|
||||||
{
|
onCrafting(stack);
|
||||||
final ItemStack result_stack = super.onTake(player, stack);
|
net.minecraftforge.common.ForgeHooks.setCraftingPlayer(taking_player);
|
||||||
container.sync();
|
NonNullList<ItemStack> stacks = taking_player.world.getRecipeManager().getRecipeNonNull(IRecipeType.CRAFTING, craftMatrix, taking_player.world);
|
||||||
return result_stack;
|
net.minecraftforge.common.ForgeHooks.setCraftingPlayer(null);
|
||||||
|
for(int i=0; i<stacks.size(); ++i) {
|
||||||
|
ItemStack itemstack = craftMatrix.getStackInSlot(i);
|
||||||
|
ItemStack itemstack1 = stacks.get(i);
|
||||||
|
if(!itemstack.isEmpty()) {
|
||||||
|
craftMatrix.decrStackSize(i, 1);
|
||||||
|
itemstack = craftMatrix.getStackInSlot(i);
|
||||||
|
}
|
||||||
|
if(!itemstack1.isEmpty()) {
|
||||||
|
if(itemstack.isEmpty()) {
|
||||||
|
craftMatrix.setInventorySlotContents(i, itemstack1);
|
||||||
|
} else if (ItemStack.areItemsEqual(itemstack, itemstack1) && ItemStack.areItemStackTagsEqual(itemstack, itemstack1)) {
|
||||||
|
itemstack1.grow(itemstack.getCount());
|
||||||
|
craftMatrix.setInventorySlotContents(i, itemstack1);
|
||||||
|
} else if (!player.inventory.addItemStackToInventory(itemstack1)) {
|
||||||
|
player.dropItem(itemstack1, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
container.onCraftMatrixChanged();
|
||||||
|
return stack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1535,11 +1633,8 @@ public class EdCraftingTable
|
||||||
protected final Container container;
|
protected final Container container;
|
||||||
protected final IInventory inventory;
|
protected final IInventory inventory;
|
||||||
|
|
||||||
public CraftingTableGrid(Container container_, IInventory block_inventory) {
|
public CraftingTableGrid(Container container_, IInventory block_inventory)
|
||||||
super(container_, 3, 3);
|
{ super(container_, 3, 3); container = container_; inventory = block_inventory; }
|
||||||
container = container_;
|
|
||||||
inventory = block_inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSizeInventory()
|
public int getSizeInventory()
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"facing=east,half=bottom,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model" },
|
||||||
|
"facing=west,half=bottom,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model", "y": 180, "uvlock": true },
|
||||||
|
"facing=south,half=bottom,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model", "y": 90, "uvlock": true },
|
||||||
|
"facing=north,half=bottom,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model", "y": 270, "uvlock": true },
|
||||||
|
"facing=east,half=bottom,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer" },
|
||||||
|
"facing=west,half=bottom,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 180, "uvlock": true },
|
||||||
|
"facing=south,half=bottom,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 90, "uvlock": true },
|
||||||
|
"facing=north,half=bottom,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 270, "uvlock": true },
|
||||||
|
"facing=east,half=bottom,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 270, "uvlock": true },
|
||||||
|
"facing=west,half=bottom,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 90, "uvlock": true },
|
||||||
|
"facing=south,half=bottom,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer" },
|
||||||
|
"facing=north,half=bottom,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 180, "uvlock": true },
|
||||||
|
"facing=east,half=bottom,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner" },
|
||||||
|
"facing=west,half=bottom,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 180, "uvlock": true },
|
||||||
|
"facing=south,half=bottom,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 90, "uvlock": true },
|
||||||
|
"facing=north,half=bottom,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 270, "uvlock": true },
|
||||||
|
"facing=east,half=bottom,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 270, "uvlock": true },
|
||||||
|
"facing=west,half=bottom,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 90, "uvlock": true },
|
||||||
|
"facing=south,half=bottom,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner" },
|
||||||
|
"facing=north,half=bottom,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 180, "uvlock": true },
|
||||||
|
"facing=east,half=top,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model", "x": 180, "uvlock": true },
|
||||||
|
"facing=west,half=top,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model", "x": 180, "y": 180, "uvlock": true },
|
||||||
|
"facing=south,half=top,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model", "x": 180, "y": 90, "uvlock": true },
|
||||||
|
"facing=north,half=top,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model", "x": 180, "y": 270, "uvlock": true },
|
||||||
|
"facing=east,half=top,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 90, "uvlock": true },
|
||||||
|
"facing=west,half=top,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 270, "uvlock": true },
|
||||||
|
"facing=south,half=top,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 180, "uvlock": true },
|
||||||
|
"facing=north,half=top,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "uvlock": true },
|
||||||
|
"facing=east,half=top,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "uvlock": true },
|
||||||
|
"facing=west,half=top,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 180, "uvlock": true },
|
||||||
|
"facing=south,half=top,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 90, "uvlock": true },
|
||||||
|
"facing=north,half=top,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 270, "uvlock": true },
|
||||||
|
"facing=east,half=top,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 90, "uvlock": true },
|
||||||
|
"facing=west,half=top,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 270, "uvlock": true },
|
||||||
|
"facing=south,half=top,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 180, "uvlock": true },
|
||||||
|
"facing=north,half=top,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "uvlock": true },
|
||||||
|
"facing=east,half=top,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "uvlock": true },
|
||||||
|
"facing=west,half=top,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 180, "uvlock": true },
|
||||||
|
"facing=south,half=top,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 90, "uvlock": true },
|
||||||
|
"facing=north,half=top,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 270, "uvlock": true }
|
||||||
|
}
|
||||||
|
}
|
|
@ -78,6 +78,7 @@
|
||||||
"block.engineersdecor.dark_shingle_roof_skylight": "Dark Shingle Roof Skylight",
|
"block.engineersdecor.dark_shingle_roof_skylight": "Dark Shingle Roof Skylight",
|
||||||
"block.engineersdecor.dark_shingle_roof_slab": "Dark Shingle Roof Slab",
|
"block.engineersdecor.dark_shingle_roof_slab": "Dark Shingle Roof Slab",
|
||||||
"block.engineersdecor.dark_shingle_roof_slabslice": "Dark Shingle Roof Slab Slice",
|
"block.engineersdecor.dark_shingle_roof_slabslice": "Dark Shingle Roof Slab Slice",
|
||||||
|
"block.engineersdecor.dark_shingle_roof_wireconduit": "Dark Shingle Roof Wire Conduit",
|
||||||
"block.engineersdecor.dense_grit_dirt_block": "Dense Grit Dirt",
|
"block.engineersdecor.dense_grit_dirt_block": "Dense Grit Dirt",
|
||||||
"block.engineersdecor.dense_grit_dirt_block.help": "A compressed dirt-like soil,\n plain texture with some cracks.\n Known from often used paths or\n trampled yard grounds. Dirt and\n coarse dirt can be mixed in for\n accentuation. Position dependent\n texture variations. Inhibits\n grass spreading.",
|
"block.engineersdecor.dense_grit_dirt_block.help": "A compressed dirt-like soil,\n plain texture with some cracks.\n Known from often used paths or\n trampled yard grounds. Dirt and\n coarse dirt can be mixed in for\n accentuation. Position dependent\n texture variations. Inhibits\n grass spreading.",
|
||||||
"block.engineersdecor.dense_grit_sand_block": "Dense Grit Sand",
|
"block.engineersdecor.dense_grit_sand_block": "Dense Grit Sand",
|
||||||
|
@ -299,7 +300,7 @@
|
||||||
"block.engineersdecor.treated_wood_windowsill": "Treated Wood Window Sill",
|
"block.engineersdecor.treated_wood_windowsill": "Treated Wood Window Sill",
|
||||||
"block.engineersdecor.treated_wood_windowsill.help": "Simple window decoration.",
|
"block.engineersdecor.treated_wood_windowsill.help": "Simple window decoration.",
|
||||||
"item.engineersdecor.metal_bar": "Metal Bar",
|
"item.engineersdecor.metal_bar": "Metal Bar",
|
||||||
|
"engineersdecor.book.landing_text": "Tip in advance: To get a short tooltip help text for a block or device, press the CONTROL and SHIFT keys at the same time while hovering. That way you do not need to carry this heavy manual with you all the time. The more detailed descriptions in this book are helpful if the features are new for you, or if you like to read up about background aspects.",
|
||||||
"engineersdecor.book.name": "Engineer's Decor",
|
"engineersdecor.book.name": "Engineer's Decor",
|
||||||
"engineersdecor.book.subtitle": "Reference manual",
|
"engineersdecor.book.subtitle": "Reference manual"
|
||||||
"engineersdecor.book.landing_text": "Tip in advance: To get a short tooltip help text for a block or device, press the CONTRTOL and SHIFT keys at the same time while hovering. That way you do not need to carry this heavy manual with you all the time. The more detailed descriptions in this book are helpful if the features are new for you, or if you like to read up about background aspects."
|
|
||||||
}
|
}
|
|
@ -78,6 +78,7 @@
|
||||||
"block.engineersdecor.dark_shingle_roof_skylight": "Тёмная керамическая черепица с люкарной",
|
"block.engineersdecor.dark_shingle_roof_skylight": "Тёмная керамическая черепица с люкарной",
|
||||||
"block.engineersdecor.dark_shingle_roof_slab": "Тёмная керамическая черепичная плита",
|
"block.engineersdecor.dark_shingle_roof_slab": "Тёмная керамическая черепичная плита",
|
||||||
"block.engineersdecor.dark_shingle_roof_slabslice": "Тёмная керамическая черепичная пластина",
|
"block.engineersdecor.dark_shingle_roof_slabslice": "Тёмная керамическая черепичная пластина",
|
||||||
|
"block.engineersdecor.dark_shingle_roof_wireconduit": "Тёмная керамическая черепица Wire Conduit",
|
||||||
"block.engineersdecor.dense_grit_dirt_block": "Плотная зернистая земля",
|
"block.engineersdecor.dense_grit_dirt_block": "Плотная зернистая земля",
|
||||||
"block.engineersdecor.dense_grit_dirt_block.help": "Сжатый земляной грунт с простой текстурой с небольшими трещинами.\nМожно найти на тропинках или старых дворовых площадках.\nДля акцентирования можно мешать землю и каменистую землю.\nВариации текстуры зависят от позиции. Предотвращает распространение травы.",
|
"block.engineersdecor.dense_grit_dirt_block.help": "Сжатый земляной грунт с простой текстурой с небольшими трещинами.\nМожно найти на тропинках или старых дворовых площадках.\nДля акцентирования можно мешать землю и каменистую землю.\nВариации текстуры зависят от позиции. Предотвращает распространение травы.",
|
||||||
"block.engineersdecor.dense_grit_sand_block": "Плотный зернистый песок",
|
"block.engineersdecor.dense_grit_sand_block": "Плотный зернистый песок",
|
||||||
|
@ -298,5 +299,8 @@
|
||||||
"block.engineersdecor.treated_wood_window.help": "Деревянный каркас окна с тройным остеклением. Ну и шумоизоляция.",
|
"block.engineersdecor.treated_wood_window.help": "Деревянный каркас окна с тройным остеклением. Ну и шумоизоляция.",
|
||||||
"block.engineersdecor.treated_wood_windowsill": "Обработанный деревянный подоконник",
|
"block.engineersdecor.treated_wood_windowsill": "Обработанный деревянный подоконник",
|
||||||
"block.engineersdecor.treated_wood_windowsill.help": "Простое оформление окон.",
|
"block.engineersdecor.treated_wood_windowsill.help": "Простое оформление окон.",
|
||||||
"item.engineersdecor.metal_bar": "Металлический брусок"
|
"item.engineersdecor.metal_bar": "Металлический брусок",
|
||||||
|
"engineersdecor.book.landing_text": "Tip in advance: To get a short tooltip help text for a block or device, press the CONTRTOL and SHIFT keys at the same time while hovering. That way you do not need to carry this heavy manual with you all the time. The more detailed descriptions in this book are helpful if the features are new for you, or if you like to read up about background aspects.",
|
||||||
|
"engineersdecor.book.name": "Engineer's Decor",
|
||||||
|
"engineersdecor.book.subtitle": "Reference manual"
|
||||||
}
|
}
|
|
@ -78,6 +78,7 @@
|
||||||
"block.engineersdecor.dark_shingle_roof_skylight": "黑色瓦片屋顶天窗",
|
"block.engineersdecor.dark_shingle_roof_skylight": "黑色瓦片屋顶天窗",
|
||||||
"block.engineersdecor.dark_shingle_roof_slab": "黑色陶瓷瓦片屋顶台阶",
|
"block.engineersdecor.dark_shingle_roof_slab": "黑色陶瓷瓦片屋顶台阶",
|
||||||
"block.engineersdecor.dark_shingle_roof_slabslice": "黑色陶瓷瓦片屋顶台阶薄片",
|
"block.engineersdecor.dark_shingle_roof_slabslice": "黑色陶瓷瓦片屋顶台阶薄片",
|
||||||
|
"block.engineersdecor.dark_shingle_roof_wireconduit": "黑色陶瓷瓦片屋顶 Wire Conduit",
|
||||||
"block.engineersdecor.dense_grit_dirt_block": "压制砾土",
|
"block.engineersdecor.dense_grit_dirt_block": "压制砾土",
|
||||||
"block.engineersdecor.dense_grit_dirt_block.help": "一种压制而成的泥土,与砂土非常类似,其光滑的表面上带有些许裂缝。常见于人来人往的小径或者肆意践踏的庭院中。重点是可以混入泥土和砂土。纹理会根据位置的不同而发生变化。可以阻止草的蔓延。",
|
"block.engineersdecor.dense_grit_dirt_block.help": "一种压制而成的泥土,与砂土非常类似,其光滑的表面上带有些许裂缝。常见于人来人往的小径或者肆意践踏的庭院中。重点是可以混入泥土和砂土。纹理会根据位置的不同而发生变化。可以阻止草的蔓延。",
|
||||||
"block.engineersdecor.dense_grit_sand_block": "压制砾砂",
|
"block.engineersdecor.dense_grit_sand_block": "压制砾砂",
|
||||||
|
@ -299,7 +300,7 @@
|
||||||
"block.engineersdecor.treated_wood_windowsill": "防腐木窗台",
|
"block.engineersdecor.treated_wood_windowsill": "防腐木窗台",
|
||||||
"block.engineersdecor.treated_wood_windowsill.help": "简单的窗户装饰。",
|
"block.engineersdecor.treated_wood_windowsill.help": "简单的窗户装饰。",
|
||||||
"item.engineersdecor.metal_bar": "金属棒",
|
"item.engineersdecor.metal_bar": "金属棒",
|
||||||
|
"engineersdecor.book.landing_text": "提前提示:要获得方块或设备的简短提示文本,请在用鼠标悬停时同时按 CONTROL 和 SHIFT 键。这样你就不需要一直带着这个沉重的手册了。如果这些特性对你来说不太熟悉,或者你想了解更多背景,那么这本书中更详细的描述会很有帮助。",
|
||||||
"engineersdecor.book.name": "工程师的装饰",
|
"engineersdecor.book.name": "工程师的装饰",
|
||||||
"engineersdecor.book.subtitle": "参考指南",
|
"engineersdecor.book.subtitle": "参考指南"
|
||||||
"engineersdecor.book.landing_text": "提前提示:要获得方块或设备的简短提示文本,请在用鼠标悬停时同时按 CONTROL 和 SHIFT 键。这样你就不需要一直带着这个沉重的手册了。如果这些特性对你来说不太熟悉,或者你想了解更多背景,那么这本书中更详细的描述会很有帮助。"
|
|
||||||
}
|
}
|
|
@ -0,0 +1,479 @@
|
||||||
|
{
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "engineersdecor:block/roof/dark_shingle_roof",
|
||||||
|
"s": "engineersdecor:block/roof/dark_shingle_roof",
|
||||||
|
"t": "engineersdecor:block/pole/thick_steel_pole_top_texture"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [4, 3.5, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [12, 12.5, 16, 16], "texture": "#s"},
|
||||||
|
"east": {"uv": [0, 12.5, 16, 16], "texture": "#s"},
|
||||||
|
"south": {"uv": [0, 12.5, 4, 16], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 12.5, 16, 16], "texture": "#s"},
|
||||||
|
"up": {"uv": [0, 0, 4, 16], "texture": "#s"},
|
||||||
|
"down": {"uv": [0, 0, 4, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 0],
|
||||||
|
"to": [8, 7.5, 3],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 8.5, 12, 16], "texture": "#s"},
|
||||||
|
"east": {"uv": [13, 8.5, 16, 16], "texture": "#s"},
|
||||||
|
"south": {"uv": [4, 8.5, 8, 16], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 8.5, 3, 16], "texture": "#s"},
|
||||||
|
"up": {"uv": [4, 0, 8, 3], "texture": "#s"},
|
||||||
|
"down": {"uv": [4, 13, 8, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 13],
|
||||||
|
"to": [8, 7.5, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 8.5, 12, 16], "texture": "#s"},
|
||||||
|
"east": {"uv": [0, 8.5, 3, 16], "texture": "#s"},
|
||||||
|
"south": {"uv": [4, 8.5, 8, 16], "texture": "#s"},
|
||||||
|
"west": {"uv": [13, 8.5, 16, 16], "texture": "#s"},
|
||||||
|
"up": {"uv": [4, 13, 8, 16], "texture": "#s"},
|
||||||
|
"down": {"uv": [4, 0, 8, 3], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [3, 1, 3],
|
||||||
|
"to": [12, 11.5, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 4.5, 13, 15], "texture": "#s"},
|
||||||
|
"east": {"uv": [11, 4.5, 13, 15], "texture": "#s"},
|
||||||
|
"south": {"uv": [3, 4.5, 12, 15], "texture": "#s"},
|
||||||
|
"west": {"uv": [3, 4.5, 5, 15], "texture": "#s"},
|
||||||
|
"up": {"uv": [3, 3, 12, 5], "texture": "#s"},
|
||||||
|
"down": {"uv": [3, 11, 12, 13], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 3],
|
||||||
|
"to": [12, 1, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 15, 12, 16], "texture": "#s"},
|
||||||
|
"south": {"uv": [4, 15, 12, 16], "texture": "#t"},
|
||||||
|
"west": {"uv": [3, 15, 5, 16], "texture": "#s"},
|
||||||
|
"up": {"uv": [4, 3, 12, 5], "texture": "#t"},
|
||||||
|
"down": {"uv": [4, 11, 12, 13], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 11],
|
||||||
|
"to": [12, 1, 13],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 15, 12, 16], "texture": "#s"},
|
||||||
|
"south": {"uv": [4, 15, 12, 16], "texture": "#t"},
|
||||||
|
"west": {"uv": [11, 15, 13, 16], "texture": "#s"},
|
||||||
|
"up": {"uv": [4, 11, 12, 13], "texture": "#t"},
|
||||||
|
"down": {"uv": [4, 3, 12, 5], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [3, 1, 11],
|
||||||
|
"to": [12, 11.5, 13],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 4.5, 13, 15], "texture": "#s"},
|
||||||
|
"east": {"uv": [3, 4.5, 5, 15], "texture": "#s"},
|
||||||
|
"south": {"uv": [3, 4.5, 12, 15], "texture": "#s"},
|
||||||
|
"west": {"uv": [11, 4.5, 13, 15], "texture": "#s"},
|
||||||
|
"up": {"uv": [3, 11, 12, 13], "texture": "#s"},
|
||||||
|
"down": {"uv": [3, 3, 12, 5], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 5],
|
||||||
|
"to": [12, 14, 6],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 2, 11, 3], "texture": "#t"},
|
||||||
|
"east": {"uv": [10, 2, 11, 3], "texture": "#t"},
|
||||||
|
"south": {"uv": [5, 2, 12, 3], "texture": "#t"},
|
||||||
|
"west": {"uv": [5, 2, 6, 3], "texture": "#t"},
|
||||||
|
"up": {"uv": [5, 5, 12, 6], "texture": "#t"},
|
||||||
|
"down": {"uv": [5, 10, 12, 11], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [11, 16, 7],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 9]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 2], "texture": "#t"},
|
||||||
|
"east": {"uv": [9, 0, 11, 2], "texture": "#t"},
|
||||||
|
"south": {"uv": [5, 0, 11, 2], "texture": "#t"},
|
||||||
|
"west": {"uv": [5, 0, 7, 2], "texture": "#t"},
|
||||||
|
"up": {"uv": [5, 5, 11, 7], "texture": "#t"},
|
||||||
|
"down": {"uv": [5, 9, 11, 11], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [3, 11.5, 3],
|
||||||
|
"to": [13, 13, 5],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [3, 3, 13, 4.5], "texture": "#t"},
|
||||||
|
"east": {"uv": [11, 3, 13, 4.5], "texture": "#t"},
|
||||||
|
"south": {"uv": [3, 3, 13, 4.5], "texture": "#t"},
|
||||||
|
"west": {"uv": [3, 3, 5, 4.5], "texture": "#t"},
|
||||||
|
"up": {"uv": [3, 3, 13, 5], "texture": "#t"},
|
||||||
|
"down": {"uv": [3, 11, 13, 13], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 10],
|
||||||
|
"to": [12, 14, 11],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 2, 11, 3], "texture": "#t"},
|
||||||
|
"east": {"uv": [5, 2, 6, 3], "texture": "#t"},
|
||||||
|
"south": {"uv": [5, 2, 12, 3], "texture": "#t"},
|
||||||
|
"west": {"uv": [10, 2, 11, 3], "texture": "#t"},
|
||||||
|
"up": {"uv": [5, 10, 12, 11], "texture": "#t"},
|
||||||
|
"down": {"uv": [5, 5, 12, 6], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 9],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 7]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 2], "texture": "#t"},
|
||||||
|
"east": {"uv": [5, 0, 7, 2], "texture": "#t"},
|
||||||
|
"south": {"uv": [5, 0, 11, 2], "texture": "#t"},
|
||||||
|
"west": {"uv": [9, 0, 11, 2], "texture": "#t"},
|
||||||
|
"up": {"uv": [5, 9, 11, 11], "texture": "#t"},
|
||||||
|
"down": {"uv": [5, 5, 11, 7], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [3, 11.5, 11],
|
||||||
|
"to": [13, 13, 13],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [3, 3, 13, 4.5], "texture": "#t"},
|
||||||
|
"east": {"uv": [3, 3, 5, 4.5], "texture": "#t"},
|
||||||
|
"south": {"uv": [3, 3, 13, 4.5], "texture": "#t"},
|
||||||
|
"west": {"uv": [11, 3, 13, 4.5], "texture": "#t"},
|
||||||
|
"up": {"uv": [3, 11, 13, 13], "texture": "#t"},
|
||||||
|
"down": {"uv": [3, 3, 13, 5], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [10, 13, 6],
|
||||||
|
"to": [12, 14, 10],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 2, 6, 3], "texture": "#t"},
|
||||||
|
"east": {"uv": [6, 2, 10, 3], "texture": "#t"},
|
||||||
|
"south": {"uv": [10, 2, 12, 3], "texture": "#t"},
|
||||||
|
"west": {"uv": [6, 2, 10, 3], "texture": "#t"},
|
||||||
|
"up": {"uv": [10, 6, 12, 10], "texture": "#t"},
|
||||||
|
"down": {"uv": [10, 6, 12, 10], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [9, 14, 7],
|
||||||
|
"to": [11, 16, 9],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [6, 9, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 0, 0], "texture": "#t"},
|
||||||
|
"east": {"uv": [5, 0, 11, 4.5], "texture": "#t"},
|
||||||
|
"south": {"uv": [0, 0, 0, 0], "texture": "#t"},
|
||||||
|
"west": {"uv": [5, 0, 11, 4.5], "texture": "#t"},
|
||||||
|
"up": {"uv": [9, 5, 11, 11], "texture": "#t"},
|
||||||
|
"down": {"uv": [11, 5, 13, 11], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 11.5, 5],
|
||||||
|
"to": [13, 13, 11],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [5, 3, 11, 4.5], "texture": "#t"},
|
||||||
|
"west": {"uv": [5, 3, 11, 4.5], "texture": "#t"},
|
||||||
|
"up": {"uv": [11, 5, 13, 11], "texture": "#t"},
|
||||||
|
"down": {"uv": [11, 5, 13, 11], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 6],
|
||||||
|
"to": [6, 14, 10],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [6, 2, 10, 3], "texture": "#t"},
|
||||||
|
"west": {"uv": [6, 2, 10, 3], "texture": "#t"},
|
||||||
|
"up": {"uv": [5, 6, 6, 10], "texture": "#t"},
|
||||||
|
"down": {"uv": [5, 6, 6, 10], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 7],
|
||||||
|
"to": [7, 16, 9],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [10, 9, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9, 0, 11, 2], "texture": "#t"},
|
||||||
|
"east": {"uv": [7, 0, 9, 2], "texture": "#t"},
|
||||||
|
"south": {"uv": [5, 0, 7, 2], "texture": "#t"},
|
||||||
|
"west": {"uv": [7, 0, 9, 2], "texture": "#t"},
|
||||||
|
"up": {"uv": [5, 7, 7, 9], "texture": "#t"},
|
||||||
|
"down": {"uv": [5, 7, 7, 9], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [3, 11.5, 5],
|
||||||
|
"to": [5, 13, 11],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 3, 13, 4.5], "texture": "#t"},
|
||||||
|
"east": {"uv": [5, 3, 11, 4.5], "texture": "#t"},
|
||||||
|
"south": {"uv": [3, 3, 5, 4.5], "texture": "#t"},
|
||||||
|
"west": {"uv": [5, 3, 11, 4.5], "texture": "#t"},
|
||||||
|
"up": {"uv": [3, 5, 5, 11], "texture": "#t"},
|
||||||
|
"down": {"uv": [3, 5, 5, 11], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [3, 1, 5],
|
||||||
|
"to": [5, 11.5, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 4.5, 13, 15], "texture": "#s"},
|
||||||
|
"east": {"uv": [5, 4.5, 11, 15], "texture": "#t"},
|
||||||
|
"south": {"uv": [3, 4.5, 5, 15], "texture": "#s"},
|
||||||
|
"west": {"uv": [5, 4.5, 11, 15], "texture": "#s"},
|
||||||
|
"up": {"uv": [3, 5, 5, 11], "texture": "#s"},
|
||||||
|
"down": {"uv": [3, 5, 5, 11], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 11.5, 11],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [5, 4.5, 11, 16], "texture": "#t"},
|
||||||
|
"west": {"uv": [5, 4.5, 11, 16], "texture": "#t"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#t"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 1, 11],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [5, 15, 11, 16], "texture": "#t"},
|
||||||
|
"west": {"uv": [5, 15, 11, 16], "texture": "#t"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#t"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#t"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 0],
|
||||||
|
"to": [12, 11.5, 3],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 4.5, 8, 16], "texture": "#s"},
|
||||||
|
"east": {"uv": [13, 4.5, 16, 16], "texture": "#s"},
|
||||||
|
"south": {"uv": [8, 4.5, 12, 16], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 4.5, 3, 16], "texture": "#s"},
|
||||||
|
"up": {"uv": [8, 0, 12, 3], "texture": "#s"},
|
||||||
|
"down": {"uv": [8, 13, 12, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 13],
|
||||||
|
"to": [12, 11.5, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 4.5, 8, 16], "texture": "#s"},
|
||||||
|
"east": {"uv": [0, 4.5, 3, 16], "texture": "#s"},
|
||||||
|
"south": {"uv": [8, 4.5, 12, 16], "texture": "#s"},
|
||||||
|
"west": {"uv": [13, 4.5, 16, 16], "texture": "#s"},
|
||||||
|
"up": {"uv": [8, 13, 12, 16], "texture": "#s"},
|
||||||
|
"down": {"uv": [8, 0, 12, 3], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [12, 0, 0],
|
||||||
|
"to": [16, 15.5, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0.5, 4, 16], "texture": "#s"},
|
||||||
|
"east": {"uv": [0, 0.5, 16, 16], "texture": "#s"},
|
||||||
|
"south": {"uv": [12, 0.5, 16, 16], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 0.5, 16, 16], "texture": "#s"},
|
||||||
|
"up": {"uv": [12, 0, 16, 16], "texture": "#s"},
|
||||||
|
"down": {"uv": [12, 0, 16, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 7.5, 0],
|
||||||
|
"to": [8, 7.9375, 3],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 8.0625, 12, 8.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [13, 8.0625, 16, 8.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [4, 8.0625, 8, 8.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 8.0625, 3, 8.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [4, 0, 8, 3], "texture": "#s"},
|
||||||
|
"down": {"uv": [4, 13, 8, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [12, 15.5, 0],
|
||||||
|
"to": [16, 15.9375, 3],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0.0625, 4, 0.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [13, 0.0625, 16, 0.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [12, 0.0625, 16, 0.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 0.0625, 3, 0.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [12, 0, 16, 3], "texture": "#s"},
|
||||||
|
"down": {"uv": [12, 13, 16, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [13, 15.5, 3],
|
||||||
|
"to": [16, 15.9375, 4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0.0625, 3, 0.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [12, 0.0625, 13, 0.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [13, 0.0625, 16, 0.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [3, 0.0625, 4, 0.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [13, 3, 16, 4], "texture": "#s"},
|
||||||
|
"down": {"uv": [13, 12, 16, 13], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [15, 15.5, 4],
|
||||||
|
"to": [16, 15.9375, 8],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0.0625, 1, 0.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [8, 0.0625, 12, 0.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [15, 0.0625, 16, 0.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [4, 0.0625, 8, 0.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [15, 4, 16, 8], "texture": "#s"},
|
||||||
|
"down": {"uv": [15, 8, 16, 12], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [15.9375, 15.9375, 0],
|
||||||
|
"to": [16, 16, 16],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [0, 0, 16, 0.0625], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 0, 16, 0.0625], "texture": "#s"},
|
||||||
|
"up": {"uv": [15.9375, 0, 16, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 11.5, 0],
|
||||||
|
"to": [12, 11.9375, 4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 4.0625, 5, 4.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [12, 4.0625, 16, 4.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [11, 4.0625, 12, 4.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 4.0625, 4, 4.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [11, 0, 12, 4], "texture": "#s"},
|
||||||
|
"down": {"uv": [11, 12, 12, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [3, 3.5, 0],
|
||||||
|
"to": [4, 3.9375, 3],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [12, 12.0625, 13, 12.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [13, 12.0625, 16, 12.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [3, 12.0625, 4, 12.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [0, 12.0625, 3, 12.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [3, 0, 4, 3], "texture": "#s"},
|
||||||
|
"down": {"uv": [3, 13, 4, 16], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [15, 15.5, 12],
|
||||||
|
"to": [16, 15.9375, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0.0625, 1, 0.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [0, 0.0625, 4, 0.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [15, 0.0625, 16, 0.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [12, 0.0625, 16, 0.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [15, 12, 16, 16], "texture": "#s"},
|
||||||
|
"down": {"uv": [15, 0, 16, 4], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 7.5, 13],
|
||||||
|
"to": [8, 7.9375, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 8.0625, 9, 8.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [0, 8.0625, 3, 8.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [7, 8.0625, 8, 8.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [13, 8.0625, 16, 8.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [7, 13, 8, 16], "texture": "#s"},
|
||||||
|
"down": {"uv": [7, 0, 8, 3], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 3.5, 4],
|
||||||
|
"to": [3, 3.9375, 8],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [13, 12.0625, 16, 12.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [8, 12.0625, 12, 12.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [0, 12.0625, 3, 12.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [4, 12.0625, 8, 12.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [0, 4, 3, 8], "texture": "#s"},
|
||||||
|
"down": {"uv": [0, 8, 3, 12], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 3.5, 12],
|
||||||
|
"to": [4, 3.9375, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [12, 12.0625, 16, 12.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [0, 12.0625, 4, 12.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [0, 12.0625, 4, 12.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [12, 12.0625, 16, 12.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [0, 12, 4, 16], "texture": "#s"},
|
||||||
|
"down": {"uv": [0, 0, 4, 4], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 11.5, 13],
|
||||||
|
"to": [12, 11.9375, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 4.0625, 8, 4.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [0, 4.0625, 3, 4.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [8, 4.0625, 12, 4.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [13, 4.0625, 16, 4.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [8, 13, 12, 16], "texture": "#s"},
|
||||||
|
"down": {"uv": [8, 0, 12, 3], "texture": "#s"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [13, 15.5, 8],
|
||||||
|
"to": [16, 15.9375, 12],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0.0625, 3, 0.5], "texture": "#s"},
|
||||||
|
"east": {"uv": [4, 0.0625, 8, 0.5], "texture": "#s"},
|
||||||
|
"south": {"uv": [13, 0.0625, 16, 0.5], "texture": "#s"},
|
||||||
|
"west": {"uv": [8, 0.0625, 12, 0.5], "texture": "#s"},
|
||||||
|
"up": {"uv": [13, 8, 16, 12], "texture": "#s"},
|
||||||
|
"down": {"uv": [13, 4, 16, 8], "texture": "#s"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"rotation": [75, -135, 0],
|
||||||
|
"translation": [0, 2.5, 0],
|
||||||
|
"scale": [0.375, 0.375, 0.375]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [30, 135, 0],
|
||||||
|
"scale": [0.625, 0.625, 0.625]
|
||||||
|
},
|
||||||
|
"head": {
|
||||||
|
"rotation": [0, -90, 0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
{ "parent": "engineersdecor:block/roof/dark_shingle_roof_wireconduit_model" }
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"name": "dark_shingle_roof_wireconduit_dlt",
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:copy_name",
|
||||||
|
"source": "block_entity"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "engineersdecor:dark_shingle_roof_wireconduit"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue