Merge remote-tracking branch 'concealed/mc1.20.1/feature-dev' into mc1.20.1/feature-dev

This commit is contained in:
IThundxr 2024-12-28 14:21:11 -05:00
commit abccb6fb56
Failed to generate hash of commit
48 changed files with 302 additions and 114 deletions

View file

@ -1,4 +1,4 @@
// 1.20.1 2024-12-27T18:05:56.7764077 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)]
// 1.20.1 2024-12-28T14:25:56.9899499 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)]
60bbdf92d2ac9824ea6144955c74043a6005f79d assets/create/blockstates/acacia_window.json
6a67703c2697d81b7dc83e9d72a66f9c9ff08383 assets/create/blockstates/acacia_window_pane.json
c3ae87b62e81d8e9476eccd793bb1548d74c66a1 assets/create/blockstates/adjustable_chain_gearshift.json
@ -4711,7 +4711,7 @@ edf7390f09e622193bbc720ec51ba128ea1e96e6 data/curios/tags/items/head.json
81b107ada9c6ac5679a21f8c6a006bf230f69c39 data/forge/tags/blocks/ores/zinc.json
e475ad1c52bffedfc544e5331a87c1f5c45149fd data/forge/tags/blocks/ores_in_ground/deepslate.json
2f6068972e364599b6849dc46fcb0724d4219d53 data/forge/tags/blocks/ores_in_ground/stone.json
8a5988e68f3a41341b486784c29d00e16d5272f7 data/forge/tags/blocks/relocation_not_supported.json
2589b135c0e96ad29076569e144528fe32ea5b39 data/forge/tags/blocks/relocation_not_supported.json
807ea01d3b028bd226ed0befc142cbd23647e998 data/forge/tags/blocks/storage_blocks.json
7d10cdf9e46a79753d4437c7bb958e3ab8bf0c89 data/forge/tags/blocks/storage_blocks/andesite_alloy.json
70bba470740dc7a77f51b4cb1747a105b62d4bde data/forge/tags/blocks/storage_blocks/brass.json

View file

@ -1,6 +1,5 @@
{
"values": [
"create:chain_conveyor",
"create:track"
]
}

View file

