mirror of
https://github.com/TheClashFruit/CreatePissAndShit.git
synced 2024-09-19 09:26:46 +00:00
feat: mechanical toilet (#7)
This commit is contained in:
commit
c88c586304
|
@ -5,12 +5,15 @@ import me.shedaniel.autoconfig.AutoConfig;
|
|||
import me.shedaniel.autoconfig.ConfigHolder;
|
||||
import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer;
|
||||
import me.theclashfruit.pissnshit.config.MainConfig;
|
||||
import me.theclashfruit.pissnshit.criteria.ToiletUseTrigger;
|
||||
import me.theclashfruit.pissnshit.network.PissingPacket;
|
||||
import me.theclashfruit.pissnshit.registry.*;
|
||||
import me.theclashfruit.pissnshit.util.FlushedUtil;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory;
|
||||
import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry;
|
||||
import net.fabricmc.fabric.api.loot.v2.LootTableEvents;
|
||||
import net.minecraft.advancement.criterion.Criteria;
|
||||
import net.minecraft.loot.LootPool;
|
||||
import net.minecraft.loot.condition.RandomChanceLootCondition;
|
||||
import net.minecraft.loot.entry.ItemEntry;
|
||||
|
@ -27,6 +30,8 @@ public class PissAndShit implements ModInitializer {
|
|||
|
||||
public static final GameRules.Key<GameRules.BooleanRule> PISS_SOURCE_CONVERSION = GameRuleRegistry.register("pissSourceConversion", GameRules.Category.UPDATES, GameRuleFactory.createBooleanRule(false));
|
||||
|
||||
public static ToiletUseTrigger TOILET_USED = Criteria.register(new ToiletUseTrigger());
|
||||
|
||||
public static MainConfig CONFIG;
|
||||
public static ConfigHolder<MainConfig> CONFIG_HOLDER;
|
||||
|
||||
|
@ -37,6 +42,7 @@ public class PissAndShit implements ModInitializer {
|
|||
Fluids.init();
|
||||
Items.init();
|
||||
Blocks.init();
|
||||
Entities.init();
|
||||
|
||||
StatusEffects.init();
|
||||
Potions.init();
|
||||
|
@ -65,6 +71,8 @@ public class PissAndShit implements ModInitializer {
|
|||
}
|
||||
});
|
||||
|
||||
LOGGER.info(FlushedUtil.flushify("Hello, World!"));
|
||||
|
||||
// Register Packets
|
||||
PissingPacket.register();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,129 @@
|
|||
package me.theclashfruit.pissnshit.blocks.toilet;
|
||||
|
||||
import com.simibubi.create.content.equipment.wrench.IWrenchable;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
import me.theclashfruit.pissnshit.registry.Blocks;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.HorizontalFacingBlock;
|
||||
import net.minecraft.block.ShapeContext;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemPlacementContext;
|
||||
import net.minecraft.item.ItemUsageContext;
|
||||
import net.minecraft.state.StateManager;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.function.BooleanBiFunction;
|
||||
import net.minecraft.util.hit.BlockHitResult;
|
||||
import net.minecraft.util.shape.VoxelShape;
|
||||
import net.minecraft.util.shape.VoxelShapes;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldView;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
|
||||
import static me.theclashfruit.pissnshit.PissAndShit.TOILET_USED;
|
||||
import static net.minecraft.state.property.Properties.HORIZONTAL_FACING;
|
||||
|
||||
public class MechanicalToiletBlock extends HorizontalFacingBlock implements IBE<MechanicalToiletBlockEntity>, IWrenchable {
|
||||
public MechanicalToiletBlock(Settings properties) {
|
||||
super(properties);
|
||||
|
||||
setDefaultState(getDefaultState().with(HORIZONTAL_FACING, Direction.NORTH));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
|
||||
builder.add(HORIZONTAL_FACING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
||||
return super.getPlacementState(ctx).with(Properties.HORIZONTAL_FACING, ctx.getHorizontalPlayerFacing().getOpposite());
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext ctx) {
|
||||
Direction dir = state.get(FACING);
|
||||
VoxelShape shape = VoxelShapes.empty();
|
||||
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.1875, 0, 0.125, 0.8125, 0.125, 1), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.125, 0.125, 0.0625, 0.875, 0.25, 0.75), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.0625, 0.5, 0, 0.9375, 0.625, 0.125), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.0625, 0.5, 0.6875, 0.9375, 0.625, 0.8125), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.0625, 0.5, 0.125, 0.1875, 0.625, 0.6875), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.8125, 0.5, 0.125, 0.9375, 0.625, 0.6875), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.125, 0.125, 0.75, 0.875, 0.5, 0.984375), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.125, 0.5, 0.859375, 0.875, 1.1875, 0.984375), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.109375, 1.15625, 0.84375, 0.890625, 1.25, 1), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.15625, 0.625, 0.765625, 0.859375, 1.375, 0.828125), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.125, 0.25, 0.0625, 0.25, 0.5, 0.75), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.75, 0.25, 0.0625, 0.875, 0.5, 0.75), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.25, 0.25, 0.0625, 0.75, 0.5, 0.1875), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.25, 0.25, 0.625, 0.75, 0.5, 0.75), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.25, 0.25, 0.4375, 0.75, 0.3125, 0.625), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.25, 0.25, 0.1875, 0.375, 0.3125, 0.4375), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.625, 0.25, 0.1875, 0.75, 0.3125, 0.4375), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.375, 0.25, 0.1875, 0.4375, 0.328125, 0.4375), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.4375, 0.25, 0.375, 0.5625, 0.328125, 0.4375), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.5625, 0.25, 0.1875, 0.625, 0.328125, 0.4375), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.0625, 0.921875, 0.9375, 0.125, 1.046875, 0.96875), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.421875, 0.25, 0.171875, 0.578125, 0.296875, 0.375), BooleanBiFunction.OR);
|
||||
shape = VoxelShapes.combine(shape, VoxelShapes.cuboid(0.1875, 0.1875, 0.875, 0.8125, 0.8125, 1), BooleanBiFunction.OR);
|
||||
|
||||
return rotateShape(Direction.NORTH, dir, shape);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState updateAfterWrenched(BlockState newState, ItemUsageContext context) {
|
||||
return newState;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<MechanicalToiletBlockEntity> getBlockEntityClass() {
|
||||
return MechanicalToiletBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends MechanicalToiletBlockEntity> getBlockEntityType() {
|
||||
return Blocks.MECHANICAL_TOILET_BLOCK_ENTITY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
|
||||
if (!world.isClient) {
|
||||
if (player.hasVehicle()) {
|
||||
return ActionResult.PASS;
|
||||
}
|
||||
|
||||
MechanicalToiletSeatEntity seatEntity = MechanicalToiletSeatEntity.create(world, pos);
|
||||
|
||||
world.spawnEntity(seatEntity);
|
||||
player.startRiding(seatEntity);
|
||||
|
||||
TOILET_USED.trigger(player);
|
||||
|
||||
return ActionResult.SUCCESS;
|
||||
}
|
||||
|
||||
return ActionResult.PASS;
|
||||
}
|
||||
|
||||
public static VoxelShape rotateShape(Direction from, Direction to, VoxelShape shape) {
|
||||
VoxelShape[] buffer = new VoxelShape[]{ shape, VoxelShapes.empty() };
|
||||
|
||||
int times = (to.getHorizontal() - from.getHorizontal() + 4) % 4;
|
||||
|
||||
for (int i = 0; i < times; i++) {
|
||||
buffer[0].forEachBox((minX, minY, minZ, maxX, maxY, maxZ) -> buffer[1] = VoxelShapes.combine(buffer[1], VoxelShapes.cuboid(1-maxZ, minY, minX, 1-minZ, maxY, maxX), BooleanBiFunction.OR));
|
||||
|
||||
buffer[0] = buffer[1];
|
||||
buffer[1] = VoxelShapes.empty();
|
||||
}
|
||||
|
||||
return buffer[0];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
package me.theclashfruit.pissnshit.blocks.toilet;
|
||||
|
||||
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour;
|
||||
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.LangBuilder;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
import com.simibubi.create.infrastructure.config.AllConfigs;
|
||||
import io.github.fabricators_of_create.porting_lib.fluids.FluidStack;
|
||||
import io.github.fabricators_of_create.porting_lib.util.FluidTextUtil;
|
||||
import io.github.fabricators_of_create.porting_lib.util.FluidUnit;
|
||||
import me.theclashfruit.pissnshit.registry.Blocks;
|
||||
import me.theclashfruit.pissnshit.registry.Fluids;
|
||||
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants;
|
||||
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
|
||||
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
|
||||
import net.fabricmc.fabric.api.transfer.v1.storage.base.SidedStorageBlockEntity;
|
||||
import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TextColor;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
|
||||
import static com.simibubi.create.content.kinetics.BlockStressValues.getCapacity;
|
||||
|
||||
public class MechanicalToiletBlockEntity extends SmartBlockEntity implements IHaveGoggleInformation, SidedStorageBlockEntity {
|
||||
private SmartFluidTankBehaviour tank;
|
||||
|
||||
public MechanicalToiletBlockEntity(BlockPos pos, BlockState state) {
|
||||
super(Blocks.MECHANICAL_TOILET_BLOCK_ENTITY, pos, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
tank = new SmartFluidTankBehaviour(SmartFluidTankBehaviour.OUTPUT, this, 1, FluidConstants.BUCKET, true)
|
||||
.forbidInsertion();
|
||||
|
||||
behaviours.add(tank);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Storage<FluidVariant> getFluidStorage(@Nullable Direction face) {
|
||||
return tank.getCapability();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
if (world.isClient) return;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addToGoggleTooltip(List<Text> tooltip, boolean isPlayerSneaking) {
|
||||
Lang.translate("gui.goggles.basin_contents")
|
||||
.forGoggles(tooltip);
|
||||
|
||||
boolean isEmpty = true;
|
||||
|
||||
FluidUnit unit = AllConfigs.client().fluidUnitType.get();
|
||||
LangBuilder unitSuffix = Lang.translate(unit.getTranslationKey());
|
||||
boolean simplify = AllConfigs.client().simplifyFluidUnit.get();
|
||||
|
||||
for (SmartFluidTankBehaviour.TankSegment tank : tank.getTanks()) {
|
||||
FluidStack fluidStack = tank.getTank().getFluid();
|
||||
|
||||
if (fluidStack.isEmpty())
|
||||
continue;
|
||||
|
||||
Lang.text("")
|
||||
.add(Lang.fluidName(fluidStack)
|
||||
.add(Lang.text(" "))
|
||||
.style(Formatting.GRAY)
|
||||
.add(Lang.text(FluidTextUtil.getUnicodeMillibuckets(fluidStack.getAmount(), unit, simplify))
|
||||
.add(unitSuffix)
|
||||
.style(Formatting.BLUE)))
|
||||
.forGoggles(tooltip, 1);
|
||||
|
||||
isEmpty = false;
|
||||
}
|
||||
|
||||
if (isEmpty)
|
||||
tooltip.remove(0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addPiss(int amount) {
|
||||
for (SmartFluidTankBehaviour.TankSegment tank : tank.getTanks()) {
|
||||
tank.getTank().setFluid(new FluidStack(FluidVariant.of(Fluids.STILL_PISS), tank.getTank().getFluid().getAmount() + amount));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package me.theclashfruit.pissnshit.blocks.toilet;
|
||||
|
||||
import me.theclashfruit.pissnshit.mixin.PlayerEntityMixin;
|
||||
import me.theclashfruit.pissnshit.registry.Entities;
|
||||
import me.theclashfruit.pissnshit.util.PlayerEntityUtil;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.nbt.NbtCompound;
|
||||
import net.minecraft.network.packet.Packet;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class MechanicalToiletSeatEntity extends Entity {
|
||||
public BlockPos toiletPos;
|
||||
|
||||
public MechanicalToiletSeatEntity(EntityType<? extends MechanicalToiletSeatEntity> type, World world) {
|
||||
super(type, world);
|
||||
|
||||
this.noClip = true; // Allows entity to ignore collisions
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initDataTracker() {}
|
||||
|
||||
@Override
|
||||
protected void readCustomDataFromNbt(NbtCompound nbt) {}
|
||||
|
||||
@Override
|
||||
protected void writeCustomDataToNbt(NbtCompound nbt) {}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
Block block = getWorld().getBlockState(getBlockPos()).getBlock();
|
||||
|
||||
if (!(block instanceof MechanicalToiletBlock)) {
|
||||
discard();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!getWorld().isClient) {
|
||||
if (getFirstPassenger() == null || !(getFirstPassenger() instanceof PlayerEntity) || !(getWorld().getBlockState(getBlockPos()).getBlock() instanceof MechanicalToiletBlock)) {
|
||||
discard();
|
||||
}
|
||||
|
||||
if (getFirstPassenger() instanceof PlayerEntity player) {
|
||||
((PlayerEntityUtil) player).getPissManager().pissOnToilet(player, ((MechanicalToiletBlock) block), toiletPos);
|
||||
((PlayerEntityUtil) player).getShitManager().shitOnToilet(player, ((MechanicalToiletBlock) block), toiletPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static MechanicalToiletSeatEntity create(World world, BlockPos pos) {
|
||||
MechanicalToiletSeatEntity seatEntity = new MechanicalToiletSeatEntity(Entities.MECHANICAL_TOILET_SEAT_ENTITY, world);
|
||||
|
||||
seatEntity.updatePosition(pos.getX() + 0.45, pos.getY() + 0.45, pos.getZ() + 0.45);
|
||||
seatEntity.toiletPos = pos;
|
||||
|
||||
return seatEntity;
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
package me.theclashfruit.pissnshit.client;
|
||||
|
||||
import me.theclashfruit.pissnshit.client.gui.hud.PissAndShitHudOverlay;
|
||||
import me.theclashfruit.pissnshit.client.renderer.MechanicalToiletSeatEntityRenderer;
|
||||
import me.theclashfruit.pissnshit.network.PissSyncPacket;
|
||||
import me.theclashfruit.pissnshit.network.PissingPacket;
|
||||
import me.theclashfruit.pissnshit.network.ShitSyncPacket;
|
||||
import me.theclashfruit.pissnshit.registry.Entities;
|
||||
import me.theclashfruit.pissnshit.registry.Fluids;
|
||||
import me.theclashfruit.pissnshit.client.gui.screen.DisclaimerScreen;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
|
@ -13,6 +15,7 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
|||
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
|
||||
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry;
|
||||
import net.fabricmc.fabric.api.client.render.fluid.v1.SimpleFluidRenderHandler;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
|
@ -36,6 +39,8 @@ public class PissAndShitClient implements ClientModInitializer {
|
|||
|
||||
BlockRenderLayerMap.INSTANCE.putFluids(RenderLayer.getTranslucent(), Fluids.STILL_PISS, Fluids.FLOWING_PISS);
|
||||
|
||||
EntityRendererRegistry.register(Entities.MECHANICAL_TOILET_SEAT_ENTITY, MechanicalToiletSeatEntityRenderer::new);
|
||||
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
PissAndShitHudOverlay hudOverlay = new PissAndShitHudOverlay(client);
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package me.theclashfruit.pissnshit.client.renderer;
|
||||
|
||||
import me.theclashfruit.pissnshit.blocks.toilet.MechanicalToiletSeatEntity;
|
||||
import net.minecraft.client.render.entity.EntityRenderer;
|
||||
import net.minecraft.client.render.entity.EntityRendererFactory;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class MechanicalToiletSeatEntityRenderer extends EntityRenderer<MechanicalToiletSeatEntity> {
|
||||
public MechanicalToiletSeatEntityRenderer(EntityRendererFactory.Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier getTexture(MechanicalToiletSeatEntity entity) {
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package me.theclashfruit.pissnshit.criteria;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.mojang.serialization.Codec;
|
||||
import net.minecraft.advancement.criterion.AbstractCriterion;
|
||||
import net.minecraft.advancement.criterion.AbstractCriterionConditions;
|
||||
import net.minecraft.advancement.criterion.CriterionConditions;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer;
|
||||
import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer;
|
||||
import net.minecraft.predicate.entity.LootContextPredicate;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import static me.theclashfruit.pissnshit.PissAndShit.MOD_ID;
|
||||
|
||||
public class ToiletUseTrigger extends AbstractCriterion<ToiletUseTrigger.Conditions> {
|
||||
public static final Identifier ID = new Identifier(MOD_ID, "toilet_used");
|
||||
|
||||
@Override
|
||||
protected Conditions conditionsFromJson(JsonObject obj, LootContextPredicate playerPredicate, AdvancementEntityPredicateDeserializer predicateDeserializer) {
|
||||
return new Conditions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier getId() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
public void trigger(PlayerEntity player) {
|
||||
trigger((ServerPlayerEntity) player, Conditions::requirementsMet);
|
||||
}
|
||||
|
||||
public static class Conditions extends AbstractCriterionConditions {
|
||||
public Conditions() {
|
||||
super(ID, LootContextPredicate.EMPTY);
|
||||
}
|
||||
|
||||
boolean requirementsMet() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package me.theclashfruit.pissnshit.mixin;
|
||||
|
||||
import me.theclashfruit.pissnshit.util.FlushedUtil;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(MinecraftClient.class)
|
||||
public class MinecraftClientMixin {
|
||||
@Inject(method = "tick", at = @At("TAIL"))
|
||||
private void tick(CallbackInfo info) {
|
||||
FlushedUtil.tick();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package me.theclashfruit.pissnshit.mixin;
|
||||
|
||||
import me.theclashfruit.pissnshit.util.FlushedUtil;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.text.OrderedText;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
|
||||
import static me.theclashfruit.pissnshit.PissAndShit.LOGGER;
|
||||
|
||||
@Mixin(TextRenderer.class)
|
||||
public class TextRendererMixin {
|
||||
@ModifyVariable(
|
||||
method = "drawLayer(Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/font/TextRenderer$TextLayerType;II)F",
|
||||
at = @At(
|
||||
value = "HEAD",
|
||||
ordinal = 0
|
||||
),
|
||||
argsOnly = true
|
||||
)
|
||||
private String modifyString(String text) {
|
||||
if (FlushedUtil.isEnabled())
|
||||
return FlushedUtil.flushify(text);
|
||||
else
|
||||
return text;
|
||||
}
|
||||
|
||||
/* TODO: Somehow make it so I can use the flushed emoji with this one too...
|
||||
@ModifyVariable(
|
||||
method = "drawLayer(Lnet/minecraft/text/OrderedText;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/font/TextRenderer$TextLayerType;II)F",
|
||||
at = @At(
|
||||
value = "HEAD",
|
||||
ordinal = 0
|
||||
),
|
||||
argsOnly = true
|
||||
)
|
||||
private OrderedText modifyString(OrderedText text) {
|
||||
if (FlushedUtil.isEnabled())
|
||||
return new FlushedOrderedText(text);
|
||||
else
|
||||
return text;
|
||||
}
|
||||
*/
|
||||
}
|
|
@ -1,14 +1,27 @@
|
|||
package me.theclashfruit.pissnshit.registry;
|
||||
|
||||
import com.simibubi.create.content.kinetics.BlockStressDefaults;
|
||||
import com.simibubi.create.foundation.data.AssetLookup;
|
||||
import com.simibubi.create.foundation.data.BlockStateGen;
|
||||
import com.simibubi.create.foundation.data.CreateRegistrate;
|
||||
import com.simibubi.create.foundation.data.SharedProperties;
|
||||
import com.tterrag.registrate.util.entry.BlockEntityEntry;
|
||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||
import me.theclashfruit.pissnshit.blocks.toilet.MechanicalToiletBlock;
|
||||
import me.theclashfruit.pissnshit.blocks.toilet.MechanicalToiletBlockEntity;
|
||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.piston.PistonBehavior;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.fluid.FlowableFluid;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import static com.simibubi.create.foundation.data.ModelGen.customItemModel;
|
||||
import static com.simibubi.create.foundation.data.TagGen.axeOrPickaxe;
|
||||
import static me.theclashfruit.pissnshit.PissAndShit.MOD_ID;
|
||||
import static me.theclashfruit.pissnshit.registry.Fluids.STILL_PISS;
|
||||
|
||||
|
@ -25,5 +38,13 @@ public class Blocks {
|
|||
.luminance(CandleBlock.STATE_TO_LUMINANCE)
|
||||
.pistonBehavior(PistonBehavior.DESTROY)));
|
||||
|
||||
public static final CreateRegistrate REGISTRATE = CreateRegistrate.create(MOD_ID);
|
||||
|
||||
public static final MechanicalToiletBlock MECHANICAL_TOILET = Registry.register(Registries.BLOCK, new Identifier(MOD_ID, "mechanical_toilet"), new MechanicalToiletBlock(AbstractBlock.Settings.create()
|
||||
.mapColor(MapColor.ORANGE)
|
||||
));
|
||||
|
||||
public static final BlockEntityType<MechanicalToiletBlockEntity> MECHANICAL_TOILET_BLOCK_ENTITY = Registry.register(Registries.BLOCK_ENTITY_TYPE, new Identifier(MOD_ID, "mechanical_toilet_block_entity"), BlockEntityType.Builder.create(MechanicalToiletBlockEntity::new, MECHANICAL_TOILET).build(null));
|
||||
|
||||
public static void init() {}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package me.theclashfruit.pissnshit.registry;
|
||||
|
||||
import me.theclashfruit.pissnshit.blocks.toilet.MechanicalToiletSeatEntity;
|
||||
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
|
||||
import net.minecraft.entity.EntityDimensions;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.SpawnGroup;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import static me.theclashfruit.pissnshit.PissAndShit.MOD_ID;
|
||||
|
||||
public class Entities {
|
||||
public static final EntityType<MechanicalToiletSeatEntity> MECHANICAL_TOILET_SEAT_ENTITY = Registry.register(
|
||||
Registries.ENTITY_TYPE,
|
||||
new Identifier(MOD_ID, "mechanical_toilet_seat_entity"),
|
||||
FabricEntityTypeBuilder.<MechanicalToiletSeatEntity>create(SpawnGroup.MISC, MechanicalToiletSeatEntity::new)
|
||||
.dimensions(EntityDimensions.fixed(0.001f, 0.001f))
|
||||
.build()
|
||||
);
|
||||
|
||||
public static void init() {}
|
||||
}
|
|
@ -23,8 +23,13 @@ public class ItemGroups {
|
|||
entries.add(Items.SHIT);
|
||||
entries.add(Items.HOLY_SHIT);
|
||||
|
||||
// 😳
|
||||
entries.add(Items.FLUSHED);
|
||||
|
||||
entries.add(Items.SHIT_CANDLE);
|
||||
entries.add(Blocks.SHIT_BLOCK);
|
||||
entries.add(Items.SHIT_BLOCK);
|
||||
|
||||
entries.add(Items.MECHANICAL_TOILET);
|
||||
})
|
||||
.build();
|
||||
|
||||
|
|
|
@ -76,6 +76,15 @@ public class Items {
|
|||
)
|
||||
);
|
||||
|
||||
public static Item FLUSHED = register(
|
||||
"flushed",
|
||||
new Item(
|
||||
new Item
|
||||
.Settings()
|
||||
.rarity(Rarity.EPIC)
|
||||
)
|
||||
);
|
||||
|
||||
public static Item SHIT_BLOCK = register(
|
||||
"shit_block",
|
||||
new BlockItem(
|
||||
|
@ -91,6 +100,14 @@ public class Items {
|
|||
)
|
||||
);
|
||||
|
||||
public static Item MECHANICAL_TOILET = register(
|
||||
"mechanical_toilet",
|
||||
new BlockItem(
|
||||
Blocks.MECHANICAL_TOILET,
|
||||
new Item.Settings()
|
||||
)
|
||||
);
|
||||
|
||||
public static void init() {}
|
||||
|
||||
private static Item register(String id, Item item) {
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package me.theclashfruit.pissnshit.util;
|
||||
|
||||
import me.theclashfruit.pissnshit.registry.Items;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class FlushedUtil {
|
||||
private static boolean isEnabled = false;
|
||||
|
||||
public static void tick() {
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
|
||||
if (client.player == null) {
|
||||
isEnabled = false;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
isEnabled = client.player.getInventory().contains(
|
||||
new ItemStack(Items.FLUSHED)
|
||||
);
|
||||
}
|
||||
|
||||
public static String flushify(String input) {
|
||||
input = Pattern.compile("([A-Za-zÀ-ÖØ-öø-ÿőű]+)").matcher(input).replaceAll(m -> {
|
||||
String group = m.group();
|
||||
|
||||
return "😳".repeat(group.length());
|
||||
});
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
public static boolean isEnabled() {
|
||||
return isEnabled;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
package me.theclashfruit.pissnshit.util;
|
||||
|
||||
import me.theclashfruit.pissnshit.blocks.toilet.MechanicalToiletBlock;
|
||||
import me.theclashfruit.pissnshit.blocks.toilet.MechanicalToiletBlockEntity;
|
||||
import me.theclashfruit.pissnshit.network.PissSyncPacket;
|
||||
import me.theclashfruit.pissnshit.registry.DamageTypes;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
|
@ -7,6 +9,9 @@ import net.minecraft.nbt.NbtCompound;
|
|||
import net.minecraft.nbt.NbtElement;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Position;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import static me.theclashfruit.pissnshit.PissAndShit.CONFIG;
|
||||
|
||||
|
@ -78,6 +83,21 @@ public class PissManager {
|
|||
}
|
||||
}
|
||||
|
||||
public void pissOnToilet(PlayerEntity player, MechanicalToiletBlock toiletBlock, BlockPos toiletPos) {
|
||||
World world = player.getWorld();
|
||||
|
||||
if (pissLevel >= 1) {
|
||||
this.pissLevel -= 1;
|
||||
|
||||
if (world.getBlockEntity(toiletPos) instanceof MechanicalToiletBlockEntity toiletEntity) {
|
||||
toiletEntity.addPiss(10);
|
||||
}
|
||||
}
|
||||
|
||||
// Sync Piss Level
|
||||
PissSyncPacket.sendToClient((ServerPlayerEntity) player, this.pissLevel);
|
||||
}
|
||||
|
||||
public void readNbt(NbtCompound nbt) {
|
||||
if (nbt.contains("pissLevel", NbtElement.NUMBER_TYPE)) {
|
||||
this.pissLevel = nbt.getInt("pissLevel");
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package me.theclashfruit.pissnshit.util;
|
||||
|
||||
import me.theclashfruit.pissnshit.blocks.toilet.MechanicalToiletBlock;
|
||||
import me.theclashfruit.pissnshit.network.ShitSyncPacket;
|
||||
import me.theclashfruit.pissnshit.registry.DamageTypes;
|
||||
import me.theclashfruit.pissnshit.registry.StatusEffects;
|
||||
|
@ -12,6 +13,7 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.nbt.NbtCompound;
|
||||
import net.minecraft.nbt.NbtElement;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
import static me.theclashfruit.pissnshit.PissAndShit.CONFIG;
|
||||
import static me.theclashfruit.pissnshit.PissAndShit.LOGGER;
|
||||
|
@ -77,6 +79,15 @@ public class ShitManager {
|
|||
}
|
||||
}
|
||||
|
||||
public void shitOnToilet(PlayerEntity player, MechanicalToiletBlock toiletBlock, BlockPos toiletPos) {
|
||||
if (shitLevel >= 1) {
|
||||
this.shitLevel -= 1;
|
||||
}
|
||||
|
||||
// Sync Shit Level
|
||||
ShitSyncPacket.sendToClient((ServerPlayerEntity) player, this.shitLevel);
|
||||
}
|
||||
|
||||
public void readNbt(NbtCompound nbt) {
|
||||
if (nbt.contains("shitLevel", NbtElement.NUMBER_TYPE)) {
|
||||
this.shitTickTimer = nbt.getInt("shitTickTimer");
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north": {
|
||||
"model": "pissnshit:block/mechanical_toilet"
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "pissnshit:block/mechanical_toilet",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "pissnshit:block/mechanical_toilet",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "pissnshit:block/mechanical_toilet",
|
||||
"y": 180
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,13 +5,15 @@
|
|||
"item.pissnshit.shit": "Shit",
|
||||
"item.pissnshit.holy_shit": "Holy Shit",
|
||||
|
||||
"item.pissnshit.flushed": "Flushed",
|
||||
|
||||
"block.pissnshit.piss": "Piss",
|
||||
"block.pissnshit.shit_block": "Shit Block",
|
||||
|
||||
"block.pissnshit.shit_candle": "Shit Candle",
|
||||
"block.pissnshit.shit_candle.tooltip": "§8§oIt smells like shit...",
|
||||
|
||||
"block.pissnshit.mechanical_sanctifier": "Mechanical Sanctifier",
|
||||
"block.pissnshit.mechanical_toilet": "Mechanical Toilet",
|
||||
|
||||
"effect.pissnshit.diarrhea": "Diarrhea",
|
||||
|
||||
|
@ -38,6 +40,11 @@
|
|||
"advancements.pissnshit.piss_cubed.title": "Piss³",
|
||||
"advancements.pissnshit.piss_cubed.description": "Obtain a bucket of piss.",
|
||||
|
||||
"advancements.pissnshit.mechanical_marvel.title": "Mechanical Marvel",
|
||||
"advancements.pissnshit.mechanical_marvel.description": "Craft a mechanical toilet.",
|
||||
"advancements.pissnshit.flushed.title": "Flush(ed)",
|
||||
"advancements.pissnshit.flushed.description": "Use your newly operational mechanical toilet.",
|
||||
|
||||
"death.attack.fullOfPiss": "%1$s got full of piss.",
|
||||
"death.attack.fullOfShit": "%1$s got full of shit.",
|
||||
|
||||
|
|
|
@ -1,330 +1,361 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "minecraft:block/water_still",
|
||||
"1": "create:block/pipes",
|
||||
"missing": "minecraft:block/copper_block",
|
||||
"particle": "minecraft:block/copper_block"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [3, 0, 2],
|
||||
"to": [13, 2, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 0]},
|
||||
"color": 5,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 10, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 10, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 10, 14], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 10, 14], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 2, 1],
|
||||
"to": [14, 4, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 2, 1]},
|
||||
"color": 3,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 12, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 11, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 12, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 11, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 12, 11], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 12, 11], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 8, 0],
|
||||
"to": [15, 10, 2],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 0]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 14, 2], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 8, 11],
|
||||
"to": [15, 10, 13],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 11]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 14, 2], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 8, 2],
|
||||
"to": [3, 10, 11],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [3, 8, 0]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 9, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 9, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 9, 2], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 9, 2], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [13, 8, 2],
|
||||
"to": [15, 10, 11],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 0]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 9, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 9, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 9, 2], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 9, 2], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 2, 12],
|
||||
"to": [14, 8, 15.75],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [12, 6, 13]},
|
||||
"color": 1,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 12, 6], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 3.75, 6], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 12, 6], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 3.75, 6], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 12, 3.75], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 12, 3.75], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 8, 13.75],
|
||||
"to": [14, 19, 15.75],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 8, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [2, 2, 14, 13], "texture": "#missing"},
|
||||
"east": {"uv": [0, 2, 2, 13], "texture": "#missing"},
|
||||
"south": {"uv": [2, 2, 14, 13], "texture": "#missing"},
|
||||
"west": {"uv": [14, 2, 16, 13], "texture": "#missing"},
|
||||
"up": {"uv": [2, 0, 14, 2], "texture": "#missing"},
|
||||
"down": {"uv": [2, 13, 14, 15], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.75, 18.5, 13.5],
|
||||
"to": [14.25, 20, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 18, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 12.5, 1.5], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2.5, 1.5], "texture": "#missing"},
|
||||
"south": {"uv": [1.75, 0.5, 14.25, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2.5, 1.5], "texture": "#missing"},
|
||||
"up": {"uv": [1.75, 7, 14.25, 9.5], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 12.5, 2.5], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2.5, 10, 12.25],
|
||||
"to": [13.75, 22, 13.25],
|
||||
"rotation": {"angle": 0, "axis": "x", "origin": [3, 10, 12.25]},
|
||||
"color": 5,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 11.25, 12], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 1, 12], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 11.25, 12], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 1, 12], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 11.25, 1], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 11.25, 1], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 4, 1],
|
||||
"to": [4, 8, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 6, 1]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 11, 4], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 11, 4], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 11], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 11], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [12, 4, 1],
|
||||
"to": [14, 8, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [12, 6, 1]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 11, 4], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 11, 4], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 11], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 11], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 4, 1],
|
||||
"to": [12, 8, 3],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [12, 6, 1]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 8, 4], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 8, 4], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 8], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 4, 10],
|
||||
"to": [12, 8, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [12, 6, 10]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 8, 4], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 8, 4], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 8], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 4, 7],
|
||||
"to": [12, 5, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 8]},
|
||||
"color": 7,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 8, 1], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 3, 1], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 8, 1], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 3, 1], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 8, 3], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 8, 3], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 4, 3],
|
||||
"to": [6, 5, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 5]},
|
||||
"color": 7,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 1], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 4, 1], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 1], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 4, 1], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 4], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [10, 4, 3],
|
||||
"to": [12, 5, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 5]},
|
||||
"color": 7,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 1], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 4, 1], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 1], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 4, 1], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 4], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6, 4, 3],
|
||||
"to": [7, 5.25, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 4, 5]},
|
||||
"color": 9,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 4, 1.25], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 4, 1.25], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 1, 4], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 1, 4], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 4, 6],
|
||||
"to": [9, 5.25, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 6]},
|
||||
"color": 9,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 1.25], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 1.25], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 1, 2], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 1, 2], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 4, 3],
|
||||
"to": [10, 5.25, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 4, 5]},
|
||||
"color": 9,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 4, 1.25], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 4, 1.25], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 1, 4], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 1, 4], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 14.75, 15],
|
||||
"to": [2, 16.75, 15.5],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 14.75, 14.25]},
|
||||
"color": 6,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 1, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 0.5, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 1, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 0.5, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 1, 0.5], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 1, 0.5], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "water",
|
||||
"from": [6.75, 4, 2.75],
|
||||
"to": [9.25, 4.75, 6],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 4, 2.75, 13], "rotation": 90, "texture": "#0"},
|
||||
"east": {"uv": [3, 2, 11, 3.75], "texture": "#0"},
|
||||
"south": {"uv": [3, 12, 12, 13.75], "texture": "#0"},
|
||||
"west": {"uv": [12, 4, 13.75, 12], "rotation": 270, "texture": "#0"},
|
||||
"up": {"uv": [3, 4, 6, 8], "texture": "#0"},
|
||||
"down": {"uv": [3, 4, 6, 8], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3, 3, 14],
|
||||
"to": [13, 13, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 28, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [6, 11, 11, 16], "texture": "#1"},
|
||||
"east": {"uv": [11.5, 18.5, 10.5, 11], "texture": "#1"},
|
||||
"south": {"uv": [11, 11, 16, 16], "texture": "#1"},
|
||||
"west": {"uv": [11.5, 18.5, 10.5, 11], "texture": "#1"},
|
||||
"up": {"uv": [11.5, 18.5, 10.5, 11], "texture": "#1"},
|
||||
"down": {"uv": [11.5, 18.5, 10.5, 11], "texture": "#1"}
|
||||
}
|
||||
}
|
||||
]
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "minecraft:block/water_still",
|
||||
"1": "create:block/pipes",
|
||||
"missing": "minecraft:block/copper_block",
|
||||
"particle": "minecraft:block/copper_block"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [3, 0, 2],
|
||||
"to": [13, 2, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 0]},
|
||||
"color": 5,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 10, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 10, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 10, 14], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 10, 14], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 2, 1],
|
||||
"to": [14, 4, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 2, 1]},
|
||||
"color": 3,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 12, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 11, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 12, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 11, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 12, 11], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 12, 11], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 8, 0],
|
||||
"to": [15, 10, 2],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 0]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 14, 2], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 8, 11],
|
||||
"to": [15, 10, 13],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 11]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 14, 2], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 14, 2], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 8, 2],
|
||||
"to": [3, 10, 11],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [3, 8, 0]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 9, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 9, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 9, 2], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 9, 2], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [13, 8, 2],
|
||||
"to": [15, 10, 11],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 0]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 9, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 9, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 9, 2], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 9, 2], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 2, 12],
|
||||
"to": [14, 8, 15.75],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [12, 6, 13]},
|
||||
"color": 1,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 12, 6], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 3.75, 6], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 12, 6], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 3.75, 6], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 12, 3.75], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 12, 3.75], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 8, 13.75],
|
||||
"to": [14, 19, 15.75],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 8, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [2, 2, 14, 13], "texture": "#missing"},
|
||||
"east": {"uv": [0, 2, 2, 13], "texture": "#missing"},
|
||||
"south": {"uv": [2, 2, 14, 13], "texture": "#missing"},
|
||||
"west": {"uv": [14, 2, 16, 13], "texture": "#missing"},
|
||||
"up": {"uv": [2, 0, 14, 2], "texture": "#missing"},
|
||||
"down": {"uv": [2, 13, 14, 15], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.75, 18.5, 13.5],
|
||||
"to": [14.25, 20, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 18, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 12.5, 1.5], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2.5, 1.5], "texture": "#missing"},
|
||||
"south": {"uv": [1.75, 0.5, 14.25, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2.5, 1.5], "texture": "#missing"},
|
||||
"up": {"uv": [1.75, 7, 14.25, 9.5], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 12.5, 2.5], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2.5, 10, 12.25],
|
||||
"to": [13.75, 22, 13.25],
|
||||
"rotation": {"angle": 0, "axis": "x", "origin": [3, 10, 12.25]},
|
||||
"color": 5,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 11.25, 12], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 1, 12], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 11.25, 12], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 1, 12], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 11.25, 1], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 11.25, 1], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 4, 1],
|
||||
"to": [4, 8, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 6, 1]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 11, 4], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 11, 4], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 11], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 11], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [12, 4, 1],
|
||||
"to": [14, 8, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [12, 6, 1]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 11, 4], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 11, 4], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 11], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 11], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 4, 1],
|
||||
"to": [12, 8, 3],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [12, 6, 1]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 8, 4], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 8, 4], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 8], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 4, 10],
|
||||
"to": [12, 8, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [12, 6, 10]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 8, 4], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 8, 4], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 8], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 4, 7],
|
||||
"to": [12, 5, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 8]},
|
||||
"color": 7,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 8, 1], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 3, 1], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 8, 1], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 3, 1], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 8, 3], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 8, 3], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 4, 3],
|
||||
"to": [6, 5, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 5]},
|
||||
"color": 7,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 1], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 4, 1], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 1], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 4, 1], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 4], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [10, 4, 3],
|
||||
"to": [12, 5, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 5]},
|
||||
"color": 7,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 1], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 4, 1], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 1], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 4, 1], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 2, 4], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 2, 4], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6, 4, 3],
|
||||
"to": [7, 5.25, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 4, 5]},
|
||||
"color": 9,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 4, 1.25], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 4, 1.25], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 1, 4], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 1, 4], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 4, 6],
|
||||
"to": [9, 5.25, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 6]},
|
||||
"color": 9,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 1.25], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 2, 1.25], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 1, 2], "rotation": 90, "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 1, 2], "rotation": 270, "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 4, 3],
|
||||
"to": [10, 5.25, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 4, 5]},
|
||||
"color": 9,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 4, 1.25], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 1, 1.25], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 4, 1.25], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 1, 4], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 1, 4], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 14.75, 15],
|
||||
"to": [2, 16.75, 15.5],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 14.75, 14.25]},
|
||||
"color": 6,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 1, 2], "texture": "#missing"},
|
||||
"east": {"uv": [0, 0, 0.5, 2], "texture": "#missing"},
|
||||
"south": {"uv": [0, 0, 1, 2], "texture": "#missing"},
|
||||
"west": {"uv": [0, 0, 0.5, 2], "texture": "#missing"},
|
||||
"up": {"uv": [0, 0, 1, 0.5], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 1, 0.5], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "water",
|
||||
"from": [6.75, 4, 2.75],
|
||||
"to": [9.25, 4.75, 6],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 4, 2.75, 13], "rotation": 90, "texture": "#0"},
|
||||
"east": {"uv": [3, 2, 11, 3.75], "texture": "#0"},
|
||||
"south": {"uv": [3, 12, 12, 13.75], "texture": "#0"},
|
||||
"west": {"uv": [12, 4, 13.75, 12], "rotation": 270, "texture": "#0"},
|
||||
"up": {"uv": [3, 4, 6, 8], "texture": "#0"},
|
||||
"down": {"uv": [3, 4, 6, 8], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3, 3, 14],
|
||||
"to": [13, 13, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 28, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [6, 11, 11, 16], "texture": "#1"},
|
||||
"east": {"uv": [11.5, 18.5, 10.5, 11], "texture": "#1"},
|
||||
"south": {"uv": [11, 11, 16, 16], "texture": "#1"},
|
||||
"west": {"uv": [11.5, 18.5, 10.5, 11], "texture": "#1"},
|
||||
"up": {"uv": [11.5, 18.5, 10.5, 11], "texture": "#1"},
|
||||
"down": {"uv": [11.5, 18.5, 10.5, 11], "texture": "#1"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 4, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 4, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"ground": {
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [28, 130, -1],
|
||||
"translation": [0, -1.25, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"head": {
|
||||
"translation": [0, 14, 0]
|
||||
},
|
||||
"fixed": {
|
||||
"translation": [0, 0, -3],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "pissnshit:item/flushed"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "pissnshit:block/mechanical_toilet"
|
||||
}
|
BIN
src/main/resources/assets/pissnshit/textures/item/flushed.png
Normal file
BIN
src/main/resources/assets/pissnshit/textures/item/flushed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 761 B |
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"display": {
|
||||
"icon": {
|
||||
"item": "pissnshit:flushed"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.pissnshit.flushed.title"
|
||||
},
|
||||
"description": {
|
||||
"translate": "advancements.pissnshit.flushed.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"show_toast": true,
|
||||
"announce_to_chat": true,
|
||||
"hidden": false
|
||||
},
|
||||
"parent": "minecraft:pissnshit/mechanical_marvel",
|
||||
"criteria": {
|
||||
"mechanical_toilet": {
|
||||
"trigger": "pissnshit:toilet_used"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"mechanical_toilet"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"display": {
|
||||
"icon": {
|
||||
"item": "pissnshit:mechanical_toilet"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.pissnshit.mechanical_marvel.title"
|
||||
},
|
||||
"description": {
|
||||
"translate": "advancements.pissnshit.mechanical_marvel.description"
|
||||
},
|
||||
"frame": "goal",
|
||||
"show_toast": true,
|
||||
"announce_to_chat": true,
|
||||
"hidden": false
|
||||
},
|
||||
"parent": "minecraft:pissnshit/root",
|
||||
"criteria": {
|
||||
"mechanical_toilet": {
|
||||
"conditions": {
|
||||
"recipe_id": "pissnshit:mechanical_toilet"
|
||||
},
|
||||
"trigger": "minecraft:recipe_crafted"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"mechanical_toilet"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
" V ",
|
||||
"CTL",
|
||||
" # "
|
||||
],
|
||||
"key": {
|
||||
"V": {
|
||||
"item": "create:fluid_valve"
|
||||
},
|
||||
"C": {
|
||||
"item": "create:cogwheel"
|
||||
},
|
||||
"T": {
|
||||
"item": "create:fluid_tank"
|
||||
},
|
||||
"L": {
|
||||
"item": "minecraft:lever"
|
||||
},
|
||||
"#": {
|
||||
"item": "create:copper_casing"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "pissnshit:mechanical_toilet",
|
||||
"count": 2
|
||||
}
|
||||
}
|
|
@ -8,7 +8,9 @@
|
|||
"PlayerEntityMixin"
|
||||
],
|
||||
"client": [
|
||||
"InGameHudMixin"
|
||||
"InGameHudMixin",
|
||||
"MinecraftClientMixin",
|
||||
"TextRendererMixin"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
|
Loading…
Reference in a new issue