kinda fix screen configurator, tweak some code
This commit is contained in:
parent
64cfb61a27
commit
52f7695c1c
|
|
@ -11,8 +11,6 @@ import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer;
|
|||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.advancements.Advancement;
|
||||
import net.minecraft.advancements.CriteriaTriggers;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
|
@ -25,11 +23,7 @@ import net.minecraft.world.entity.Entity;
|
|||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
import net.minecraftforge.client.event.ClientChatEvent;
|
||||
import net.minecraftforge.client.event.RenderHighlightEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
||||
import net.minecraftforge.event.ServerChatEvent;
|
||||
|
|
@ -46,18 +40,19 @@ import net.minecraftforge.fml.loading.FMLEnvironment;
|
|||
import net.minecraftforge.network.PacketDistributor;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.montoyo.wd.block.BlockScreen;
|
||||
import net.montoyo.wd.client.ClientProxy;
|
||||
import net.montoyo.wd.config.ModConfig;
|
||||
import net.montoyo.wd.controls.ScreenControlRegistry;
|
||||
import net.montoyo.wd.core.*;
|
||||
import net.montoyo.wd.entity.TileEntityScreen;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.init.ItemInit;
|
||||
import net.montoyo.wd.init.TileInit;
|
||||
import net.montoyo.wd.miniserv.server.Server;
|
||||
import net.montoyo.wd.net.WDNetworkRegistry;
|
||||
import net.montoyo.wd.net.client_bound.S2CMessageServerInfo;
|
||||
import net.montoyo.wd.utilities.*;
|
||||
import net.montoyo.wd.utilities.DistSafety;
|
||||
import net.montoyo.wd.utilities.Log;
|
||||
import net.montoyo.wd.utilities.Util;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.MalformedURLException;
|
||||
|
|
@ -172,7 +167,10 @@ public class WebDisplays {
|
|||
ItemInit.registerComponents();
|
||||
TileInit.init(bus);
|
||||
|
||||
MinecraftForge.EVENT_BUS.addListener(WebDisplays::onDrawSelection);
|
||||
if (FMLEnvironment.dist.isClient()) {
|
||||
// proxies are annoying, so from now on, I'mma be just registering stuff in here
|
||||
MinecraftForge.EVENT_BUS.addListener(ClientProxy::onDrawSelection);
|
||||
}
|
||||
|
||||
PROXY.preInit();
|
||||
|
||||
|
|
@ -199,30 +197,6 @@ public class WebDisplays {
|
|||
ScreenControlRegistry.init();
|
||||
}
|
||||
}
|
||||
|
||||
private static void onDrawSelection(RenderHighlightEvent event) {
|
||||
if (event.getTarget() instanceof BlockHitResult bhr) {
|
||||
BlockState state = Minecraft.getInstance().level.getBlockState(bhr.getBlockPos());
|
||||
if (state.getBlock() instanceof BlockScreen screen) {
|
||||
Vector3i vec = new Vector3i(bhr.getBlockPos().getX(), bhr.getBlockPos().getY(), bhr.getBlockPos().getZ());
|
||||
BlockSide side = BlockSide.fromInt(bhr.getDirection().ordinal());
|
||||
Multiblock.findOrigin(
|
||||
Minecraft.getInstance().level, vec,
|
||||
side, null
|
||||
);
|
||||
|
||||
BlockPos pos = new BlockPos(vec.x, vec.y, vec.z);
|
||||
BlockEntity be = Minecraft.getInstance().level.getBlockEntity(
|
||||
pos
|
||||
);
|
||||
if (be instanceof TileEntityScreen tes) {
|
||||
if (tes.getScreen(side) != null) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onAttachPlayerCap(AttachCapabilitiesEvent<Entity> event) {
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ import net.minecraft.world.level.BlockGetter;
|
|||
import net.minecraft.world.level.ClipContext;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
import net.minecraft.world.phys.HitResult;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
|
@ -41,6 +43,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
|||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.client.event.ModelEvent;
|
||||
import net.minecraftforge.client.event.RenderHandEvent;
|
||||
import net.minecraftforge.client.event.RenderHighlightEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.event.level.LevelEvent;
|
||||
|
|
@ -80,7 +83,7 @@ import java.util.stream.Stream;
|
|||
|
||||
@Mod.EventBusSubscriber(modid = "webdisplays", value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQueryHandler, ResourceManagerReloadListener {
|
||||
|
||||
|
||||
public class PadData {
|
||||
|
||||
public IBrowser view;
|
||||
|
|
@ -608,7 +611,7 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
|
|||
//Laser pointer raycast
|
||||
if(mc.player != null && mc.level != null && ItemInit.itemLaserPointer.isPresent() && mc.player.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemInit.itemLaserPointer.get())
|
||||
&& mc.options.keyUse.isDown()
|
||||
&& (mc.hitResult == null || mc.hitResult.getType() == HitResult.Type.BLOCK)) {
|
||||
&& (mc.hitResult == null || mc.hitResult.getType() == HitResult.Type.BLOCK || mc.hitResult.getType() == HitResult.Type.MISS)) {
|
||||
laserPointerRenderer.isOn = true;
|
||||
BlockHitResult result = raycast(64.0); //TODO: Make that distance configurable
|
||||
|
||||
|
|
@ -669,8 +672,9 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
|
|||
if (ev.getHand() == InteractionHand.OFF_HAND)
|
||||
handSide = handSide.getOpposite();
|
||||
|
||||
renderer.render(ev.getPoseStack(), ev.getItemStack(), (handSide == HumanoidArm.RIGHT) ? 1.0f : -1.0f, ev.getSwingProgress(), ev.getEquipProgress(), ev.getMultiBufferSource(), ev.getPackedLight());
|
||||
ev.setCanceled(true);
|
||||
if (renderer.render(ev.getPoseStack(), ev.getItemStack(), (handSide == HumanoidArm.RIGHT) ? 1.0f : -1.0f, ev.getSwingProgress(), ev.getEquipProgress(), ev.getMultiBufferSource(), ev.getPackedLight())) {
|
||||
ev.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -806,4 +810,28 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
|
|||
if (senderLevel == null) return Minecraft.getInstance().level;
|
||||
return senderLevel;
|
||||
}
|
||||
|
||||
public static void onDrawSelection(RenderHighlightEvent event) {
|
||||
if (event.getTarget() instanceof BlockHitResult bhr) {
|
||||
BlockState state = Minecraft.getInstance().level.getBlockState(bhr.getBlockPos());
|
||||
if (state.getBlock() instanceof BlockScreen screen) {
|
||||
Vector3i vec = new Vector3i(bhr.getBlockPos().getX(), bhr.getBlockPos().getY(), bhr.getBlockPos().getZ());
|
||||
BlockSide side = BlockSide.fromInt(bhr.getDirection().ordinal());
|
||||
Multiblock.findOrigin(
|
||||
Minecraft.getInstance().level, vec,
|
||||
side, null
|
||||
);
|
||||
|
||||
BlockPos pos = new BlockPos(vec.x, vec.y, vec.z);
|
||||
BlockEntity be = Minecraft.getInstance().level.getBlockEntity(
|
||||
pos
|
||||
);
|
||||
if (be instanceof TileEntityScreen tes) {
|
||||
if (tes.getScreen(side) != null) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -184,7 +184,6 @@ public class GuiMinePad extends WDScreen {
|
|||
pad.view.injectMouseMove(sx, sy, 0, sy < 0);
|
||||
else
|
||||
pad.view.injectMouseButton(sx, sy, 0, btn + 1, pressed, 1);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import net.montoyo.wd.item.WDItem;
|
|||
import net.montoyo.wd.net.WDNetworkRegistry;
|
||||
import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl;
|
||||
import net.montoyo.wd.utilities.*;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -502,5 +503,16 @@ public class GuiScreenConfig extends WDScreen {
|
|||
|
||||
return "Screen_Configurator";
|
||||
}
|
||||
|
||||
// reason: allow closing the UI, lol
|
||||
@Override
|
||||
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||
if (keyCode == GLFW.GLFW_KEY_ESCAPE) {
|
||||
Minecraft.getInstance().setScreen(null);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -136,8 +136,13 @@ public abstract class WDScreen extends Screen {
|
|||
public boolean mouseClicked(double mouseX, double mouseY, int button) {
|
||||
boolean clicked = false;
|
||||
|
||||
for(Control ctrl: controls)
|
||||
clicked = clicked || ctrl.mouseClicked(mouseX, mouseY, button);
|
||||
for(Control ctrl: controls) {
|
||||
clicked = ctrl.mouseClicked(mouseX, mouseY, button);
|
||||
if (clicked) {
|
||||
System.out.println(ctrl);
|
||||
}
|
||||
if (clicked) break; // don't assume the compiler will optimize stuff
|
||||
}
|
||||
|
||||
return clicked;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,9 +66,9 @@ public class CheckBox extends BasicControl {
|
|||
checked = !checked;
|
||||
mc.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
||||
parent.actionPerformed(new CheckedEvent(this));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||
import net.montoyo.wd.client.gui.loading.GuiLoader;
|
||||
import net.montoyo.wd.client.gui.loading.JsonAWrapper;
|
||||
import net.montoyo.wd.client.gui.loading.JsonOWrapper;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
|
@ -67,8 +66,10 @@ public abstract class Container extends BasicControl {
|
|||
mouseX -= x + paddingX;
|
||||
mouseY -= y + paddingY;
|
||||
|
||||
for(Control ctrl : childs)
|
||||
clicked = clicked || ctrl.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
for(Control ctrl : childs) {
|
||||
clicked = ctrl.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
if (clicked) break; // don't assume compiler optimizations
|
||||
}
|
||||
}
|
||||
|
||||
return clicked;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ import net.montoyo.wd.client.gui.loading.JsonOWrapper;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_NEAREST;
|
||||
|
||||
public class List extends BasicControl {
|
||||
|
||||
|
|
@ -240,13 +241,16 @@ public class List extends BasicControl {
|
|||
if(isInScrollbar(mouseX, mouseY)) {
|
||||
scrolling = true;
|
||||
scrollGrab = mouseY - (y + 1 + scrollPos);
|
||||
} else if(selected >= 0)
|
||||
parent.actionPerformed(new EntryClick(this));
|
||||
return true;
|
||||
} else if(selected >= 0) {
|
||||
System.out.println(parent.actionPerformed(new EntryClick(this)));
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.entity.ItemRenderer;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.eventbus.api.IEventBus;
|
||||
import net.montoyo.wd.client.gui.loading.JsonOWrapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -103,9 +102,15 @@ public class UpgradeGroup extends BasicControl {
|
|||
@Override
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
|
||||
if(mouseButton == 0) {
|
||||
clickStack = overStack;
|
||||
|
||||
return true;
|
||||
// don't process the click if it's not inbounds, lol
|
||||
if (
|
||||
mouseX >= x && mouseX <= x + width &&
|
||||
mouseY >= y && mouseX <= y + height
|
||||
) {
|
||||
clickStack = overStack;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,17 @@ import net.minecraft.client.renderer.MultiBufferSource;
|
|||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
public interface IItemRenderer {
|
||||
|
||||
void render(PoseStack stack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight);
|
||||
|
||||
|
||||
/**
|
||||
* @param pose the pose stack
|
||||
* @param stack the item stack
|
||||
* @param handSideSign TODO:
|
||||
* @param swingProgress TODO:
|
||||
* @param equipProgress TODO:
|
||||
* @param multiBufferSource the buffer source
|
||||
* @param packedLight packed light
|
||||
* @return whether or not to cancel vanilla rendering
|
||||
*/
|
||||
boolean render(PoseStack pose, ItemStack stack, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ public final class LaserPointerRenderer implements IItemRenderer {
|
|||
public LaserPointerRenderer() {}
|
||||
|
||||
@Override
|
||||
public void render(PoseStack poseStack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
|
||||
public boolean render(PoseStack poseStack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
|
||||
RenderSystem.disableCull();
|
||||
RenderSystem.disableTexture();
|
||||
RenderSystem.enableDepthTest();
|
||||
|
|
@ -78,6 +78,8 @@ public final class LaserPointerRenderer implements IItemRenderer {
|
|||
RenderSystem.enableTexture(); //Fix for shitty minecraft fire
|
||||
RenderSystem.enableCull();
|
||||
poseStack.popPose();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void drawLineBetween(BufferBuilder bb, Matrix4f matrix, Vec3 local, Vec3 target)
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public final class MinePadRenderer implements IItemRenderer {
|
|||
// }
|
||||
|
||||
@Override
|
||||
public final void render(PoseStack stack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
|
||||
public final boolean render(PoseStack stack, ItemStack is, float handSideSign, float swingProgress, float equipProgress, MultiBufferSource multiBufferSource, int packedLight) {
|
||||
//Pre-compute values
|
||||
float sqrtSwingProg = (float) Math.sqrt(swingProgress);
|
||||
sinSqrtSwingProg1 = (float) Math.sin(sqrtSwingProg * PI);
|
||||
|
|
@ -97,6 +97,8 @@ public final class MinePadRenderer implements IItemRenderer {
|
|||
|
||||
stack.popPose();
|
||||
RenderSystem.enableCull();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void renderArmFirstPerson(PoseStack stack, MultiBufferSource buffer, int combinedLight, float equipProgress, float handSideSign) {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import java.util.function.Function;
|
|||
public class LaserControl extends ScreenControl {
|
||||
public static final ResourceLocation id = new ResourceLocation("webdisplays:laser");
|
||||
|
||||
public static enum ControlType {
|
||||
public enum ControlType {
|
||||
MOVE, DOWN, UP
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import java.util.function.Function;
|
|||
public class ManageRightsAndUpdgradesControl extends ScreenControl {
|
||||
public static final ResourceLocation id = new ResourceLocation("webdisplays:mod_rights_upgrades");
|
||||
|
||||
public static enum ControlType {
|
||||
public enum ControlType {
|
||||
RIGHTS, UPGRADES
|
||||
}
|
||||
|
||||
|
|
@ -41,6 +41,7 @@ public class ManageRightsAndUpdgradesControl extends ScreenControl {
|
|||
|
||||
public ManageRightsAndUpdgradesControl(int friendRights, int otherRights) {
|
||||
super(id);
|
||||
type = ControlType.RIGHTS;
|
||||
this.friendRights = friendRights;
|
||||
this.otherRights = otherRights;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import java.util.function.Function;
|
|||
public class ScreenModifyControl extends ScreenControl {
|
||||
public static final ResourceLocation id = new ResourceLocation("webdisplays:mod_screen");
|
||||
|
||||
public static enum ControlType {
|
||||
public enum ControlType {
|
||||
RESOLUTION, ROTATION
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ package net.montoyo.wd.item;
|
|||
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.context.UseOnContext;
|
||||
|
|
@ -20,9 +19,6 @@ import net.montoyo.wd.utilities.Multiblock;
|
|||
import net.montoyo.wd.utilities.Util;
|
||||
import net.montoyo.wd.utilities.Vector3i;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.lwjgl.system.CallbackI;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class ItemScreenConfigurator extends Item implements WDItem {
|
||||
|
||||
|
|
@ -42,7 +38,7 @@ public class ItemScreenConfigurator extends Item implements WDItem {
|
|||
return InteractionResult.SUCCESS;
|
||||
|
||||
Vector3i origin = new Vector3i(context.getClickedPos());
|
||||
BlockSide side = BlockSide.values()[context.getHorizontalDirection().ordinal()];
|
||||
BlockSide side = BlockSide.values()[context.getHorizontalDirection().getOpposite().ordinal()];
|
||||
|
||||
Multiblock.findOrigin(context.getLevel(), origin, side, null);
|
||||
BlockEntity te = context.getLevel().getBlockEntity(origin.toBlock());
|
||||
|
|
|
|||
|
|
@ -1,56 +1 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [64, 32],
|
||||
"textures": {
|
||||
"0": "webdisplays:models/minepad"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [1, 0, 0],
|
||||
"to": [15, 1, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 3.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 4.5, 5.75, 5], "texture": "#0"},
|
||||
"east": {"uv": [0, 4.5, 2.25, 5], "texture": "#0"},
|
||||
"south": {"uv": [8, 4.5, 11.5, 5], "texture": "#0"},
|
||||
"west": {"uv": [5.75, 4.5, 8, 5], "texture": "#0"},
|
||||
"up": {"uv": [5.75, 4.5, 2.25, 0], "texture": "#0"},
|
||||
"down": {"uv": [9.25, 0, 5.75, 4.5], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0, 0, 1],
|
||||
"to": [1, 1, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [1.75, 8.5, 2, 9], "texture": "#0"},
|
||||
"east": {"uv": [0, 8.5, 1.75, 9], "texture": "#0"},
|
||||
"south": {"uv": [3.75, 8.5, 4, 9], "texture": "#0"},
|
||||
"west": {"uv": [2, 8.5, 3.75, 9], "texture": "#0"},
|
||||
"up": {"uv": [2, 8.5, 1.75, 5], "texture": "#0"},
|
||||
"down": {"uv": [2.25, 5, 2, 8.5], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [15, 0, 1],
|
||||
"to": [16, 1, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 4.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [9.25, 8.5, 9.5, 9], "texture": "#0"},
|
||||
"east": {"uv": [7.5, 8.5, 9.25, 9], "texture": "#0"},
|
||||
"south": {"uv": [11.25, 8.5, 11.5, 9], "texture": "#0"},
|
||||
"west": {"uv": [9.5, 8.5, 11.25, 9], "texture": "#0"},
|
||||
"up": {"uv": [9.5, 8.5, 9.25, 5], "texture": "#0"},
|
||||
"down": {"uv": [9.75, 5, 9.5, 8.5], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "bone",
|
||||
"origin": [0, 0, 0],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2]
|
||||
}
|
||||
]
|
||||
}
|
||||
{"credit":"Made with Blockbench","texture_size":[64,32],"textures":{"0":"webdisplays:models/minepad"},"elements":[{"from":[1,0,0],"to":[15,1,9],"rotation":{"angle":0,"axis":"y","origin":[1,0,3.5]},"faces":{"north":{"uv":[2.25,4.5,5.75,5],"texture":"#0"},"east":{"uv":[0,4.5,2.25,5],"texture":"#0"},"south":{"uv":[8,4.5,11.5,5],"texture":"#0"},"west":{"uv":[5.75,4.5,8,5],"texture":"#0"},"up":{"uv":[5.75,4.5,2.25,0],"texture":"#0"},"down":{"uv":[9.25,0,5.75,4.5],"texture":"#0"}}},{"from":[0,0,1],"to":[1,1,8],"rotation":{"angle":0,"axis":"y","origin":[0,0,4.5]},"faces":{"north":{"uv":[1.75,8.5,2,9],"texture":"#0"},"east":{"uv":[0,8.5,1.75,9],"texture":"#0"},"south":{"uv":[3.75,8.5,4,9],"texture":"#0"},"west":{"uv":[2,8.5,3.75,9],"texture":"#0"},"up":{"uv":[2,8.5,1.75,5],"texture":"#0"},"down":{"uv":[2.25,5,2,8.5],"texture":"#0"}}},{"from":[15,0,1],"to":[16,1,8],"rotation":{"angle":0,"axis":"y","origin":[15,0,4.5]},"faces":{"north":{"uv":[9.25,8.5,9.5,9],"texture":"#0"},"east":{"uv":[7.5,8.5,9.25,9],"texture":"#0"},"south":{"uv":[11.25,8.5,11.5,9],"texture":"#0"},"west":{"uv":[9.5,8.5,11.25,9],"texture":"#0"},"up":{"uv":[9.5,8.5,9.25,5],"texture":"#0"},"down":{"uv":[9.75,5,9.5,8.5],"texture":"#0"}}}],"display":{"thirdperson_righthand":{"rotation":[95.5,-180,0],"translation":[0,6.75,9]},"thirdperson_lefthand":{"rotation":[95.5,-180,0],"translation":[0,6.75,9]},"ground":{"rotation":[-90,0,0],"translation":[0,11.5,-7.6]},"gui":{"rotation":[90,0,0],"translation":[0,-3.5,0]},"head":{"rotation":[-90,0,0],"translation":[0,14.25,-0.75]},"fixed":{"rotation":[-90,0,0],"translation":[0,0,-7.5]}},"groups":[{"name":"bone","origin":[0,0,0],"color":0,"children":[0,1,2]}]}
|
||||
Loading…
Reference in New Issue
Block a user