@ -554,7 +554,6 @@ public class AllBlocks {
.mapColor(MapColor.PODZOL))
.transform(axeOrPickaxe())
.transform(BlockStressDefaults.setImpact(1))
.tag(AllBlockTags.RELOCATION_NOT_SUPPORTED.tag)
.blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
.item()
.transform(customItemModel())
@ -883,7 +882,7 @@ public class AllBlocks {
.properties(p -> p.forceSolidOn())
.transform(pickaxeOnly())
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::withoutAO))
.item()
.transform(customItemModel())
.register();
@ -898,7 +897,7 @@ public class AllBlocks {
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::withAO))
.loot((p, b) -> p.dropOther(b, FLUID_PIPE.get()))
.transform(EncasingRegistry.addVariantTo(AllBlocks.FLUID_PIPE))
.register();
@ -922,7 +921,7 @@ public class AllBlocks {
.build();
}, BlockStateProperties.WATERLOGGED);
})
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::withoutAO))
.loot((p, b) -> p.dropOther(b, FLUID_PIPE.get()))
.register();
@ -931,7 +930,7 @@ public class AllBlocks {
.properties(p -> p.mapColor(MapColor.STONE))
.transform(pickaxeOnly())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::withoutAO))
.transform(BlockStressDefaults.setImpact(4.0))
.item()
.transform(customItemModel())
@ -943,7 +942,7 @@ public class AllBlocks {
.properties(p -> p.mapColor(MapColor.TERRACOTTA_YELLOW))
.transform(pickaxeOnly())
.blockstate(new SmartFluidPipeGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::withoutAO))
.item()
.transform(customItemModel())
.register();
@ -951,10 +950,11 @@ public class AllBlocks {
public static final BlockEntry<FluidValveBlock> FLUID_VALVE = REGISTRATE.block("fluid_valve", FluidValveBlock::new)
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.addLayer(() -> RenderType::cutoutMipped)
.blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p,
(state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal",
state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed")))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::withoutAO))
.item()
.transform(customItemModel())
.register();

View file

@ -24,6 +24,7 @@ import com.simibubi.create.content.decoration.steamWhistle.WhistleExtenderBlock;
import com.simibubi.create.content.fluids.tank.FluidTankBlock;
import com.simibubi.create.content.kinetics.crank.HandCrankBlock;
import com.simibubi.create.content.kinetics.fan.NozzleBlock;
import com.simibubi.create.content.logistics.packagerLink.PackagerLinkBlock;
import com.simibubi.create.content.logistics.vault.ItemVaultBlock;
import com.simibubi.create.content.redstone.link.RedstoneLinkBlock;
import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock;
@ -237,7 +238,8 @@ public class BlockMovementChecks {
return true;
if (block instanceof BasePressurePlateBlock)
return true;
if (block instanceof FaceAttachedHorizontalDirectionalBlock && !(block instanceof GrindstoneBlock))
if (block instanceof FaceAttachedHorizontalDirectionalBlock && !(block instanceof GrindstoneBlock)
&& !(block instanceof PackagerLinkBlock))
return true;
if (block instanceof CartAssemblerBlock)
return false;

View file

@ -61,10 +61,12 @@ import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour;
import com.simibubi.create.content.kinetics.base.IRotate;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.content.kinetics.belt.BeltBlock;
import com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorBlockEntity;
import com.simibubi.create.content.kinetics.gantry.GantryShaftBlock;
import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock;
import com.simibubi.create.content.kinetics.steamEngine.PoweredShaftBlockEntity;
import com.simibubi.create.content.logistics.crate.CreativeCrateBlockEntity;
import com.simibubi.create.content.logistics.factoryBoard.FactoryPanelBlockEntity;
import com.simibubi.create.content.redstone.contact.RedstoneContactBlock;
import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock;
import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer;
@ -338,6 +340,9 @@ public abstract class Contraption {
&& !BlockMovementChecks.isNotSupportive(world.getBlockState(attached), offset.getOpposite()))
frontier.add(attached);
}
if (world.getBlockEntity(pos) instanceof ChainConveyorBlockEntity ccbe)
ccbe.notifyConnectedToValidate();
// Double Chest halves stick together
if (state.hasProperty(ChestBlock.TYPE) && state.hasProperty(ChestBlock.FACING)
@ -626,6 +631,9 @@ public abstract class Contraption {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof PoweredShaftBlockEntity)
blockEntity = AllBlockEntityTypes.BRACKETED_KINETIC.create(pos, blockstate);
if (blockEntity instanceof FactoryPanelBlockEntity fpbe)
fpbe.writeSafe(compoundnbt);
return Pair.of(new StructureBlockInfo(pos, blockstate, compoundnbt), blockEntity);
}

View file

@ -33,9 +33,19 @@ import net.minecraftforge.client.model.data.ModelProperty;
public class PipeAttachmentModel extends BakedModelWrapperWithData {
private static final ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
private boolean ao;
public PipeAttachmentModel(BakedModel template) {
public static PipeAttachmentModel withAO(BakedModel template) {
return new PipeAttachmentModel(template, true);
}
public static PipeAttachmentModel withoutAO(BakedModel template) {
return new PipeAttachmentModel(template, false);
}
public PipeAttachmentModel(BakedModel template, boolean ao) {
super(template);
this.ao = ao;
}
@Override
@ -75,6 +85,21 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData {
}
return quads;
}
@Override
public boolean useAmbientOcclusion(BlockState state, RenderType renderType) {
return ao;
}
@Override
public boolean useAmbientOcclusion(BlockState state) {
return ao;
}
@Override
public boolean useAmbientOcclusion() {
return ao;
}
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, RandomSource rand, ModelData data,
PipeModelData pipeData, RenderType renderType) {

View file

@ -12,6 +12,8 @@ import java.util.function.Consumer;
import javax.annotation.Nullable;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.kinetics.base.IRotate;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorPackage.ChainConveyorPackagePhysicsData;
@ -20,6 +22,8 @@ import com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorShape.Cha
import com.simibubi.create.content.logistics.box.PackageEntity;
import com.simibubi.create.content.logistics.box.PackageItem;
import com.simibubi.create.content.logistics.packagePort.frogport.FrogportBlockEntity;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.utility.ServerSpeedProvider;
import com.simibubi.create.infrastructure.config.AllConfigs;
@ -51,7 +55,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.items.ItemHandlerHelper;
public class ChainConveyorBlockEntity extends KineticBlockEntity {
public class ChainConveyorBlockEntity extends KineticBlockEntity implements ITransformableBlockEntity {
public record ConnectionStats(float tangentAngle, float chainLength, Vec3 start, Vec3 end) {
}
@ -71,11 +75,13 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
public boolean reversed;
public boolean cancelDrops;
public boolean checkInvalid;
BlockPos chainDestroyedEffectToSend;
public ChainConveyorBlockEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
super(typeIn, pos, state);
checkInvalid = true;
}
@Override
@ -125,6 +131,11 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
public void tick() {
super.tick();
if (checkInvalid && !level.isClientSide()) {
checkInvalid = false;
removeInvalidConnections();
}
float serverSpeed = level.isClientSide() ? ServerSpeedProvider.get() : 1f;
float speed = getSpeed() / 360f;
float radius = 1.5f;
@ -181,6 +192,8 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
for (Entry<BlockPos, List<ChainConveyorPackage>> entry : travellingPackages.entrySet()) {
BlockPos target = entry.getKey();
ConnectionStats stats = connectionStats.get(target);
if (stats == null)
continue;
Travelling: for (Iterator<ChainConveyorPackage> iterator = entry.getValue()
.iterator(); iterator.hasNext();) {
@ -206,7 +219,7 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
continue;
if (!target.equals(port.connection))
continue;
boolean notAtPositionYet = box.chainPosition < chainPosition;
if (notAtPositionYet && anticipatePosition < chainPosition)
continue;
@ -298,6 +311,33 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
updateBoxWorldPositions();
}
public void removeInvalidConnections() {
boolean changed = false;
for (Iterator<BlockPos> iterator = connections.iterator(); iterator.hasNext();) {
BlockPos next = iterator.next();
BlockPos target = worldPosition.offset(next);
if (!level.isLoaded(target))
continue;
if (level.getBlockEntity(target) instanceof ChainConveyorBlockEntity ccbe
&& ccbe.connections.contains(next.multiply(-1)))
continue;
iterator.remove();
changed = true;
}
if (changed)
notifyUpdate();
}
public void notifyConnectedToValidate() {
for (BlockPos blockPos : connections) {
BlockPos target = worldPosition.offset(blockPos);
if (!level.isLoaded(target))
continue;
if (level.getBlockEntity(target) instanceof ChainConveyorBlockEntity ccbe)
ccbe.checkInvalid = true;
}
}
public void tickBoxVisuals() {
for (ChainConveyorPackage box : loopingPackages)
tickBoxVisuals(box);
@ -371,6 +411,8 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
for (Entry<BlockPos, List<ChainConveyorPackage>> entry : travellingPackages.entrySet()) {
BlockPos target = entry.getKey();
ConnectionStats stats = connectionStats.get(target);
if (stats == null)
continue;
for (ChainConveyorPackage box : entry.getValue()) {
box.worldPosition = getPackagePosition(box.chainPosition, target);
if (level == null || !level.isClientSide())
@ -596,7 +638,8 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
}
private void drop(ChainConveyorPackage box) {
level.addFreshEntity(PackageEntity.fromItemStack(level, box.worldPosition.subtract(0, 0.5, 0), box.item));
if (box.worldPosition != null)
level.addFreshEntity(PackageEntity.fromItemStack(level, box.worldPosition.subtract(0, 0.5, 0), box.item));
}
@Override
@ -617,6 +660,12 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
return super.propagateRotationTo(target, stateFrom, stateTo, diff, connectedViaAxes, connectedViaCogs);
}
@Override
public void writeSafe(CompoundTag tag) {
super.writeSafe(tag);
tag.put("Connections", NBTHelper.writeCompoundList(connections, NbtUtils::writeBlockPos));
}
@Override
protected void write(CompoundTag compound, boolean clientPacket) {
super.write(compound, clientPacket);
@ -717,4 +766,33 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity {
return travellingPackages;
}
@Override
public ItemRequirement getRequiredItems(BlockState state) {
// Uncomment when Schematicannon is able to print these with chains
// int totalCost = 0;
// for (BlockPos pos : connections)
// totalCost += getChainCost(pos);
// if (totalCost > 0)
// return new ItemRequirement(ItemUseType.CONSUME, new ItemStack(Items.CHAIN, Mth.ceil(totalCost / 2.0)));
return super.getRequiredItems(state);
}
@Override
public void transform(StructureTransform transform) {
if (connections == null || connections.isEmpty())
return;
connections = new HashSet<>(connections.stream()
.map(transform::applyWithoutOffset)
.toList());
HashMap<BlockPos, List<ChainConveyorPackage>> newMap = new HashMap<>();
travellingPackages.entrySet()
.forEach(e -> newMap.put(transform.applyWithoutOffset(e.getKey()), e.getValue()));
travellingPackages = newMap;
connectionStats = null;
notifyUpdate();
}
}

View file

@ -64,8 +64,8 @@ public class ChainConveyorRenderer extends KineticBlockEntityRenderer<ChainConve
}
}
private void renderBox(ChainConveyorBlockEntity be, PoseStack ms, MultiBufferSource buffer, int overlay, BlockPos pos,
ChainConveyorPackage box, float partialTicks) {
private void renderBox(ChainConveyorBlockEntity be, PoseStack ms, MultiBufferSource buffer, int overlay,
BlockPos pos, ChainConveyorPackage box, float partialTicks) {
if (box.worldPosition == null)
return;
if (box.item == null || box.item.isEmpty())
@ -126,7 +126,8 @@ public class ChainConveyorRenderer extends KineticBlockEntityRenderer<ChainConve
}
}
private void renderChains(ChainConveyorBlockEntity be, PoseStack ms, MultiBufferSource buffer, int light, int overlay) {
private void renderChains(ChainConveyorBlockEntity be, PoseStack ms, MultiBufferSource buffer, int light,
int overlay) {
float time = LevelTickHolder.getRenderTime(be.getLevel()) / (360f / Math.abs(be.getSpeed()));
time %= 1;
if (time < 0)
@ -151,7 +152,8 @@ public class ChainConveyorRenderer extends KineticBlockEntityRenderer<ChainConve
.subtract(Vec3.atCenterOf(tilePos));
if (!BackendManager.isBackendOn()) {
SuperByteBuffer guard = CachedBuffers.partial(AllPartialModels.CHAIN_CONVEYOR_GUARD, be.getBlockState());
SuperByteBuffer guard =
CachedBuffers.partial(AllPartialModels.CHAIN_CONVEYOR_GUARD, be.getBlockState());
// guard.translate(startOffset.multiply(0, 1, 0));
guard.center();
guard.rotateYDegrees((float) yaw);
@ -177,7 +179,7 @@ public class ChainConveyorRenderer extends KineticBlockEntityRenderer<ChainConve
int light2 = LightTexture.pack(level.getBrightness(LightLayer.BLOCK, tilePos.offset(blockPos)),
level.getBrightness(LightLayer.SKY, tilePos.offset(blockPos)));
boolean far = !Minecraft.getInstance()
boolean far = Minecraft.getInstance().level == be.getLevel() && !Minecraft.getInstance()
.getBlockEntityRenderDispatcher().camera.getPosition()
.closerThan(Vec3.atCenterOf(tilePos)
.add(blockPos.getX() / 2f, blockPos.getY() / 2f, blockPos.getZ() / 2f), MIP_DISTANCE);

View file

@ -33,6 +33,7 @@ import com.simibubi.create.content.logistics.packagerLink.LogisticsManager;
import com.simibubi.create.content.logistics.packagerLink.RequestPromise;
import com.simibubi.create.content.logistics.packagerLink.RequestPromiseQueue;
import com.simibubi.create.content.logistics.stockTicker.PackageOrder;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.blockEntity.behaviour.ValueSettingsBoard;
@ -604,6 +605,21 @@ public class FactoryPanelBehaviour extends FilteringBehaviour {
return promiseClearingInterval * 20 * 60;
}
@Override
public void writeSafe(CompoundTag nbt) {
if (!active)
return;
CompoundTag panelTag = new CompoundTag();
panelTag.put("Filter", getFilter().serializeNBT());
panelTag.putInt("FilterAmount", count);
panelTag.putUUID("Freq", network);
panelTag.putString("RecipeAddress", recipeAddress);
panelTag.putInt("PromiseClearingInterval", -1);
panelTag.putInt("RecipeOutput", 1);
nbt.put(CreateLang.asId(slot.name()), panelTag);
}
@Override
public void write(CompoundTag nbt, boolean clientPacket) {
if (!active)
@ -845,4 +861,10 @@ public class FactoryPanelBehaviour extends FilteringBehaviour {
: waitingForNetwork ? 0x5B3B3B : satisfied ? 0x9EFF7F : promisedSatisfied ? 0x22AFAF : 0x3D6EBD;
}
@Override
public ItemRequirement getRequiredItems() {
return isActive() ? new ItemRequirement(ItemRequirement.ItemUseType.CONSUME, AllBlocks.FACTORY_GAUGE.asItem())
: ItemRequirement.NONE;
}
}

View file

@ -6,8 +6,10 @@ import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.logistics.packagerLink.LogisticallyLinkedBlockItem;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.utility.CreateLang;
@ -33,6 +35,7 @@ import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.FaceAttachedHorizontalDirectionalBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
@ -51,7 +54,7 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.level.BlockEvent;
public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock
implements ProperWaterloggedBlock, IBE<FactoryPanelBlockEntity>, IWrenchable {
implements ProperWaterloggedBlock, IBE<FactoryPanelBlockEntity>, IWrenchable, ISpecialBlockItemRequirement {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
@ -318,19 +321,9 @@ public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock
@Override
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) {
boolean blockChanged = !pState.is(pNewState.getBlock());
if (!pIsMoving && blockChanged)
if (pState.getValue(POWERED))
updateNeighbours(pState, pLevel, pPos);
IBE.onRemove(pState, pLevel, pPos, pNewState);
}
public static void updateNeighbours(BlockState pState, Level pLevel, BlockPos pPos) {
pLevel.updateNeighborsAt(pPos, pState.getBlock());
pLevel.updateNeighborsAt(pPos.relative(getConnectedDirection(pState).getOpposite()), pState.getBlock());
}
public PanelSlot getTargetedSlot(BlockPos pos, BlockState blockState, Vec3 clickLocation) {
double bestDistance = Double.MAX_VALUE;
PanelSlot bestSlot = PanelSlot.BOTTOM_LEFT;
@ -378,4 +371,9 @@ public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock
return (face == AttachFace.CEILING ? Mth.PI : 0) + AngleHelper.rad(AngleHelper.horizontalAngle(facing));
}
@Override
public ItemRequirement getRequiredItems(BlockState state, BlockEntity blockEntity) {
return ItemRequirement.NONE;
}
}

View file

@ -99,6 +99,14 @@ public class FactoryPanelBlockEntity extends SmartBlockEntity {
result++;
return result;
}
@Override
public void remove() {
for (FactoryPanelBehaviour panelBehaviour : panels.values())
if (panelBehaviour.isActive())
panelBehaviour.disconnectAll();
super.remove();
}
@Override
public void destroy() {

View file

@ -45,7 +45,7 @@ public class PackageFilterScreen extends AbstractFilterScreen<PackageFilterMenu>
int x = leftPos;
int y = topPos;
addressBox = new AddressEditBox(this, this.font, x + 44, y + 28, 140, 9, false);
addressBox = new AddressEditBox(this, this.font, x + 44, y + 28, 129, 9, false);
addressBox.setTextColor(0xffffff);
addressBox.setValue(menu.address);
addressBox.setResponder(this::onAddressEdited);

View file

@ -45,7 +45,7 @@ public abstract class PackagePortBlockEntity extends SmartBlockEntity implements
public SmartInventory inventory;
protected AnimatedContainerBehaviour<PackagePortMenu> openTracker;
protected LazyOptional<IItemHandler> itemHandler;
public PackagePortBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
@ -203,7 +203,7 @@ public abstract class PackagePortBlockEntity extends SmartBlockEntity implements
public AbstractContainerMenu createMenu(int pContainerId, Inventory pPlayerInventory, Player pPlayer) {
return PackagePortMenu.create(pContainerId, pPlayerInventory, this);
}
public int getComparatorOutput() {
return ItemHandlerHelper.calcRedstoneFromInventory(inventory);
}

View file

@ -213,7 +213,12 @@ public class LogisticallyLinkedBehaviour extends BlockEntityBehaviour {
public boolean isSafeNBT() {
return true;
}
@Override
public void writeSafe(CompoundTag tag) {
tag.putUUID("Freq", freqId);
}
@Override
public void write(CompoundTag tag, boolean clientPacket) {
super.write(tag, clientPacket);

View file

@ -16,6 +16,7 @@ import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
@ -31,6 +32,7 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.SignalGetter;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
@ -176,4 +178,10 @@ public class RedstoneRequesterBlock extends Block implements IBE<RedstoneRequest
return false;
}
@Override
public BlockState rotate(BlockState pState, Rotation pRotation) {
return pState.setValue(AXIS, pRotation.rotate(Direction.get(AxisDirection.POSITIVE, pState.getValue(AXIS)))
.getAxis());
}
}

View file

@ -78,6 +78,14 @@ public class RedstoneRequesterBlockEntity extends StockCheckingBlockEntity imple
encodedTargetAdress = tag.getString("EncodedAddress");
}
@Override
public void writeSafe(CompoundTag tag) {
super.writeSafe(tag);
tag.putBoolean("AllowPartial", allowPartialRequests);
tag.putString("EncodedAddress", encodedTargetAdress);
tag.put("EncodedRequest", encodedRequest.write());
}
@Override
protected void write(CompoundTag tag, boolean clientPacket) {
super.write(tag, clientPacket);

View file

@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPackets;
@ -25,6 +27,7 @@ import net.minecraft.client.renderer.Rect2i;
import net.minecraft.network.chat.Component;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
@ -128,8 +131,8 @@ public class RedstoneRequesterScreen extends AbstractSimiContainerScreen<Redston
int y = getGuiTop();
for (int i = 0; i < amounts.size(); i++) {
int inputX = x + 21 + i * 18;
int inputY = y + 25;
int inputX = x + 27 + i * 20;
int inputY = y + 28;
ItemStack itemStack = menu.ghostInventory.getStackInSlot(i);
if (itemStack.isEmpty())
continue;
@ -176,8 +179,8 @@ public class RedstoneRequesterScreen extends AbstractSimiContainerScreen<Redston
int y = getGuiTop();
for (int i = 0; i < amounts.size(); i++) {
int inputX = x + 21 + i * 18;
int inputY = y + 25;
int inputX = x + 27 + i * 20;
int inputY = y + 28;
if (mouseX >= inputX && mouseX < inputX + 16 && mouseY >= inputY && mouseY < inputY + 16) {
ItemStack itemStack = menu.ghostInventory.getStackInSlot(i);
if (itemStack.isEmpty())
@ -191,6 +194,15 @@ public class RedstoneRequesterScreen extends AbstractSimiContainerScreen<Redston
return super.mouseScrolled(mouseX, mouseY, pDelta);
}
/*
* Fixes InventorySorter nabbing the scroll event. This screen needs it for
* amount control
*/
@Override
public @Nullable Slot getSlotUnderMouse() {
return null;
}
@Override
protected List<Component> getTooltipFromContainerItem(ItemStack pStack) {
List<Component> tooltip = super.getTooltipFromContainerItem(pStack);

View file

@ -301,11 +301,6 @@ public class TableClothBlockEntity extends SmartBlockEntity {
owner = tag.contains("OwnerUUID") ? tag.getUUID("OwnerUUID") : null;
facing = Direction.from2DDataValue(Mth.positiveModulo(tag.getInt("Facing"), 4));
}
//
// @Override
// protected AABB createRenderBoundingBox() {
// return new AABB(worldPosition).inflate(1);
// }
@Override
public void destroy() {

View file

@ -41,6 +41,11 @@ public class TableClothFilteringBehaviour extends FilteringBehaviour {
return dbe().owner == null || player.getUUID()
.equals(dbe().owner);
}
@Override
public boolean isSafeNBT() {
return false;
}
@Override
public MutableComponent getLabel() {

View file

@ -98,7 +98,7 @@ public abstract class SmartBlockEntity extends CachedRenderBBBlockEntity
super.saveAdditional(tag);
forEachBehaviour(tb -> {
if (tb.isSafeNBT())
tb.write(tag, false);
tb.writeSafe(tag);
});
}

View file

@ -44,6 +44,13 @@ public abstract class BlockEntityBehaviour {
public void write(CompoundTag nbt, boolean clientPacket) {
}
/**
* Called when isSafeNBT == true. Defaults to write()
*/
public void writeSafe(CompoundTag nbt) {
write(nbt, false);
}
public boolean isSafeNBT() {
return false;

View file

@ -81,6 +81,11 @@ public abstract class GhostItemMenu<T> extends MenuBase<T> implements IClearable
ghostInventory.setStackInSlot(slot, insert);
getSlot(slotId).setChanged();
}
@Override
protected boolean moveItemStackTo(ItemStack pStack, int pStartIndex, int pEndIndex, boolean pReverseDirection) {
return false;
}
@Override
public ItemStack quickMoveStack(Player playerIn, int index) {

View file

@ -1,6 +1,5 @@
package com.simibubi.create.foundation.utility;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import javax.annotation.Nullable;
@ -16,7 +15,6 @@ import com.simibubi.create.content.processing.burner.BlazeBurnerBlock;
import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.blockEntity.IMergeableBE;
import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer;
import com.simibubi.create.impl.schematic.nbt.SchematicSafeNBTRegistryImpl;
import net.createmod.catnip.utility.NBTProcessors;

View file

@ -11,7 +11,7 @@
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 9, 1, 16], "texture": "#4"},
"east": {"uv": [13, 0, 8, 7], "texture": "#4"},
"east": {"uv": [16, 0, 11, 7], "texture": "#4"},
"south": {"uv": [7, 0, 8, 7], "texture": "#4"},
"west": {"uv": [16, 9, 11, 16], "texture": "#4"},
"up": {"uv": [0, 0, 1, 5], "rotation": 180, "texture": "#1_7"},
@ -35,7 +35,7 @@
"north": {"uv": [7, 9, 8, 16], "texture": "#4"},
"east": {"uv": [11, 9, 16, 16], "texture": "#4"},
"south": {"uv": [0, 0, 1, 7], "texture": "#4"},
"west": {"uv": [8, 0, 13, 7], "texture": "#4"},
"west": {"uv": [11, 0, 16, 7], "texture": "#4"},
"up": {"uv": [7, 0, 8, 5], "rotation": 180, "texture": "#1_7"},
"down": {"uv": [7, 11, 8, 16], "rotation": 180, "texture": "#1_7"}
}
@ -67,15 +67,16 @@
}
},
{
"from": [0, 0, 0],
"from": [0, 0, 4],
"to": [16, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4]},
"faces": {
"north": {"uv": [0, 0, 16, 2], "texture": "#particle"},
"east": {"uv": [0, 0, 16, 2], "texture": "#particle"},
"south": {"uv": [0, 0, 16, 2], "texture": "#particle"},
"west": {"uv": [0, 0, 16, 2], "texture": "#particle"},
"up": {"uv": [0, 0, 16, 16], "texture": "#particle"},
"down": {"uv": [0, 0, 16, 16], "texture": "#particle"}
"north": {"uv": [0, 7, 8, 8], "texture": "#4"},
"east": {"uv": [16, 7, 10, 8], "texture": "#4"},
"south": {"uv": [0, 7, 8, 8], "texture": "#4"},
"west": {"uv": [10, 7, 16, 8], "texture": "#4"},
"up": {"uv": [8, 10, 16, 16], "texture": "#1_7"},
"down": {"uv": [16, 16, 8, 10], "texture": "#1_7"}
}
}
],

View file

@ -12,7 +12,7 @@
"rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]},
"faces": {
"north": {"uv": [0, 9, 1, 16], "texture": "#4"},
"east": {"uv": [13, 0, 8, 7], "texture": "#4"},
"east": {"uv": [16, 0, 11, 7], "texture": "#4"},
"south": {"uv": [7, 0, 8, 7], "texture": "#4"},
"west": {"uv": [16, 9, 11, 16], "texture": "#4"},
"up": {"uv": [0, 0, 1, 5], "rotation": 180, "texture": "#1_7"},
@ -37,7 +37,7 @@
"north": {"uv": [7, 9, 8, 16], "texture": "#4"},
"east": {"uv": [11, 9, 16, 16], "texture": "#4"},
"south": {"uv": [0, 0, 1, 7], "texture": "#4"},
"west": {"uv": [8, 0, 13, 7], "texture": "#4"},
"west": {"uv": [11, 0, 16, 7], "texture": "#4"},
"up": {"uv": [7, 0, 8, 5], "rotation": 180, "texture": "#1_7"},
"down": {"uv": [7, 11, 8, 16], "rotation": 180, "texture": "#1_7"}
}
@ -90,15 +90,16 @@
}
},
{
"from": [0, 0, 0],
"from": [0, 0, 4],
"to": [16, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4]},
"faces": {
"north": {"uv": [0, 0, 16, 2], "texture": "#particle"},
"east": {"uv": [0, 0, 16, 2], "texture": "#particle"},
"south": {"uv": [0, 0, 16, 2], "texture": "#particle"},
"west": {"uv": [0, 0, 16, 2], "texture": "#particle"},
"up": {"uv": [0, 0, 16, 16], "texture": "#particle"},
"down": {"uv": [0, 0, 16, 16], "texture": "#particle"}
"north": {"uv": [0, 7, 8, 8], "texture": "#4"},
"east": {"uv": [16, 7, 10, 8], "texture": "#4"},
"south": {"uv": [0, 7, 8, 8], "texture": "#4"},
"west": {"uv": [10, 7, 16, 8], "texture": "#4"},
"up": {"uv": [8, 10, 16, 16], "texture": "#1_7"},
"down": {"uv": [16, 16, 8, 10], "texture": "#1_7"}
}
}
],

View file

@ -1,7 +1,6 @@
{
"credit": "Made with Blockbench",
"textures": {
"3": "create:block/train_controller_base",
"4": "create:block/controls_frame",
"1_7": "create:block/controls",
"particle": "create:block/bogey/particle"
@ -13,7 +12,7 @@
"rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]},
"faces": {
"north": {"uv": [0, 9, 1, 16], "texture": "#4"},
"east": {"uv": [13, 0, 8, 7], "texture": "#4"},
"east": {"uv": [16, 0, 11, 7], "texture": "#4"},
"south": {"uv": [7, 0, 8, 7], "texture": "#4"},
"west": {"uv": [16, 9, 11, 16], "texture": "#4"},
"up": {"uv": [0, 0, 1, 5], "rotation": 180, "texture": "#1_7"},
@ -38,7 +37,7 @@
"north": {"uv": [7, 9, 8, 16], "texture": "#4"},
"east": {"uv": [11, 9, 16, 16], "texture": "#4"},
"south": {"uv": [0, 0, 1, 7], "texture": "#4"},
"west": {"uv": [8, 0, 13, 7], "texture": "#4"},
"west": {"uv": [11, 0, 16, 7], "texture": "#4"},
"up": {"uv": [7, 0, 8, 5], "rotation": 180, "texture": "#1_7"},
"down": {"uv": [7, 11, 8, 16], "rotation": 180, "texture": "#1_7"}
}
@ -64,15 +63,16 @@
}
},
{
"from": [0, 0, 0],
"from": [0, 0, 4],
"to": [16, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4]},
"faces": {
"north": {"uv": [0, 0, 16, 2], "texture": "#3"},
"east": {"uv": [0, 0, 16, 2], "texture": "#3"},
"south": {"uv": [0, 0, 16, 2], "texture": "#3"},
"west": {"uv": [0, 0, 16, 2], "texture": "#3"},
"up": {"uv": [0, 0, 16, 16], "texture": "#3"},
"down": {"uv": [0, 0, 16, 16], "texture": "#3"}
"north": {"uv": [0, 7, 8, 8], "texture": "#4"},
"east": {"uv": [16, 7, 10, 8], "texture": "#4"},
"south": {"uv": [0, 7, 8, 8], "texture": "#4"},
"west": {"uv": [10, 7, 16, 8], "texture": "#4"},
"up": {"uv": [8, 10, 16, 16], "texture": "#1_7"},
"down": {"uv": [8, 16, 16, 10], "texture": "#1_7"}
}
}
],

View file

@ -1,7 +1,6 @@
{
"credit": "Made with Blockbench",
"textures": {
"3": "create:block/train_controller_base",
"4": "create:block/controls_frame",
"1_7": "create:block/controls",
"particle": "create:block/bogey/particle"
@ -13,7 +12,7 @@
"rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]},
"faces": {
"north": {"uv": [0, 9, 1, 16], "texture": "#4"},
"east": {"uv": [13, 0, 8, 7], "texture": "#4"},
"east": {"uv": [16, 0, 11, 7], "texture": "#4"},
"south": {"uv": [7, 0, 8, 7], "texture": "#4"},
"west": {"uv": [16, 9, 11, 16], "texture": "#4"},
"up": {"uv": [0, 0, 1, 5], "rotation": 180, "texture": "#1_7"},
@ -38,7 +37,7 @@
"north": {"uv": [7, 9, 8, 16], "texture": "#4"},
"east": {"uv": [11, 9, 16, 16], "texture": "#4"},
"south": {"uv": [0, 0, 1, 7], "texture": "#4"},
"west": {"uv": [8, 0, 13, 7], "texture": "#4"},
"west": {"uv": [11, 0, 16, 7], "texture": "#4"},
"up": {"uv": [7, 0, 8, 5], "rotation": 180, "texture": "#1_7"},
"down": {"uv": [7, 11, 8, 16], "rotation": 180, "texture": "#1_7"}
}
@ -64,15 +63,16 @@
}
},
{
"from": [0, 0, 0],
"from": [0, 0, 4],
"to": [16, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4]},
"faces": {
"north": {"uv": [0, 0, 16, 2], "texture": "#3"},
"east": {"uv": [0, 0, 16, 2], "texture": "#3"},
"south": {"uv": [0, 0, 16, 2], "texture": "#3"},
"west": {"uv": [0, 0, 16, 2], "texture": "#3"},
"up": {"uv": [0, 0, 16, 16], "texture": "#3"},
"down": {"uv": [0, 0, 16, 16], "texture": "#3"}
"north": {"uv": [0, 7, 8, 8], "texture": "#4"},
"east": {"uv": [16, 7, 10, 8], "texture": "#4"},
"south": {"uv": [0, 7, 8, 8], "texture": "#4"},
"west": {"uv": [10, 7, 16, 8], "texture": "#4"},
"up": {"uv": [8, 10, 16, 16], "texture": "#1_7"},
"down": {"uv": [8, 16, 16, 10], "texture": "#1_7"}
}
}
],

View file

@ -1,7 +1,6 @@
{
"credit": "Made with Blockbench",
"textures": {
"3": "create:block/train_controller_base",
"4": "create:block/controls_frame",
"1_7": "create:block/controls",
"particle": "create:block/bogey/particle"
@ -47,7 +46,7 @@
"rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]},
"faces": {
"north": {"uv": [0, 9, 1, 16], "texture": "#4"},
"east": {"uv": [13, 0, 8, 7], "texture": "#4"},
"east": {"uv": [16, 0, 11, 7], "texture": "#4"},
"south": {"uv": [7, 0, 8, 7], "texture": "#4"},
"west": {"uv": [16, 9, 11, 16], "texture": "#4"},
"up": {"uv": [0, 0, 1, 5], "rotation": 180, "texture": "#1_7"},
@ -72,7 +71,7 @@
"north": {"uv": [7, 9, 8, 16], "texture": "#4"},
"east": {"uv": [11, 9, 16, 16], "texture": "#4"},
"south": {"uv": [0, 0, 1, 7], "texture": "#4"},
"west": {"uv": [8, 0, 13, 7], "texture": "#4"},
"west": {"uv": [11, 0, 16, 7], "texture": "#4"},
"up": {"uv": [7, 0, 8, 5], "rotation": 180, "texture": "#1_7"},
"down": {"uv": [7, 11, 8, 16], "rotation": 180, "texture": "#1_7"}
}
@ -98,15 +97,16 @@
}
},
{
"from": [0, 0, 0],
"from": [0, 0, 4],
"to": [16, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4]},
"faces": {
"north": {"uv": [0, 0, 16, 2], "texture": "#3"},
"east": {"uv": [0, 0, 16, 2], "texture": "#3"},
"south": {"uv": [0, 0, 16, 2], "texture": "#3"},
"west": {"uv": [0, 0, 16, 2], "texture": "#3"},
"up": {"uv": [0, 0, 16, 16], "texture": "#3"},
"down": {"uv": [0, 0, 16, 16], "texture": "#3"}
"north": {"uv": [0, 7, 8, 8], "texture": "#4"},
"east": {"uv": [16, 7, 10, 8], "texture": "#4"},
"south": {"uv": [0, 7, 8, 8], "texture": "#4"},
"west": {"uv": [10, 7, 16, 8], "texture": "#4"},
"up": {"uv": [8, 10, 16, 16], "texture": "#1_7"},
"down": {"uv": [8, 16, 16, 10], "texture": "#1_7"}
}
}
]

View file

@ -47,7 +47,7 @@
"rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]},
"faces": {
"north": {"uv": [0, 9, 1, 16], "texture": "#4"},
"east": {"uv": [13, 0, 8, 7], "texture": "#4"},
"east": {"uv": [16, 0, 11, 7], "texture": "#4"},
"south": {"uv": [7, 0, 8, 7], "texture": "#4"},
"west": {"uv": [16, 9, 11, 16], "texture": "#4"},
"up": {"uv": [0, 0, 1, 5], "rotation": 180, "texture": "#1_7"},
@ -72,7 +72,7 @@
"north": {"uv": [7, 9, 8, 16], "texture": "#4"},
"east": {"uv": [11, 9, 16, 16], "texture": "#4"},
"south": {"uv": [0, 0, 1, 7], "texture": "#4"},
"west": {"uv": [8, 0, 13, 7], "texture": "#4"},
"west": {"uv": [11, 0, 16, 7], "texture": "#4"},
"up": {"uv": [7, 0, 8, 5], "rotation": 180, "texture": "#1_7"},
"down": {"uv": [7, 11, 8, 16], "rotation": 180, "texture": "#1_7"}
}
@ -98,15 +98,16 @@
}
},
{
"from": [0, 0, 0],
"from": [0, 0, 4],
"to": [16, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4]},
"faces": {
"north": {"uv": [0, 0, 16, 2], "texture": "#3"},
"east": {"uv": [0, 0, 16, 2], "texture": "#3"},
"east": {"uv": [16, 7, 10, 8], "texture": "#4"},
"south": {"uv": [0, 0, 16, 2], "texture": "#3"},
"west": {"uv": [0, 0, 16, 2], "texture": "#3"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#3"},
"down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#3"}
"west": {"uv": [10, 7, 16, 8], "texture": "#4"},
"up": {"uv": [8, 10, 16, 16], "texture": "#1_7"},
"down": {"uv": [16, 16, 8, 10], "texture": "#1_7"}
}
}
],

View file

@ -17,7 +17,7 @@
"south": {"uv": [1, 13, 15, 16], "texture": "#2"},
"west": {"uv": [1, 13, 15, 16], "texture": "#2"},
"up": {"uv": [1, 0, 15, 14], "texture": "#2"},
"down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"}
"down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#1"}
}
},
{

View file

@ -15,7 +15,7 @@
"faces": {
"north": {"uv": [1, 0, 15, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [1, 13, 15, 16], "rotation": 90, "texture": "#2"},
"south": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"},
"south": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#1"},
"west": {"uv": [1, 13, 15, 16], "rotation": 270, "texture": "#2"},
"up": {"uv": [1, 13, 15, 16], "texture": "#2"},
"down": {"uv": [1, 13, 15, 16], "rotation": 180, "texture": "#2"}

View file

@ -17,7 +17,7 @@
"south": {"uv": [1, 13, 15, 16], "texture": "#2"},
"west": {"uv": [1, 13, 15, 16], "texture": "#2"},
"up": {"uv": [1, 0, 15, 14], "texture": "#2"},
"down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"}
"down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#1"}
}
},
{

View file

@ -15,7 +15,7 @@
"faces": {
"north": {"uv": [1, 0, 15, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [1, 13, 15, 16], "rotation": 90, "texture": "#2"},
"south": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"},
"south": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#1"},
"west": {"uv": [1, 13, 15, 16], "rotation": 270, "texture": "#2"},
"up": {"uv": [1, 13, 15, 16], "texture": "#2"},
"down": {"uv": [1, 13, 15, 16], "rotation": 180, "texture": "#2"}

View file

@ -17,7 +17,7 @@
"south": {"uv": [1, 13, 15, 16], "texture": "#2"},
"west": {"uv": [1, 13, 15, 16], "texture": "#2"},
"up": {"uv": [1, 0, 15, 14], "texture": "#2"},
"down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"}
"down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#1"}
}
},
{

View file

@ -15,7 +15,7 @@
"faces": {
"north": {"uv": [1, 0, 15, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [1, 13, 15, 16], "rotation": 90, "texture": "#2"},
"south": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"},
"south": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#1"},
"west": {"uv": [1, 13, 15, 16], "rotation": 270, "texture": "#2"},
"up": {"uv": [1, 13, 15, 16], "texture": "#2"},
"down": {"uv": [1, 13, 15, 16], "rotation": 180, "texture": "#2"}

View file

@ -17,7 +17,7 @@
"south": {"uv": [1, 13, 15, 16], "texture": "#2"},
"west": {"uv": [1, 13, 15, 16], "texture": "#2"},
"up": {"uv": [1, 0, 15, 14], "texture": "#2"},
"down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"}
"down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#1"}
}
},
{

View file

@ -8,11 +8,11 @@
"elements": [
{
"from": [1, -5.75, -1.25],
"to": [7, 1.25, -0.25],
"to": [7, 1.25, 0.75],
"rotation": {"angle": 0, "axis": "y", "origin": [5, -0.75, -2.25]},
"faces": {
"north": {"uv": [0, 0, 6, 7], "texture": "#1"},
"up": {"uv": [0, 0, 6, 1], "texture": "#1"}
"north": {"uv": [0, 1, 6, 8], "texture": "#1"},
"up": {"uv": [0, 0, 6, 2], "texture": "#1"}
}
}
],

View file

@ -11,8 +11,8 @@
"to": [11, 1.25, 4.75],
"rotation": {"angle": 0, "axis": "y", "origin": [5, 0.25, -1.25]},
"faces": {
"north": {"uv": [7, 1, 13, 2], "texture": "#1"},
"up": {"uv": [7, 1, 13, 7], "texture": "#1"}
"north": {"uv": [0, 1, 6, 2], "texture": "#1"},
"up": {"uv": [0, 2, 6, 8], "texture": "#1"}
}
}
],

Binary file not shown.

Before

Width:  |  Height:  |  Size: 460 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 B

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

After

Width:  |  Height:  |  Size: 808 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 735 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 695 B

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 685 B

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 222 B

After

Width:  |  Height:  |  Size: 291 B