casino
1
src/blockbench_models/casino_outline.bbmodel
Normal file
1
src/blockbench_models/casino_title.bbmodel
Normal file
@@ -105,7 +105,8 @@ public class ClientCosmetics {
|
||||
/* ---------------- FETCH MOJANG CAPES ---------------- */
|
||||
|
||||
public static void fetchMojangCapes(UUID uuid) {
|
||||
try {MinecraftClient client = MinecraftClient.getInstance();
|
||||
try {
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
String accessToken = client.getSession().getAccessToken();
|
||||
if (accessToken == null) return;
|
||||
|
||||
@@ -113,10 +114,18 @@ public class ClientCosmetics {
|
||||
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
||||
con.setRequestProperty("Authorization", "Bearer " + accessToken);
|
||||
con.setRequestMethod("GET");
|
||||
con.setConnectTimeout(5000);
|
||||
con.setReadTimeout(5000);
|
||||
|
||||
InputStream in = con.getInputStream();
|
||||
int responseCode = con.getResponseCode();
|
||||
if (responseCode != 200) {
|
||||
// 401 or any other response → silently ignore
|
||||
con.disconnect();
|
||||
return;
|
||||
}
|
||||
|
||||
try (InputStream in = con.getInputStream()) {
|
||||
String json = new String(in.readAllBytes());
|
||||
in.close();
|
||||
|
||||
JsonObject obj = JsonParser.parseString(json).getAsJsonObject();
|
||||
JsonArray capes = obj.getAsJsonArray("capes");
|
||||
@@ -143,9 +152,11 @@ public class ClientCosmetics {
|
||||
}
|
||||
|
||||
ClientPlayNetworking.send(MOJANG_CAPES_SYNC, buf);
|
||||
}
|
||||
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
// Only log unexpected exceptions
|
||||
ex.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,18 +4,26 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import dev.tggamesyt.szar.SlotMachineBlockEntity;
|
||||
import dev.tggamesyt.szar.SlotMachineScreenHandler;
|
||||
import dev.tggamesyt.szar.Szar;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
||||
import net.minecraft.client.sound.PositionedSoundInstance;
|
||||
import net.minecraft.client.sound.SoundInstance;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import dev.tggamesyt.szar.SlotSymbol;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class SlotMachineScreen extends HandledScreen<SlotMachineScreenHandler> {
|
||||
|
||||
private static final Identifier BG_TEXTURE =
|
||||
@@ -27,9 +35,15 @@ public class SlotMachineScreen extends HandledScreen<SlotMachineScreenHandler> {
|
||||
new Identifier(Szar.MOD_ID, "textures/gui/handle2.png");
|
||||
private static final Identifier HANDLE_3 =
|
||||
new Identifier(Szar.MOD_ID, "textures/gui/handle3.png");
|
||||
|
||||
private PositionedSoundInstance spinSound;
|
||||
private boolean wasSpinning = false;
|
||||
private final int handleX = 120;
|
||||
private final int handleY = 20;
|
||||
// Track when to play win sound
|
||||
private boolean winSoundPending = false;
|
||||
private int winSoundDelay = 0; // ticks until sound plays
|
||||
private boolean lastWinState = false; // tracks PropertyDelegate slot 1
|
||||
private final PlayerInventory inventory;
|
||||
|
||||
private boolean handleClicked = false;
|
||||
private int handleAnimTicks = 0;
|
||||
@@ -41,6 +55,8 @@ public class SlotMachineScreen extends HandledScreen<SlotMachineScreenHandler> {
|
||||
super(handler, inventory, title);
|
||||
this.backgroundWidth = 176;
|
||||
this.backgroundHeight = 166;
|
||||
this.inventory = inventory;
|
||||
inventory.player.playSound(Szar.LETS_GAMBLE, 1f, 1f);
|
||||
}
|
||||
|
||||
// ----------------------------
|
||||
@@ -85,14 +101,60 @@ public class SlotMachineScreen extends HandledScreen<SlotMachineScreenHandler> {
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
|
||||
renderBackground(context);
|
||||
super.render(context, mouseX, mouseY, delta);
|
||||
if (client != null && client.player != null) {
|
||||
handler.tick(client.player);
|
||||
}
|
||||
drawMouseoverTooltip(context, mouseX, mouseY);
|
||||
|
||||
boolean spinning = handler.getPropertyDelegate().get(0) == 1;
|
||||
boolean won = handler.getPropertyDelegate().get(1) == 1;
|
||||
|
||||
// Start spin sound when spin starts
|
||||
if (spinning && !wasSpinning) {
|
||||
spinSound = new PositionedSoundInstance(
|
||||
Szar.SLOT_MACHINE_BASE.getId(),
|
||||
SoundCategory.MASTER,
|
||||
5.0f,
|
||||
1.0f,
|
||||
net.minecraft.util.math.random.Random.create(),
|
||||
true,
|
||||
0,
|
||||
SoundInstance.AttenuationType.NONE,
|
||||
0.0, 0.0, 0.0,
|
||||
true
|
||||
);
|
||||
MinecraftClient.getInstance().getSoundManager().play(spinSound);
|
||||
}
|
||||
|
||||
// Stop spin sound when spin ends
|
||||
if (!spinning && wasSpinning) {
|
||||
stopSpinSound();
|
||||
}
|
||||
|
||||
// === Delayed win sound logic ===
|
||||
if (!lastWinState && spinning) {
|
||||
// spin is in progress, first tick that win property is set → start delay
|
||||
winSoundPending = true;
|
||||
winSoundDelay = 0;
|
||||
}
|
||||
|
||||
if (winSoundPending) {
|
||||
winSoundDelay++;
|
||||
if (winSoundDelay >= 15) { // 15-tick delay
|
||||
if (inventory.player != null) {
|
||||
if (won) {
|
||||
inventory.player.playSound(Szar.SLOT_MACHINE_WIN, 5.0f, 1.0f);
|
||||
inventory.player.playSound(Szar.WON, 5.0f, 1.0f);
|
||||
} else {
|
||||
inventory.player.playSound(Szar.DANGIT, 5.0f, 1.0f);
|
||||
}
|
||||
}
|
||||
winSoundPending = false;
|
||||
}
|
||||
}
|
||||
|
||||
lastWinState = won;
|
||||
wasSpinning = spinning;
|
||||
|
||||
int guiLeft = (width - backgroundWidth) / 2;
|
||||
int guiTop = (height - backgroundHeight) / 2;
|
||||
|
||||
@@ -146,4 +208,16 @@ public class SlotMachineScreen extends HandledScreen<SlotMachineScreenHandler> {
|
||||
|
||||
return super.mouseClicked(mouseX, mouseY, button);
|
||||
}
|
||||
|
||||
private void stopSpinSound() {
|
||||
if (MinecraftClient.getInstance() != null && spinSound != null) {
|
||||
MinecraftClient.getInstance().getSoundManager().stop(spinSound);
|
||||
spinSound = null;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void removed() {
|
||||
super.removed();
|
||||
stopSpinSound();
|
||||
}
|
||||
}
|
||||
@@ -118,7 +118,6 @@ public class SzarClient implements ClientModInitializer {
|
||||
// Apply the cosmetic profile on the main thread
|
||||
client.execute(() -> {
|
||||
ClientCosmetics.fetchMojangCapes(playerUuid);
|
||||
System.out.println("got it client");
|
||||
ClientCosmetics.apply(playerUuid, nameType, staticColor, gradientStart, gradientEnd, capeTexture);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
package dev.tggamesyt.szar;
|
||||
|
||||
|
||||
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.block.entity.*;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.item.ItemPlacementContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.screen.NamedScreenHandlerFactory;
|
||||
import net.minecraft.screen.ScreenHandler;
|
||||
import net.minecraft.screen.SimpleNamedScreenHandlerFactory;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.state.StateManager;
|
||||
import net.minecraft.state.property.DirectionProperty;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.*;
|
||||
import net.minecraft.util.hit.BlockHitResult;
|
||||
import net.minecraft.util.math.*;
|
||||
import net.minecraft.util.shape.*;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.World;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class BasicRotatableModelBlock extends Block {
|
||||
|
||||
public static final DirectionProperty FACING = Properties.HORIZONTAL_FACING;
|
||||
VoxelShape shape;
|
||||
|
||||
public BasicRotatableModelBlock(Settings settings, VoxelShape shape) {
|
||||
super(settings);
|
||||
this.shape = shape;
|
||||
setDefaultState(getStateManager().getDefaultState().with(FACING, Direction.NORTH));
|
||||
}
|
||||
|
||||
private 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.union(buffer[1],
|
||||
VoxelShapes.cuboid(1 - maxZ, minY, minX, 1 - minZ, maxY, maxX))
|
||||
);
|
||||
buffer[0] = buffer[1];
|
||||
buffer[1] = VoxelShapes.empty();
|
||||
}
|
||||
|
||||
return buffer[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
|
||||
return rotateShape(Direction.NORTH, state.get(FACING), shape);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
|
||||
return getCollisionShape(state, world, pos, context);
|
||||
}
|
||||
|
||||
// ===== ROTATION =====
|
||||
|
||||
@Override
|
||||
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
||||
return getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
|
||||
builder.add(FACING);
|
||||
}
|
||||
}
|
||||
66
src/main/java/dev/tggamesyt/szar/CasinoStructure.java
Normal file
@@ -0,0 +1,66 @@
|
||||
package dev.tggamesyt.szar;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import net.minecraft.structure.StructurePlacementData;
|
||||
import net.minecraft.util.BlockRotation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
import net.minecraft.util.math.random.ChunkRandom;
|
||||
import net.minecraft.world.Heightmap;
|
||||
import net.minecraft.world.gen.structure.Structure;
|
||||
import net.minecraft.world.gen.structure.StructureType;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public class CasinoStructure extends Structure {
|
||||
|
||||
public static final Codec<CasinoStructure> CODEC =
|
||||
Structure.createCodec(CasinoStructure::new);
|
||||
|
||||
public CasinoStructure(Config config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Optional<StructurePosition> getStructurePosition(Context context) {
|
||||
return Structure.getStructurePosition(
|
||||
context,
|
||||
Heightmap.Type.WORLD_SURFACE_WG,
|
||||
collector -> {
|
||||
|
||||
ChunkPos chunkPos = context.chunkPos();
|
||||
int x = chunkPos.getCenterX();
|
||||
int z = chunkPos.getCenterZ();
|
||||
|
||||
int y = context.chunkGenerator().getHeightInGround(
|
||||
x, z,
|
||||
Heightmap.Type.WORLD_SURFACE_WG,
|
||||
context.world(),
|
||||
context.noiseConfig()
|
||||
);
|
||||
|
||||
BlockPos pos = new BlockPos(x, y, z);
|
||||
|
||||
StructurePlacementData placement =
|
||||
new StructurePlacementData()
|
||||
.setRotation(
|
||||
BlockRotation.random(context.random())
|
||||
);
|
||||
|
||||
collector.addPiece(
|
||||
new CasinoStructurePiece(
|
||||
context,
|
||||
pos,
|
||||
BlockPos.ORIGIN,
|
||||
placement
|
||||
)
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StructureType<?> getType() {
|
||||
return Szar.CASINO_TYPE;
|
||||
}
|
||||
}
|
||||
60
src/main/java/dev/tggamesyt/szar/CasinoStructurePiece.java
Normal file
@@ -0,0 +1,60 @@
|
||||
package dev.tggamesyt.szar;
|
||||
|
||||
import net.minecraft.nbt.NbtCompound;
|
||||
import net.minecraft.structure.SimpleStructurePiece;
|
||||
import net.minecraft.structure.StructureContext;
|
||||
import net.minecraft.structure.StructurePlacementData;
|
||||
import net.minecraft.structure.StructureTemplateManager;
|
||||
import net.minecraft.structure.StructurePieceType;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.BlockBox;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.world.ServerWorldAccess;
|
||||
import net.minecraft.world.gen.structure.Structure;
|
||||
|
||||
public class CasinoStructurePiece extends SimpleStructurePiece {
|
||||
|
||||
private static final Identifier TEMPLATE_ID =
|
||||
new Identifier(Szar.MOD_ID, "casino");
|
||||
|
||||
/* ===== NORMAL CONSTRUCTOR (Worldgen) ===== */
|
||||
public CasinoStructurePiece(
|
||||
Structure.Context context,
|
||||
BlockPos pos,
|
||||
BlockPos origin,
|
||||
StructurePlacementData placement
|
||||
) {
|
||||
super(
|
||||
Szar.CASINO_PIECE,
|
||||
0,
|
||||
context.structureTemplateManager(),
|
||||
TEMPLATE_ID,
|
||||
TEMPLATE_ID.toString(),
|
||||
placement,
|
||||
pos
|
||||
);
|
||||
}
|
||||
|
||||
/* ===== NBT CONSTRUCTOR (Chunk Save/Load) ===== */
|
||||
public CasinoStructurePiece(StructureContext context, NbtCompound nbt) {
|
||||
super(
|
||||
Szar.CASINO_PIECE,
|
||||
nbt,
|
||||
context.structureTemplateManager(),
|
||||
identifier -> new StructurePlacementData()
|
||||
);
|
||||
}
|
||||
|
||||
/* ===== Metadata Handler (DATA structure blocks) ===== */
|
||||
@Override
|
||||
protected void handleMetadata(
|
||||
String metadata,
|
||||
BlockPos pos,
|
||||
ServerWorldAccess world,
|
||||
Random random,
|
||||
BlockBox boundingBox
|
||||
) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -217,16 +217,11 @@ public class ServerCosmetics {
|
||||
/* ---------------- SYNC ---------------- */
|
||||
|
||||
public static void sync(ServerPlayerEntity player, UserCosmetics user) {
|
||||
System.out.println("Syncing player: " + player.getName().getString() + " user: " + user.toString());
|
||||
List<ServerPlayerEntity> original =
|
||||
player.getServer().getPlayerManager().getPlayerList();
|
||||
List<ServerPlayerEntity> list = new ArrayList<>(original);
|
||||
if (!list.contains(player)) {list.add(player);}
|
||||
System.out.println(
|
||||
player.getServer().getPlayerManager().getPlayerList().size()
|
||||
);
|
||||
for (ServerPlayerEntity p : list) {
|
||||
System.out.println("sending sync : " + player.getName().getString() + " to user: " + p.getName().getString());
|
||||
PacketByteBuf buf = PacketByteBufs.create();
|
||||
|
||||
// Write player UUID first
|
||||
|
||||
@@ -4,6 +4,8 @@ import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.inventory.SimpleInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.screen.ArrayPropertyDelegate;
|
||||
import net.minecraft.screen.PropertyDelegate;
|
||||
import net.minecraft.screen.ScreenHandler;
|
||||
import net.minecraft.screen.slot.Slot;
|
||||
import net.minecraft.util.ItemScatterer;
|
||||
@@ -14,23 +16,43 @@ import java.util.Random;
|
||||
|
||||
public class SlotMachineScreenHandler extends ScreenHandler {
|
||||
|
||||
// ===== TIMING CONFIG =====
|
||||
public static final int PREPARE_TIME = 35;
|
||||
public static final int FAST_SPIN_TIME = 35;
|
||||
public static final int LOCK_INTERVAL = 8;
|
||||
private static final int RESULT_VIEW_TIME = 80;
|
||||
|
||||
private static final int IDLE_SPEED = 20;
|
||||
private static final int PREPARE_SPEED = 8;
|
||||
private static final int FAST_SPEED = 1;
|
||||
|
||||
public final SlotMachineBlockEntity blockEntity;
|
||||
private final SimpleInventory betInventory = new SimpleInventory(1);
|
||||
private final Random random = new Random();
|
||||
private final PlayerInventory playerInventory;
|
||||
private final PropertyDelegate propertyDelegate;
|
||||
private final Random random = new Random();
|
||||
|
||||
private int spinTimer = 0;
|
||||
private boolean spinning = false;
|
||||
private boolean lastSpinWon = false;
|
||||
|
||||
private int currentBetAmount = 0;
|
||||
private ItemStack currentBetStack = ItemStack.EMPTY;
|
||||
|
||||
private boolean spinning = false;
|
||||
private int spinTicks = 0;
|
||||
|
||||
private SlotSymbol final0, final1, final2;
|
||||
|
||||
private boolean forceWin = false;
|
||||
private int winTier = 0; // 0 = fruit, 1 = golden apple small, 2 = golden apple jackpot
|
||||
|
||||
public SlotMachineScreenHandler(int syncId, PlayerInventory playerInv, SlotMachineBlockEntity blockEntity) {
|
||||
super(Szar.SLOT_MACHINE_SCREEN_HANDLER_TYPE, syncId);
|
||||
this.playerInventory = playerInv;
|
||||
this.blockEntity = blockEntity;
|
||||
|
||||
this.propertyDelegate = new ArrayPropertyDelegate(2);
|
||||
this.addProperties(propertyDelegate);
|
||||
|
||||
// Bet slot
|
||||
this.addSlot(new Slot(betInventory, 0, 44, 35) {
|
||||
@Override
|
||||
public boolean canInsert(ItemStack stack) {
|
||||
@@ -43,115 +65,133 @@ public class SlotMachineScreenHandler extends ScreenHandler {
|
||||
}
|
||||
});
|
||||
|
||||
// Player inventory slots
|
||||
for (int y = 0; y < 3; y++)
|
||||
for (int x = 0; x < 9; x++)
|
||||
this.addSlot(new Slot(playerInv, x + y * 9 + 9, 8 + x * 18, 84 + y * 18));
|
||||
|
||||
for (int x = 0; x < 9; x++)
|
||||
this.addSlot(new Slot(playerInv, x, 8 + x * 18, 142));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUse(PlayerEntity player) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onButtonClick(PlayerEntity player, int id) {
|
||||
|
||||
if (id != 0) return false;
|
||||
if (spinning) return false;
|
||||
if (id != 0 || spinning) return false;
|
||||
|
||||
ItemStack bet = betInventory.getStack(0);
|
||||
if (bet.isEmpty()) return false;
|
||||
|
||||
// TAKE BET IMMEDIATELY
|
||||
currentBetAmount = bet.getCount();
|
||||
currentBetStack = bet.copy();
|
||||
betInventory.setStack(0, ItemStack.EMPTY);
|
||||
|
||||
spinning = true;
|
||||
spinTicks = 60;
|
||||
// === Determine if this spin will definitely win (40%) ===
|
||||
forceWin = random.nextFloat() < 0.4f;
|
||||
if (forceWin) {
|
||||
float tierRoll = random.nextFloat();
|
||||
if (tierRoll < 0.80f) winTier = 0; // Fruit win (2x items)
|
||||
else if (tierRoll < 0.96f) winTier = 1; // Golden Apple small (25x)
|
||||
else winTier = 2; // Jackpot (100x)
|
||||
} else {
|
||||
winTier = -1; // no win
|
||||
}
|
||||
|
||||
// === Preselect final symbols based on forced win type ===
|
||||
if (forceWin) {
|
||||
switch (winTier) {
|
||||
case 0 -> { // fruit
|
||||
final0 = SlotSymbol.rollFruit(random);
|
||||
final1 = final0;
|
||||
final2 = final0;
|
||||
}
|
||||
case 1 -> { // golden apple small
|
||||
final0 = SlotSymbol.BELL;
|
||||
final1 = final0;
|
||||
final2 = final0;
|
||||
}
|
||||
case 2 -> { // jackpot
|
||||
final0 = SlotSymbol.SEVEN;
|
||||
final1 = final0;
|
||||
final2 = final0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
final0 = SlotSymbol.roll(random);
|
||||
final1 = rollWithBias(final0);
|
||||
final2 = rollWithBias(final0, final1);
|
||||
final1 = SlotSymbol.roll(random);
|
||||
final2 = SlotSymbol.roll(random);
|
||||
if (final0 == final1 && final1 == final2) {
|
||||
forceWin = true;
|
||||
winTier = final0 == SlotSymbol.BELL ? 1 : final0 == SlotSymbol.SEVEN ? 2 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
spinTimer = 0;
|
||||
spinning = true;
|
||||
propertyDelegate.set(0, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void tick(PlayerEntity player) {
|
||||
@Override
|
||||
public void sendContentUpdates() {
|
||||
super.sendContentUpdates();
|
||||
|
||||
if (!spinning) return;
|
||||
|
||||
spinTicks--;
|
||||
|
||||
// Animate random symbols during spin
|
||||
if (spinTicks > 40) {
|
||||
if (!spinning) {
|
||||
if (blockEntity.getWorld().getTime() % IDLE_SPEED == 0) {
|
||||
blockEntity.setSymbols(
|
||||
random.nextInt(7),
|
||||
random.nextInt(7),
|
||||
random.nextInt(7)
|
||||
);
|
||||
}
|
||||
|
||||
// Lock first reel
|
||||
if (spinTicks == 40) {
|
||||
blockEntity.setSymbols(
|
||||
final0.ordinal(),
|
||||
random.nextInt(7),
|
||||
random.nextInt(7)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Lock second reel
|
||||
if (spinTicks == 20) {
|
||||
blockEntity.setSymbols(
|
||||
final0.ordinal(),
|
||||
final1.ordinal(),
|
||||
random.nextInt(7)
|
||||
);
|
||||
spinTimer++;
|
||||
|
||||
int totalSpinDuration =
|
||||
PREPARE_TIME +
|
||||
FAST_SPIN_TIME +
|
||||
LOCK_INTERVAL * 3 +
|
||||
RESULT_VIEW_TIME;
|
||||
|
||||
int speed = switch (spinTimer < PREPARE_TIME ? 0 : spinTimer < PREPARE_TIME + FAST_SPIN_TIME ? 1 : 2) {
|
||||
case 0 -> PREPARE_SPEED;
|
||||
case 1 -> FAST_SPEED;
|
||||
default -> FAST_SPEED;
|
||||
};
|
||||
|
||||
boolean lock0 = spinTimer >= PREPARE_TIME + FAST_SPIN_TIME + LOCK_INTERVAL;
|
||||
boolean lock1 = spinTimer >= PREPARE_TIME + FAST_SPIN_TIME + LOCK_INTERVAL * 2;
|
||||
boolean lock2 = spinTimer >= PREPARE_TIME + FAST_SPIN_TIME + LOCK_INTERVAL * 3;
|
||||
|
||||
int reel0 = lock0 ? final0.ordinal() : random.nextInt(7);
|
||||
int reel1 = lock1 ? final1.ordinal() : random.nextInt(7);
|
||||
int reel2 = lock2 ? final2.ordinal() : random.nextInt(7);
|
||||
|
||||
if (spinTimer % speed == 0) {
|
||||
blockEntity.setSymbols(reel0, reel1, reel2);
|
||||
}
|
||||
|
||||
// Lock third reel
|
||||
if (spinTicks == 0) {
|
||||
blockEntity.setSymbols(
|
||||
final0.ordinal(),
|
||||
final1.ordinal(),
|
||||
final2.ordinal()
|
||||
);
|
||||
|
||||
finishSpin(player);
|
||||
if (spinTimer >= (totalSpinDuration - RESULT_VIEW_TIME + 15)) {
|
||||
propertyDelegate.set(1, forceWin ? 1 : 0);
|
||||
}
|
||||
if (spinTimer >= totalSpinDuration) {
|
||||
finishSpin(playerInventory.player);
|
||||
spinning = false;
|
||||
propertyDelegate.set(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private SlotSymbol rollWithBias(SlotSymbol... biasToward) {
|
||||
|
||||
float bonusChance = 0.20f; // 20% bonus chance toward existing symbol
|
||||
|
||||
float r = random.nextFloat();
|
||||
|
||||
if (r < bonusChance) {
|
||||
return biasToward[random.nextInt(biasToward.length)];
|
||||
}
|
||||
|
||||
return SlotSymbol.roll(random);
|
||||
}
|
||||
|
||||
private void finishSpin(PlayerEntity player) {
|
||||
lastSpinWon = forceWin;
|
||||
|
||||
int payout = 0;
|
||||
|
||||
if (final0 == final1 && final1 == final2) {
|
||||
payout = switch (final0) {
|
||||
case SEVEN -> currentBetAmount * 100;
|
||||
case BELL -> currentBetAmount * 15;
|
||||
default -> currentBetAmount * 2;
|
||||
if (lastSpinWon) {
|
||||
int payout = switch (winTier) {
|
||||
case 0 -> currentBetAmount * 2; // fruit 2x
|
||||
case 1 -> currentBetAmount * 16; // golden apple small
|
||||
case 2 -> currentBetAmount * 32; // jackpot
|
||||
default -> 0;
|
||||
};
|
||||
}
|
||||
|
||||
if (payout > 0) {
|
||||
Direction facing = blockEntity.getCachedState().get(SlotMachineBlock.FACING);
|
||||
BlockPos drop = blockEntity.getPos().offset(facing);
|
||||
|
||||
@@ -163,84 +203,29 @@ public class SlotMachineScreenHandler extends ScreenHandler {
|
||||
new ItemStack(currentBetStack.getItem(), payout)
|
||||
);
|
||||
}
|
||||
|
||||
currentBetAmount = 0;
|
||||
currentBetStack = ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack quickMove(PlayerEntity player, int index) {
|
||||
ItemStack newStack = ItemStack.EMPTY;
|
||||
Slot slot = this.slots.get(index);
|
||||
|
||||
if (slot.hasStack()) {
|
||||
ItemStack original = slot.getStack();
|
||||
newStack = original.copy();
|
||||
|
||||
// Prevent shift-click while spinning
|
||||
if (spinning) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
// If clicking bet slot → move to player inventory
|
||||
if (index == 0) {
|
||||
if (!this.insertItem(original, 1, this.slots.size(), true)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
// If clicking player inventory → move to bet slot
|
||||
else {
|
||||
if (!this.insertItem(original, 0, 1, false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
if (original.isEmpty()) {
|
||||
slot.setStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
return newStack;
|
||||
public boolean canUse(PlayerEntity player) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendContentUpdates() {
|
||||
super.sendContentUpdates();
|
||||
|
||||
if (!spinning) return;
|
||||
|
||||
spinTicks--;
|
||||
|
||||
int reel0;
|
||||
int reel1;
|
||||
int reel2;
|
||||
|
||||
if (spinTicks > 40) {
|
||||
reel0 = random.nextInt(7);
|
||||
} else {
|
||||
reel0 = final0.ordinal();
|
||||
public ItemStack quickMove(PlayerEntity player, int index) {
|
||||
if (spinning) return ItemStack.EMPTY;
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
if (spinTicks > 20) {
|
||||
reel1 = random.nextInt(7);
|
||||
} else {
|
||||
reel1 = final1.ordinal();
|
||||
public PropertyDelegate getPropertyDelegate() {
|
||||
return propertyDelegate;
|
||||
}
|
||||
public int getSpinTimer() {
|
||||
return spinTimer;
|
||||
}
|
||||
|
||||
// Reel 3 stops at tick 0
|
||||
if (spinTicks > 0) {
|
||||
reel2 = random.nextInt(7);
|
||||
} else {
|
||||
reel2 = final2.ordinal();
|
||||
}
|
||||
|
||||
blockEntity.setSymbols(reel0, reel1, reel2);
|
||||
|
||||
if (spinTicks <= 0) {
|
||||
finishSpin(playerInventory.player);
|
||||
spinning = false;
|
||||
}
|
||||
public boolean didLastSpinWin() {
|
||||
return forceWin;
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,11 @@ package dev.tggamesyt.szar;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.Items;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public enum SlotSymbol {
|
||||
SEVEN(Items.ENCHANTED_GOLDEN_APPLE),
|
||||
BELL(Items.GOLDEN_APPLE),
|
||||
SEVEN(Items.DEEPSLATE_EMERALD_ORE),
|
||||
BELL(Items.BELL),
|
||||
APPLE(Items.APPLE),
|
||||
SWEET_BERRIES(Items.SWEET_BERRIES),
|
||||
GLOW_BERRIES(Items.GLOW_BERRIES),
|
||||
@@ -20,12 +22,16 @@ public enum SlotSymbol {
|
||||
}
|
||||
|
||||
// Roll a random symbol according to the specified probabilities
|
||||
public static SlotSymbol roll(java.util.Random random) {
|
||||
public static SlotSymbol roll(Random random) {
|
||||
float r = random.nextFloat();
|
||||
if (r < 0.0255f) return SEVEN; // 2.55%
|
||||
else if (r < 0.0255f + 0.101f) return BELL; // 10.1%
|
||||
else {
|
||||
// 5 fruits, equally likely
|
||||
return rollFruit(random);
|
||||
}
|
||||
}
|
||||
|
||||
public static SlotSymbol rollFruit(Random random) {
|
||||
int fruitIndex = random.nextInt(5);
|
||||
switch (fruitIndex) {
|
||||
case 0: return APPLE;
|
||||
@@ -35,5 +41,4 @@ public enum SlotSymbol {
|
||||
default: return CHORUS_FRUIT;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,8 @@ import net.minecraft.util.Formatting;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.Rarity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.shape.VoxelShape;
|
||||
import net.minecraft.util.shape.VoxelShapes;
|
||||
import net.minecraft.village.TradeOffer;
|
||||
import net.minecraft.village.VillagerProfession;
|
||||
import net.minecraft.world.Heightmap;
|
||||
@@ -87,6 +89,36 @@ public class Szar implements ModInitializer {
|
||||
public static final String MOD_ID = "szar";
|
||||
public static final Logger LOGGER = LogManager.getLogger(MOD_ID);
|
||||
public static MinecraftServer SERVER;
|
||||
public static final SoundEvent SLOT_MACHINE_BASE =
|
||||
Registry.register(
|
||||
Registries.SOUND_EVENT,
|
||||
new Identifier(Szar.MOD_ID, "slot_machine_base"),
|
||||
SoundEvent.of(new Identifier(Szar.MOD_ID, "slot_machine_base"))
|
||||
);
|
||||
public static final SoundEvent SLOT_MACHINE_WIN =
|
||||
Registry.register(
|
||||
Registries.SOUND_EVENT,
|
||||
new Identifier(Szar.MOD_ID, "slot_machine_win"),
|
||||
SoundEvent.of(new Identifier(Szar.MOD_ID, "slot_machine_win"))
|
||||
);
|
||||
public static final SoundEvent LETS_GAMBLE =
|
||||
Registry.register(
|
||||
Registries.SOUND_EVENT,
|
||||
new Identifier(Szar.MOD_ID, "lets_gamble"),
|
||||
SoundEvent.of(new Identifier(Szar.MOD_ID, "lets_gamble"))
|
||||
);
|
||||
public static final SoundEvent DANGIT =
|
||||
Registry.register(
|
||||
Registries.SOUND_EVENT,
|
||||
new Identifier(Szar.MOD_ID, "aw_dangit"),
|
||||
SoundEvent.of(new Identifier(Szar.MOD_ID, "aw_dangit"))
|
||||
);
|
||||
public static final SoundEvent WON =
|
||||
Registry.register(
|
||||
Registries.SOUND_EVENT,
|
||||
new Identifier(Szar.MOD_ID, "won"),
|
||||
SoundEvent.of(new Identifier(Szar.MOD_ID, "won"))
|
||||
);
|
||||
public static final SoundEvent MERL_SOUND =
|
||||
SoundEvent.of(new Identifier("szar", "merl"));
|
||||
public static final Identifier PLANE_ANIM_PACKET =
|
||||
@@ -778,7 +810,95 @@ public class Szar implements ModInitializer {
|
||||
new Identifier(MOD_ID, "towers"),
|
||||
new BlockItem(OBELISK_CORE, new Item.Settings())
|
||||
);
|
||||
public static final StructurePieceType CASINO_PIECE =
|
||||
Registry.register(
|
||||
Registries.STRUCTURE_PIECE,
|
||||
new Identifier(MOD_ID, "casino_piece"),
|
||||
CasinoStructurePiece::new
|
||||
);
|
||||
|
||||
public static final StructureType<CasinoStructure> CASINO_TYPE =
|
||||
Registry.register(
|
||||
Registries.STRUCTURE_TYPE,
|
||||
new Identifier(MOD_ID, "casino"),
|
||||
() -> CasinoStructure.CODEC
|
||||
);
|
||||
static VoxelShape shape0 = VoxelShapes.cuboid(0.1875f, 0f, 0.625f, 0.6875f, 0.5f, 1.125f);
|
||||
static VoxelShape shape1 = VoxelShapes.cuboid(0.1875f, 1.5f, 0.625f, 0.6875f, 2f, 1.125f);
|
||||
static VoxelShape shape2 = VoxelShapes.cuboid(0.5625f, 0f, 0.25f, 1.0625f, 2f, 0.75f);
|
||||
static VoxelShape C_SHAPE = VoxelShapes.union(shape0, shape1, shape2);
|
||||
public static final Block C_BLOCK = Registry.register(
|
||||
Registries.BLOCK,
|
||||
new Identifier(MOD_ID, "c"),
|
||||
new BasicRotatableModelBlock(
|
||||
AbstractBlock.Settings
|
||||
.copy(Blocks.IRON_BLOCK), C_SHAPE
|
||||
|
||||
));
|
||||
static VoxelShape shape3 = VoxelShapes.cuboid(0.25f, 0.5f, 0.25f, 0.75f, 1f, 0.75f);
|
||||
static VoxelShape shape4 = VoxelShapes.cuboid(0.25f, 1.5f, 0.25f, 0.75f, 2f, 0.75f);
|
||||
static VoxelShape shape5 = VoxelShapes.cuboid(0.625f, 0f, -0.0625f, 1.125f, 1.5f, 0.4375f);
|
||||
static VoxelShape shape6 = VoxelShapes.cuboid(-0.125f, 0f, 0.5625f, 0.375f, 1.5f, 1.0625f);
|
||||
static VoxelShape A_SHAPE = VoxelShapes.union(shape3, shape4, shape5, shape6);
|
||||
public static final Block A_BLOCK = Registry.register(
|
||||
Registries.BLOCK,
|
||||
new Identifier(MOD_ID, "a"),
|
||||
new BasicRotatableModelBlock(
|
||||
AbstractBlock.Settings
|
||||
.copy(Blocks.IRON_BLOCK), A_SHAPE
|
||||
|
||||
));
|
||||
static VoxelShape shape8 = VoxelShapes.cuboid(0.3125f, 0f, 0f, 1.3125f, 0.5f, 0.5f);
|
||||
static VoxelShape shape9 = VoxelShapes.cuboid(-0.0625f, 0f, 0.5625f, 0.4375f, 1.25f, 1.0625f);
|
||||
static VoxelShape shape10 = VoxelShapes.cuboid(0.3125f, 0.75f, 0.25f, 0.8125f, 1.25f, 0.75f);
|
||||
static VoxelShape shape11 = VoxelShapes.cuboid(-0.1875f, 1.5f, 0.3125f, 0.8125f, 2f, 0.8125f);
|
||||
static VoxelShape shape12 = VoxelShapes.cuboid(0.625f, 0.75f, -0.1875f, 1.125f, 2f, 0.3125f);
|
||||
static VoxelShape S_SHAPE = VoxelShapes.union(shape8, shape9, shape10, shape11, shape12);
|
||||
public static final Block S_BLOCK = Registry.register(
|
||||
Registries.BLOCK,
|
||||
new Identifier(MOD_ID, "s"),
|
||||
new BasicRotatableModelBlock(
|
||||
AbstractBlock.Settings
|
||||
.copy(Blocks.IRON_BLOCK), S_SHAPE
|
||||
|
||||
));
|
||||
static VoxelShape shape13 = VoxelShapes.cuboid(0.25f, 0f, 0.25f, 0.75f, 2f, 0.75f);
|
||||
static VoxelShape I_SHAPE = VoxelShapes.union(shape13);
|
||||
public static final Block I_BLOCK = Registry.register(
|
||||
Registries.BLOCK,
|
||||
new Identifier(MOD_ID, "i"),
|
||||
new BasicRotatableModelBlock(
|
||||
AbstractBlock.Settings
|
||||
.copy(Blocks.IRON_BLOCK), I_SHAPE
|
||||
|
||||
));
|
||||
static VoxelShape shape14 = VoxelShapes.cuboid(0.25f, 0.25f, 0.375f, 0.5f, 0.75f, 0.875f);
|
||||
static VoxelShape shape15 = VoxelShapes.cuboid(-0.125f, 0f, 0.5625f, 0.375f, 2f, 1.0625f);
|
||||
static VoxelShape shape16 = VoxelShapes.cuboid(0.25f, 0.75f, 0.25f, 0.75f, 1.25f, 0.75f);
|
||||
static VoxelShape shape17 = VoxelShapes.cuboid(0.5f, 1.25f, 0.125f, 0.75f, 1.75f, 0.625f);
|
||||
static VoxelShape shape18 = VoxelShapes.cuboid(0.625f, 0f, -0.0625f, 1.125f, 2f, 0.4375f);
|
||||
static VoxelShape N_SHAPE = VoxelShapes.union(shape14, shape15, shape16, shape17, shape18);
|
||||
public static final Block N_BLOCK = Registry.register(
|
||||
Registries.BLOCK,
|
||||
new Identifier(MOD_ID, "n"),
|
||||
new BasicRotatableModelBlock(
|
||||
AbstractBlock.Settings
|
||||
.copy(Blocks.IRON_BLOCK), N_SHAPE
|
||||
|
||||
));
|
||||
static VoxelShape shape19 = VoxelShapes.cuboid(0.1875f, 0f, 0.125f, 1.1875f, 0.5f, 0.625f);
|
||||
static VoxelShape shape20 = VoxelShapes.cuboid(-0.0625f, 0f, 0.625f, 0.4375f, 1.5f, 1.125f);
|
||||
static VoxelShape shape21 = VoxelShapes.cuboid(-0.0625f, 1.5f, 0.5f, 0.9375f, 2f, 1f);
|
||||
static VoxelShape shape22 = VoxelShapes.cuboid(0.6875f, 0.5f, 0f, 1.1875f, 2f, 0.5f);
|
||||
static VoxelShape O_SHAPE = VoxelShapes.union(shape19, shape20, shape21, shape22);
|
||||
public static final Block O_BLOCK = Registry.register(
|
||||
Registries.BLOCK,
|
||||
new Identifier(MOD_ID, "o"),
|
||||
new BasicRotatableModelBlock(
|
||||
AbstractBlock.Settings
|
||||
.copy(Blocks.IRON_BLOCK), O_SHAPE
|
||||
|
||||
));
|
||||
public static final ScreenHandlerType<SlotMachineScreenHandler> SLOT_MACHINE_SCREEN_HANDLER_TYPE =
|
||||
ScreenHandlerRegistry.registerExtended(
|
||||
new Identifier(Szar.MOD_ID, "slot_machine"),
|
||||
|
||||
8
src/main/resources/assets/szar/blockstates/a.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": { "model": "szar:block/a", "y": 0 },
|
||||
"facing=south": { "model": "szar:block/a", "y": 180 },
|
||||
"facing=west": { "model": "szar:block/a", "y": 270 },
|
||||
"facing=east": { "model": "szar:block/a", "y": 90 }
|
||||
}
|
||||
}
|
||||
8
src/main/resources/assets/szar/blockstates/c.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": { "model": "szar:block/c", "y": 0 },
|
||||
"facing=south": { "model": "szar:block/c", "y": 180 },
|
||||
"facing=west": { "model": "szar:block/c", "y": 270 },
|
||||
"facing=east": { "model": "szar:block/c", "y": 90 }
|
||||
}
|
||||
}
|
||||
8
src/main/resources/assets/szar/blockstates/casino.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": { "model": "szar:block/casino", "y": 0 },
|
||||
"facing=south": { "model": "szar:block/casino", "y": 180 },
|
||||
"facing=west": { "model": "szar:block/casino", "y": 270 },
|
||||
"facing=east": { "model": "szar:block/casino", "y": 90 }
|
||||
}
|
||||
}
|
||||
8
src/main/resources/assets/szar/blockstates/i.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": { "model": "szar:block/i", "y": 0 },
|
||||
"facing=south": { "model": "szar:block/i", "y": 180 },
|
||||
"facing=west": { "model": "szar:block/i", "y": 270 },
|
||||
"facing=east": { "model": "szar:block/i", "y": 90 }
|
||||
}
|
||||
}
|
||||
8
src/main/resources/assets/szar/blockstates/n.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": { "model": "szar:block/n", "y": 0 },
|
||||
"facing=south": { "model": "szar:block/n", "y": 180 },
|
||||
"facing=west": { "model": "szar:block/n", "y": 270 },
|
||||
"facing=east": { "model": "szar:block/n", "y": 90 }
|
||||
}
|
||||
}
|
||||
8
src/main/resources/assets/szar/blockstates/o.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": { "model": "szar:block/o", "y": 0 },
|
||||
"facing=south": { "model": "szar:block/o", "y": 180 },
|
||||
"facing=west": { "model": "szar:block/o", "y": 270 },
|
||||
"facing=east": { "model": "szar:block/o", "y": 90 }
|
||||
}
|
||||
}
|
||||
8
src/main/resources/assets/szar/blockstates/s.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north": { "model": "szar:block/s", "y": 0 },
|
||||
"facing=south": { "model": "szar:block/s", "y": 180 },
|
||||
"facing=west": { "model": "szar:block/s", "y": 270 },
|
||||
"facing=east": { "model": "szar:block/s", "y": 90 }
|
||||
}
|
||||
}
|
||||
@@ -80,5 +80,6 @@
|
||||
"item.szar.white_liquid": "...",
|
||||
"item.szar.plane": "Plane",
|
||||
"item.szar.wheel": "Wheel",
|
||||
"block.szar.slot_machine": "Slot Machine"
|
||||
"block.szar.slot_machine": "Slot Machine",
|
||||
"block.szar.casino": "Casino Title"
|
||||
}
|
||||
|
||||
112
src/main/resources/assets/szar/models/block/a.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [9, 8, -1],
|
||||
"to": [17, 16, 7],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [13, 0, 3]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 0.25, 0.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [1.25, 0.25, 1.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [2.25, 0.25, 2.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [3.25, 0.25, 3.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [4.25, 0.25, 4.75, 0.75], "texture": "#0"},
|
||||
"down": {"uv": [5.25, 0.25, 5.75, 0.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 24, -1],
|
||||
"to": [17, 32, 7],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [13, 0, 3]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 0.25, 6.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [7.25, 0.25, 7.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [8.25, 0.25, 8.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [9.25, 0.25, 9.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [10.25, 0.25, 10.75, 0.75], "texture": "#0"},
|
||||
"down": {"uv": [11.25, 0.25, 11.75, 0.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [17, 0, -1],
|
||||
"to": [25, 24, 7],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [13, 0, 3]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 0.25, 12.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [13.25, 0.25, 13.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [14.25, 0.25, 14.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [15.25, 0.25, 15.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 1.25, 0.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [1.25, 1.25, 1.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 0, -1],
|
||||
"to": [9, 24, 7],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [13, 0, 3]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 1.25, 2.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [3.25, 1.25, 3.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 1.25, 4.75, 1.75], "texture": "#0"},
|
||||
"west": {"uv": [5.25, 1.25, 5.75, 1.75], "texture": "#0"},
|
||||
"up": {"uv": [6.25, 1.25, 6.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [7.25, 1.25, 7.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "A",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3]
|
||||
}
|
||||
]
|
||||
}
|
||||
112
src/main/resources/assets/szar/models/block/a_outline.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4, 8, 4],
|
||||
"to": [12, 16, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 0.25, 0.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [1.25, 0.25, 1.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [2.25, 0.25, 2.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [3.25, 0.25, 3.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [4.25, 0.25, 4.75, 0.75], "texture": "#0"},
|
||||
"down": {"uv": [5.25, 0.25, 5.75, 0.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 24, 4],
|
||||
"to": [12, 32, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 0.25, 6.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [7.25, 0.25, 7.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [8.25, 0.25, 8.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [9.25, 0.25, 9.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [10.25, 0.25, 10.75, 0.75], "texture": "#0"},
|
||||
"down": {"uv": [11.25, 0.25, 11.75, 0.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [10, 0, -1],
|
||||
"to": [18, 24, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 3]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 0.25, 12.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [13.25, 0.25, 13.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [14.25, 0.25, 14.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [15.25, 0.25, 15.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 1.25, 0.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [1.25, 1.25, 1.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-2, 0, 9],
|
||||
"to": [6, 24, 17],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, 0, 13]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 1.25, 2.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [3.25, 1.25, 3.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 1.25, 4.75, 1.75], "texture": "#0"},
|
||||
"west": {"uv": [5.25, 1.25, 5.75, 1.75], "texture": "#0"},
|
||||
"up": {"uv": [6.25, 1.25, 6.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [7.25, 1.25, 7.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "AB",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3]
|
||||
}
|
||||
]
|
||||
}
|
||||
57
src/main/resources/assets/szar/models/block/c.json
Normal file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [3, 0, 0],
|
||||
"to": [11, 8, 8],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [11, 0, 1]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 1.25, 8.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [9.25, 1.25, 9.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [10.25, 1.25, 10.75, 1.75], "texture": "#0"},
|
||||
"west": {"uv": [11.25, 1.25, 11.75, 1.75], "texture": "#0"},
|
||||
"up": {"uv": [12.25, 1.25, 12.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [13.25, 1.25, 13.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3, 24, 0],
|
||||
"to": [11, 32, 8],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [11, 0, 1]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 1.25, 14.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 1.25, 15.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 2.25, 0.75, 2.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 2.25, 1.75, 2.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 2.25, 2.75, 2.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 2.25, 3.75, 2.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [11, 0, 0],
|
||||
"to": [19, 32, 8],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [11, 0, 1]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 2.25, 4.75, 2.75], "texture": "#0"},
|
||||
"east": {"uv": [5.25, 2.25, 5.75, 2.75], "texture": "#0"},
|
||||
"south": {"uv": [6.25, 2.25, 6.75, 2.75], "texture": "#0"},
|
||||
"west": {"uv": [7.25, 2.25, 7.75, 2.75], "texture": "#0"},
|
||||
"up": {"uv": [8.25, 2.25, 8.75, 2.75], "texture": "#0"},
|
||||
"down": {"uv": [9.25, 2.25, 9.75, 2.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "C",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2]
|
||||
}
|
||||
]
|
||||
}
|
||||
57
src/main/resources/assets/szar/models/block/c_outline.json
Normal file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [3, 0, 10],
|
||||
"to": [11, 8, 18],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [11, 0, 11]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 1.25, 8.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [9.25, 1.25, 9.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [10.25, 1.25, 10.75, 1.75], "texture": "#0"},
|
||||
"west": {"uv": [11.25, 1.25, 11.75, 1.75], "texture": "#0"},
|
||||
"up": {"uv": [12.25, 1.25, 12.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [13.25, 1.25, 13.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3, 24, 10],
|
||||
"to": [11, 32, 18],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [11, 0, 11]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 1.25, 14.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 1.25, 15.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 2.25, 0.75, 2.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 2.25, 1.75, 2.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 2.25, 2.75, 2.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 2.25, 3.75, 2.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 0, 4],
|
||||
"to": [17, 32, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [9, 0, 5]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 2.25, 4.75, 2.75], "texture": "#0"},
|
||||
"east": {"uv": [5.25, 2.25, 5.75, 2.75], "texture": "#0"},
|
||||
"south": {"uv": [6.25, 2.25, 6.75, 2.75], "texture": "#0"},
|
||||
"west": {"uv": [7.25, 2.25, 7.75, 2.75], "texture": "#0"},
|
||||
"up": {"uv": [8.25, 2.25, 8.75, 2.75], "texture": "#0"},
|
||||
"down": {"uv": [9.25, 2.25, 9.75, 2.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "CB",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2]
|
||||
}
|
||||
]
|
||||
}
|
||||
378
src/main/resources/assets/szar/models/block/casino.json
Normal file
@@ -0,0 +1,378 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [19, 2, 7],
|
||||
"to": [21, 4, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 0.25, 0.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [1.25, 0.25, 1.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [2.25, 0.25, 2.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [3.25, 0.25, 3.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [4.25, 0.25, 4.75, 0.75], "texture": "#0"},
|
||||
"down": {"uv": [5.25, 0.25, 5.75, 0.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [19, 6, 7],
|
||||
"to": [21, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 0.25, 6.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [7.25, 0.25, 7.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [8.25, 0.25, 8.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [9.25, 0.25, 9.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [10.25, 0.25, 10.75, 0.75], "texture": "#0"},
|
||||
"down": {"uv": [11.25, 0.25, 11.75, 0.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [21, 0, 7],
|
||||
"to": [23, 6, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 0.25, 12.75, 0.75], "texture": "#0"},
|
||||
"east": {"uv": [13.25, 0.25, 13.75, 0.75], "texture": "#0"},
|
||||
"south": {"uv": [14.25, 0.25, 14.75, 0.75], "texture": "#0"},
|
||||
"west": {"uv": [15.25, 0.25, 15.75, 0.75], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 1.25, 0.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [1.25, 1.25, 1.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [17, 0, 7],
|
||||
"to": [19, 6, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 1.25, 2.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [3.25, 1.25, 3.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 1.25, 4.75, 1.75], "texture": "#0"},
|
||||
"west": {"uv": [5.25, 1.25, 5.75, 1.75], "texture": "#0"},
|
||||
"up": {"uv": [6.25, 1.25, 6.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [7.25, 1.25, 7.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [25, 0, 7],
|
||||
"to": [27, 2, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 1.25, 8.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [9.25, 1.25, 9.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [10.25, 1.25, 10.75, 1.75], "texture": "#0"},
|
||||
"west": {"uv": [11.25, 1.25, 11.75, 1.75], "texture": "#0"},
|
||||
"up": {"uv": [12.25, 1.25, 12.75, 1.75], "texture": "#0"},
|
||||
"down": {"uv": [13.25, 1.25, 13.75, 1.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [25, 6, 7],
|
||||
"to": [27, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 1.25, 14.75, 1.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 1.25, 15.75, 1.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 2.25, 0.75, 2.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 2.25, 1.75, 2.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 2.25, 2.75, 2.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 2.25, 3.75, 2.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [27, 0, 7],
|
||||
"to": [29, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 2.25, 4.75, 2.75], "texture": "#0"},
|
||||
"east": {"uv": [5.25, 2.25, 5.75, 2.75], "texture": "#0"},
|
||||
"south": {"uv": [6.25, 2.25, 6.75, 2.75], "texture": "#0"},
|
||||
"west": {"uv": [7.25, 2.25, 7.75, 2.75], "texture": "#0"},
|
||||
"up": {"uv": [8.25, 2.25, 8.75, 2.75], "texture": "#0"},
|
||||
"down": {"uv": [9.25, 2.25, 9.75, 2.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [11, 0, 7],
|
||||
"to": [14, 2, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.25, 2.25, 10.75, 2.75], "texture": "#0"},
|
||||
"east": {"uv": [11.25, 2.25, 11.75, 2.75], "texture": "#0"},
|
||||
"south": {"uv": [12.25, 2.25, 12.75, 2.75], "texture": "#0"},
|
||||
"west": {"uv": [13.25, 2.25, 13.75, 2.75], "texture": "#0"},
|
||||
"up": {"uv": [14.25, 2.25, 14.75, 2.75], "texture": "#0"},
|
||||
"down": {"uv": [15.25, 2.25, 15.75, 2.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 0, 7],
|
||||
"to": [11, 5, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 3.25, 0.75, 3.75], "texture": "#0"},
|
||||
"east": {"uv": [1.25, 3.25, 1.75, 3.75], "texture": "#0"},
|
||||
"south": {"uv": [2.25, 3.25, 2.75, 3.75], "texture": "#0"},
|
||||
"west": {"uv": [3.25, 3.25, 3.75, 3.75], "texture": "#0"},
|
||||
"up": {"uv": [4.25, 3.25, 4.75, 3.75], "texture": "#0"},
|
||||
"down": {"uv": [5.25, 3.25, 5.75, 3.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [11, 3, 7],
|
||||
"to": [12, 5, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 3.25, 6.75, 3.75], "texture": "#0"},
|
||||
"east": {"uv": [7.25, 3.25, 7.75, 3.75], "texture": "#0"},
|
||||
"south": {"uv": [8.25, 3.25, 8.75, 3.75], "texture": "#0"},
|
||||
"west": {"uv": [9.25, 3.25, 9.75, 3.75], "texture": "#0"},
|
||||
"up": {"uv": [10.25, 3.25, 10.75, 3.75], "texture": "#0"},
|
||||
"down": {"uv": [11.25, 3.25, 11.75, 3.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 6, 7],
|
||||
"to": [12, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 3.25, 12.75, 3.75], "texture": "#0"},
|
||||
"east": {"uv": [13.25, 3.25, 13.75, 3.75], "texture": "#0"},
|
||||
"south": {"uv": [14.25, 3.25, 14.75, 3.75], "texture": "#0"},
|
||||
"west": {"uv": [15.25, 3.25, 15.75, 3.75], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 4.25, 0.75, 4.75], "texture": "#0"},
|
||||
"down": {"uv": [1.25, 4.25, 1.75, 4.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [12, 3, 7],
|
||||
"to": [14, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 4.25, 2.75, 4.75], "texture": "#0"},
|
||||
"east": {"uv": [3.25, 4.25, 3.75, 4.75], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 4.25, 4.75, 4.75], "texture": "#0"},
|
||||
"west": {"uv": [5.25, 4.25, 5.75, 4.75], "texture": "#0"},
|
||||
"up": {"uv": [6.25, 4.25, 6.75, 4.75], "texture": "#0"},
|
||||
"down": {"uv": [7.25, 4.25, 7.75, 4.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 0, 7],
|
||||
"to": [6, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 4.25, 8.75, 4.75], "texture": "#0"},
|
||||
"east": {"uv": [9.25, 4.25, 9.75, 4.75], "texture": "#0"},
|
||||
"south": {"uv": [10.25, 4.25, 10.75, 4.75], "texture": "#0"},
|
||||
"west": {"uv": [11.25, 4.25, 11.75, 4.75], "texture": "#0"},
|
||||
"up": {"uv": [12.25, 4.25, 12.75, 4.75], "texture": "#0"},
|
||||
"down": {"uv": [13.25, 4.25, 13.75, 4.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-2, 1, 7],
|
||||
"to": [-1, 3, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 4.25, 14.75, 4.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 4.25, 15.75, 4.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 5.25, 0.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 5.25, 1.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 5.25, 2.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 5.25, 3.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-4, 0, 7],
|
||||
"to": [-2, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 5.25, 4.75, 5.75], "texture": "#0"},
|
||||
"east": {"uv": [5.25, 5.25, 5.75, 5.75], "texture": "#0"},
|
||||
"south": {"uv": [6.25, 5.25, 6.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [7.25, 5.25, 7.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [8.25, 5.25, 8.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [9.25, 5.25, 9.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-2, 3, 7],
|
||||
"to": [0, 5, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.25, 5.25, 10.75, 5.75], "texture": "#0"},
|
||||
"east": {"uv": [11.25, 5.25, 11.75, 5.75], "texture": "#0"},
|
||||
"south": {"uv": [12.25, 5.25, 12.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [13.25, 5.25, 13.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [14.25, 5.25, 14.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [15.25, 5.25, 15.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-1, 5, 7],
|
||||
"to": [0, 7, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 6.25, 0.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [1.25, 6.25, 1.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [2.25, 6.25, 2.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [3.25, 6.25, 3.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [4.25, 6.25, 4.75, 6.75], "texture": "#0"},
|
||||
"down": {"uv": [5.25, 6.25, 5.75, 6.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0, 0, 7],
|
||||
"to": [2, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 6.25, 6.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [7.25, 6.25, 7.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [8.25, 6.25, 8.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [9.25, 6.25, 9.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [10.25, 6.25, 10.75, 6.75], "texture": "#0"},
|
||||
"down": {"uv": [11.25, 6.25, 11.75, 6.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-10, 0, 7],
|
||||
"to": [-6, 2, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 6.25, 12.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [13.25, 6.25, 13.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [14.25, 6.25, 14.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [15.25, 6.25, 15.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 7.25, 0.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [1.25, 7.25, 1.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-12, 0, 7],
|
||||
"to": [-10, 6, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 7.25, 2.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [3.25, 7.25, 3.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 7.25, 4.75, 7.75], "texture": "#0"},
|
||||
"west": {"uv": [5.25, 7.25, 5.75, 7.75], "texture": "#0"},
|
||||
"up": {"uv": [6.25, 7.25, 6.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [7.25, 7.25, 7.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-12, 6, 7],
|
||||
"to": [-8, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 7.25, 8.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [9.25, 7.25, 9.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [10.25, 7.25, 10.75, 7.75], "texture": "#0"},
|
||||
"west": {"uv": [11.25, 7.25, 11.75, 7.75], "texture": "#0"},
|
||||
"up": {"uv": [12.25, 7.25, 12.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [13.25, 7.25, 13.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-8, 2, 7],
|
||||
"to": [-6, 8, 9],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 7.25, 14.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 7.25, 15.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 8.25, 0.75, 8.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 8.25, 1.75, 8.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 8.25, 2.75, 8.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 8.25, 3.75, 8.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 90, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "A",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3]
|
||||
},
|
||||
{
|
||||
"name": "C",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 0,
|
||||
"children": [4, 5, 6]
|
||||
},
|
||||
{
|
||||
"name": "S",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 2,
|
||||
"children": [7, 8, 9, 10, 11]
|
||||
},
|
||||
{
|
||||
"name": "I",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 3,
|
||||
"children": [12]
|
||||
},
|
||||
{
|
||||
"name": "N",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 4,
|
||||
"children": [13, 14, 15, 16, 17]
|
||||
},
|
||||
{
|
||||
"name": "O",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 6,
|
||||
"children": [18, 19, 20, 21]
|
||||
}
|
||||
]
|
||||
}
|
||||
73
src/main/resources/assets/szar/models/block/i.json
Normal file
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4, 0, 4],
|
||||
"to": [12, 32, 12],
|
||||
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 4.25, 8.75, 4.75], "texture": "#0"},
|
||||
"east": {"uv": [9.25, 4.25, 9.75, 4.75], "texture": "#0"},
|
||||
"south": {"uv": [10.25, 4.25, 10.75, 4.75], "texture": "#0"},
|
||||
"west": {"uv": [11.25, 4.25, 11.75, 4.75], "texture": "#0"},
|
||||
"up": {"uv": [12.25, 4.25, 12.75, 4.75], "texture": "#0"},
|
||||
"down": {"uv": [13.25, 4.25, 13.75, 4.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "I",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 3,
|
||||
"children": [0]
|
||||
}
|
||||
]
|
||||
}
|
||||
72
src/main/resources/assets/szar/models/block/i_outline.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4, 0, 4],
|
||||
"to": [12, 32, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 4.25, 8.75, 4.75], "texture": "#missing"},
|
||||
"east": {"uv": [9.25, 4.25, 9.75, 4.75], "texture": "#missing"},
|
||||
"south": {"uv": [10.25, 4.25, 10.75, 4.75], "texture": "#missing"},
|
||||
"west": {"uv": [11.25, 4.25, 11.75, 4.75], "texture": "#missing"},
|
||||
"up": {"uv": [12.25, 4.25, 12.75, 4.75], "texture": "#missing"},
|
||||
"down": {"uv": [13.25, 4.25, 13.75, 4.75], "texture": "#missing"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "I",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 3,
|
||||
"children": [0]
|
||||
}
|
||||
]
|
||||
}
|
||||
125
src/main/resources/assets/szar/models/block/n.json
Normal file
@@ -0,0 +1,125 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4, 4, 4],
|
||||
"to": [8, 12, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 4.25, 14.75, 4.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 4.25, 15.75, 4.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 5.25, 0.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 5.25, 1.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 5.25, 2.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 5.25, 3.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-4, 0, 4],
|
||||
"to": [4, 32, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 5.25, 4.75, 5.75], "texture": "#0"},
|
||||
"east": {"uv": [5.25, 5.25, 5.75, 5.75], "texture": "#0"},
|
||||
"south": {"uv": [6.25, 5.25, 6.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [7.25, 5.25, 7.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [8.25, 5.25, 8.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [9.25, 5.25, 9.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 12, 4],
|
||||
"to": [12, 20, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.25, 5.25, 10.75, 5.75], "texture": "#0"},
|
||||
"east": {"uv": [11.25, 5.25, 11.75, 5.75], "texture": "#0"},
|
||||
"south": {"uv": [12.25, 5.25, 12.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [13.25, 5.25, 13.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [14.25, 5.25, 14.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [15.25, 5.25, 15.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [8, 20, 4],
|
||||
"to": [12, 28, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 6.25, 0.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [1.25, 6.25, 1.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [2.25, 6.25, 2.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [3.25, 6.25, 3.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [4.25, 6.25, 4.75, 6.75], "texture": "#0"},
|
||||
"down": {"uv": [5.25, 6.25, 5.75, 6.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [12, 0, 4],
|
||||
"to": [20, 32, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 6.25, 6.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [7.25, 6.25, 7.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [8.25, 6.25, 8.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [9.25, 6.25, 9.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [10.25, 6.25, 10.75, 6.75], "texture": "#0"},
|
||||
"down": {"uv": [11.25, 6.25, 11.75, 6.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "N",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 4,
|
||||
"children": [0, 1, 2, 3, 4]
|
||||
}
|
||||
]
|
||||
}
|
||||
125
src/main/resources/assets/szar/models/block/n_outline.json
Normal file
@@ -0,0 +1,125 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4, 4, 6],
|
||||
"to": [8, 12, 14],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 4.25, 14.75, 4.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 4.25, 15.75, 4.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 5.25, 0.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 5.25, 1.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 5.25, 2.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 5.25, 3.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-2, 0, 9],
|
||||
"to": [6, 32, 17],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, 0, 13]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 5.25, 4.75, 5.75], "texture": "#0"},
|
||||
"east": {"uv": [5.25, 5.25, 5.75, 5.75], "texture": "#0"},
|
||||
"south": {"uv": [6.25, 5.25, 6.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [7.25, 5.25, 7.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [8.25, 5.25, 8.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [9.25, 5.25, 9.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 12, 4],
|
||||
"to": [12, 20, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.25, 5.25, 10.75, 5.75], "texture": "#0"},
|
||||
"east": {"uv": [11.25, 5.25, 11.75, 5.75], "texture": "#0"},
|
||||
"south": {"uv": [12.25, 5.25, 12.75, 5.75], "texture": "#0"},
|
||||
"west": {"uv": [13.25, 5.25, 13.75, 5.75], "texture": "#0"},
|
||||
"up": {"uv": [14.25, 5.25, 14.75, 5.75], "texture": "#0"},
|
||||
"down": {"uv": [15.25, 5.25, 15.75, 5.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [8, 20, 2],
|
||||
"to": [12, 28, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 6]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 6.25, 0.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [1.25, 6.25, 1.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [2.25, 6.25, 2.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [3.25, 6.25, 3.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [4.25, 6.25, 4.75, 6.75], "texture": "#0"},
|
||||
"down": {"uv": [5.25, 6.25, 5.75, 6.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [10, 0, -1],
|
||||
"to": [18, 32, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 3]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 6.25, 6.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [7.25, 6.25, 7.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [8.25, 6.25, 8.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [9.25, 6.25, 9.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [10.25, 6.25, 10.75, 6.75], "texture": "#0"},
|
||||
"down": {"uv": [11.25, 6.25, 11.75, 6.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "NB",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 4,
|
||||
"children": [0, 1, 2, 3, 4]
|
||||
}
|
||||
]
|
||||
}
|
||||
112
src/main/resources/assets/szar/models/block/o.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [1, 0, 7],
|
||||
"to": [17, 8, 15],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [4, 0, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 6.25, 12.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [13.25, 6.25, 13.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [14.25, 6.25, 14.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [15.25, 6.25, 15.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 7.25, 0.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [1.25, 7.25, 1.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-7, 0, 7],
|
||||
"to": [1, 24, 15],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [4, 0, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 7.25, 2.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [3.25, 7.25, 3.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 7.25, 4.75, 7.75], "texture": "#0"},
|
||||
"west": {"uv": [5.25, 7.25, 5.75, 7.75], "texture": "#0"},
|
||||
"up": {"uv": [6.25, 7.25, 6.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [7.25, 7.25, 7.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-7, 24, 7],
|
||||
"to": [9, 32, 15],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [4, 18, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 7.25, 8.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [9.25, 7.25, 9.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [10.25, 7.25, 10.75, 7.75], "texture": "#0"},
|
||||
"west": {"uv": [11.25, 7.25, 11.75, 7.75], "texture": "#0"},
|
||||
"up": {"uv": [12.25, 7.25, 12.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [13.25, 7.25, 13.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 8, 7],
|
||||
"to": [17, 32, 15],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [4, 6, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 7.25, 14.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 7.25, 15.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 8.25, 0.75, 8.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 8.25, 1.75, 8.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 8.25, 2.75, 8.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 8.25, 3.75, 8.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "O",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 6,
|
||||
"children": [0, 1, 2, 3]
|
||||
}
|
||||
]
|
||||
}
|
||||
112
src/main/resources/assets/szar/models/block/o_outline.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "szar:block/casino_red",
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [3, 0, 2],
|
||||
"to": [19, 8, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 5]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 6.25, 12.75, 6.75], "texture": "#0"},
|
||||
"east": {"uv": [13.25, 6.25, 13.75, 6.75], "texture": "#0"},
|
||||
"south": {"uv": [14.25, 6.25, 14.75, 6.75], "texture": "#0"},
|
||||
"west": {"uv": [15.25, 6.25, 15.75, 6.75], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 7.25, 0.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [1.25, 7.25, 1.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-1, 0, 10],
|
||||
"to": [7, 24, 18],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, 0, 13]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 7.25, 2.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [3.25, 7.25, 3.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 7.25, 4.75, 7.75], "texture": "#0"},
|
||||
"west": {"uv": [5.25, 7.25, 5.75, 7.75], "texture": "#0"},
|
||||
"up": {"uv": [6.25, 7.25, 6.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [7.25, 7.25, 7.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-1, 24, 8],
|
||||
"to": [15, 32, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, 18, 11]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.25, 7.25, 8.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [9.25, 7.25, 9.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [10.25, 7.25, 10.75, 7.75], "texture": "#0"},
|
||||
"west": {"uv": [11.25, 7.25, 11.75, 7.75], "texture": "#0"},
|
||||
"up": {"uv": [12.25, 7.25, 12.75, 7.75], "texture": "#0"},
|
||||
"down": {"uv": [13.25, 7.25, 13.75, 7.75], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [11, 8, 0],
|
||||
"to": [19, 32, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 6, 3]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 7.25, 14.75, 7.75], "texture": "#0"},
|
||||
"east": {"uv": [15.25, 7.25, 15.75, 7.75], "texture": "#0"},
|
||||
"south": {"uv": [0.25, 8.25, 0.75, 8.75], "texture": "#0"},
|
||||
"west": {"uv": [1.25, 8.25, 1.75, 8.75], "texture": "#0"},
|
||||
"up": {"uv": [2.25, 8.25, 2.75, 8.75], "texture": "#0"},
|
||||
"down": {"uv": [3.25, 8.25, 3.75, 8.75], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "OB",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 6,
|
||||
"children": [0, 1, 2, 3]
|
||||
}
|
||||
]
|
||||
}
|
||||
124
src/main/resources/assets/szar/models/block/s.json
Normal file
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [5, 0, 4],
|
||||
"to": [21, 8, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.25, 2.25, 10.75, 2.75], "texture": "#particle"},
|
||||
"east": {"uv": [11.25, 2.25, 11.75, 2.75], "texture": "#particle"},
|
||||
"south": {"uv": [12.25, 2.25, 12.75, 2.75], "texture": "#particle"},
|
||||
"west": {"uv": [13.25, 2.25, 13.75, 2.75], "texture": "#particle"},
|
||||
"up": {"uv": [14.25, 2.25, 14.75, 2.75], "texture": "#particle"},
|
||||
"down": {"uv": [15.25, 2.25, 15.75, 2.75], "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-3, 0, 4],
|
||||
"to": [5, 20, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 3.25, 0.75, 3.75], "texture": "#particle"},
|
||||
"east": {"uv": [1.25, 3.25, 1.75, 3.75], "texture": "#particle"},
|
||||
"south": {"uv": [2.25, 3.25, 2.75, 3.75], "texture": "#particle"},
|
||||
"west": {"uv": [3.25, 3.25, 3.75, 3.75], "texture": "#particle"},
|
||||
"up": {"uv": [4.25, 3.25, 4.75, 3.75], "texture": "#particle"},
|
||||
"down": {"uv": [5.25, 3.25, 5.75, 3.75], "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 12, 4],
|
||||
"to": [13, 20, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 3.25, 6.75, 3.75], "texture": "#particle"},
|
||||
"east": {"uv": [7.25, 3.25, 7.75, 3.75], "texture": "#particle"},
|
||||
"south": {"uv": [8.25, 3.25, 8.75, 3.75], "texture": "#particle"},
|
||||
"west": {"uv": [9.25, 3.25, 9.75, 3.75], "texture": "#particle"},
|
||||
"up": {"uv": [10.25, 3.25, 10.75, 3.75], "texture": "#particle"},
|
||||
"down": {"uv": [11.25, 3.25, 11.75, 3.75], "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-3, 24, 4],
|
||||
"to": [13, 32, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 3.25, 12.75, 3.75], "texture": "#particle"},
|
||||
"east": {"uv": [13.25, 3.25, 13.75, 3.75], "texture": "#particle"},
|
||||
"south": {"uv": [14.25, 3.25, 14.75, 3.75], "texture": "#particle"},
|
||||
"west": {"uv": [15.25, 3.25, 15.75, 3.75], "texture": "#particle"},
|
||||
"up": {"uv": [0.25, 4.25, 0.75, 4.75], "texture": "#particle"},
|
||||
"down": {"uv": [1.25, 4.25, 1.75, 4.75], "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [13, 12, 4],
|
||||
"to": [21, 32, 12],
|
||||
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 4.25, 2.75, 4.75], "texture": "#particle"},
|
||||
"east": {"uv": [3.25, 4.25, 3.75, 4.75], "texture": "#particle"},
|
||||
"south": {"uv": [4.25, 4.25, 4.75, 4.75], "texture": "#particle"},
|
||||
"west": {"uv": [5.25, 4.25, 5.75, 4.75], "texture": "#particle"},
|
||||
"up": {"uv": [6.25, 4.25, 6.75, 4.75], "texture": "#particle"},
|
||||
"down": {"uv": [7.25, 4.25, 7.75, 4.75], "texture": "#particle"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "S",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 2,
|
||||
"children": [0, 1, 2, 3, 4]
|
||||
}
|
||||
]
|
||||
}
|
||||
129
src/main/resources/assets/szar/models/block/s_outline.json
Normal file
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"particle": "szar:block/casino_red"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [5, 0, 0],
|
||||
"to": [21, 8, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [3, 2, 1]},
|
||||
"color": 7,
|
||||
"faces": {
|
||||
"north": {"uv": [10.25, 2.25, 10.75, 2.75], "texture": "#missing"},
|
||||
"east": {"uv": [11.25, 2.25, 11.75, 2.75], "texture": "#missing"},
|
||||
"south": {"uv": [12.25, 2.25, 12.75, 2.75], "texture": "#missing"},
|
||||
"west": {"uv": [13.25, 2.25, 13.75, 2.75], "texture": "#missing"},
|
||||
"up": {"uv": [14.25, 2.25, 14.75, 2.75], "texture": "#missing"},
|
||||
"down": {"uv": [15.25, 2.25, 15.75, 2.75], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-1, 0, 9],
|
||||
"to": [7, 20, 17],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [-2, 2, 10]},
|
||||
"color": 0,
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 3.25, 0.75, 3.75], "texture": "#missing"},
|
||||
"east": {"uv": [1.25, 3.25, 1.75, 3.75], "texture": "#missing"},
|
||||
"south": {"uv": [2.25, 3.25, 2.75, 3.75], "texture": "#missing"},
|
||||
"west": {"uv": [3.25, 3.25, 3.75, 3.75], "texture": "#missing"},
|
||||
"up": {"uv": [4.25, 3.25, 4.75, 3.75], "texture": "#missing"},
|
||||
"down": {"uv": [5.25, 3.25, 5.75, 3.75], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 12, 4],
|
||||
"to": [13, 20, 12],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [3, 11, 5]},
|
||||
"color": 4,
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 3.25, 6.75, 3.75], "texture": "#missing"},
|
||||
"east": {"uv": [7.25, 3.25, 7.75, 3.75], "texture": "#missing"},
|
||||
"south": {"uv": [8.25, 3.25, 8.75, 3.75], "texture": "#missing"},
|
||||
"west": {"uv": [9.25, 3.25, 9.75, 3.75], "texture": "#missing"},
|
||||
"up": {"uv": [10.25, 3.25, 10.75, 3.75], "texture": "#missing"},
|
||||
"down": {"uv": [11.25, 3.25, 11.75, 3.75], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-3, 24, 5],
|
||||
"to": [13, 32, 13],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [-3, 20, 6]},
|
||||
"color": 3,
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 3.25, 12.75, 3.75], "texture": "#missing"},
|
||||
"east": {"uv": [13.25, 3.25, 13.75, 3.75], "texture": "#missing"},
|
||||
"south": {"uv": [14.25, 3.25, 14.75, 3.75], "texture": "#missing"},
|
||||
"west": {"uv": [15.25, 3.25, 15.75, 3.75], "texture": "#missing"},
|
||||
"up": {"uv": [0.25, 4.25, 0.75, 4.75], "texture": "#missing"},
|
||||
"down": {"uv": [1.25, 4.25, 1.75, 4.75], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [10, 12, -3],
|
||||
"to": [18, 32, 5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 11, -2]},
|
||||
"color": 8,
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 4.25, 2.75, 4.75], "texture": "#missing"},
|
||||
"east": {"uv": [3.25, 4.25, 3.75, 4.75], "texture": "#missing"},
|
||||
"south": {"uv": [4.25, 4.25, 4.75, 4.75], "texture": "#missing"},
|
||||
"west": {"uv": [5.25, 4.25, 5.75, 4.75], "texture": "#missing"},
|
||||
"up": {"uv": [6.25, 4.25, 6.75, 4.75], "texture": "#missing"},
|
||||
"down": {"uv": [7.25, 4.25, 7.75, 4.75], "texture": "#missing"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"translation": [0, 0, -1.5],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"translation": [0, 0, -0.25],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [33.25, -15, -45.5]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -180, 0],
|
||||
"translation": [31.25, -15, -45.75]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 0.75, 0],
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0.25, 1.5, 0],
|
||||
"scale": [0.3, 0.3, 0.3]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [0, 38.5, 0],
|
||||
"scale": [4, 4, 4]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, -45, 0],
|
||||
"translation": [-0.5, 2, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [1.25, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "SB",
|
||||
"origin": [10, 2, 7],
|
||||
"color": 2,
|
||||
"children": [0, 1, 2, 3, 4]
|
||||
}
|
||||
]
|
||||
}
|
||||
3
src/main/resources/assets/szar/models/item/casino.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"parent": "szar:block/casino"
|
||||
}
|
||||
@@ -82,5 +82,29 @@
|
||||
"stream": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"lets_gamble": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "szar:lets_gamble",
|
||||
"stream": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"aw_dangit": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "szar:aw_dangit",
|
||||
"stream": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"won": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "szar:won",
|
||||
"stream": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
BIN
src/main/resources/assets/szar/sounds/aw_dangit.ogg
Normal file
BIN
src/main/resources/assets/szar/sounds/lets_gamble.ogg
Normal file
BIN
src/main/resources/assets/szar/sounds/won.ogg
Normal file
BIN
src/main/resources/assets/szar/textures/block/casino_red.png
Normal file
|
After Width: | Height: | Size: 122 B |
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"interpolate": false,
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 136 KiB |
109
src/main/resources/assets/szar/textures/block/slot_animation.py
Normal file
@@ -0,0 +1,109 @@
|
||||
import os
|
||||
import random
|
||||
from PIL import Image
|
||||
import json
|
||||
|
||||
# --------------------- CONFIG ---------------------
|
||||
INPUT_PATH = r"slotmachine_slots.png"
|
||||
OUTPUT_DIR = r"" # folder to save output
|
||||
NUM_SLOTS = 3
|
||||
SPEED = -4 # pixels per frame, positive = up, negative = down
|
||||
# ---------------------------------------
|
||||
|
||||
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
||||
|
||||
original = Image.open(INPUT_PATH)
|
||||
width, height = original.size
|
||||
FRAME_SIZE = width # square frames
|
||||
|
||||
if height % FRAME_SIZE != 0:
|
||||
raise ValueError("Image height must be divisible by its width (square frames).")
|
||||
|
||||
num_frames = height // FRAME_SIZE
|
||||
total_pixels = height # total pixels for smooth sliding
|
||||
|
||||
|
||||
# ---------------- HELPER FUNCTIONS ----------------
|
||||
def create_animation_image(img, start_y, speed=SPEED):
|
||||
"""
|
||||
Create rolling animation starting at absolute pixel y.
|
||||
Wraps around the image if crop goes past the bottom.
|
||||
Speed determines pixels per frame (positive = up, negative = down)
|
||||
"""
|
||||
frames_list = []
|
||||
for i in range(total_pixels):
|
||||
y = (start_y + i * speed) % total_pixels
|
||||
if y + FRAME_SIZE <= total_pixels:
|
||||
frame = img.crop((0, y, width, y + FRAME_SIZE))
|
||||
else:
|
||||
part1 = img.crop((0, y, width, total_pixels))
|
||||
part2 = img.crop((0, 0, width, FRAME_SIZE - (total_pixels - y)))
|
||||
frame = Image.new("RGBA", (width, FRAME_SIZE))
|
||||
frame.paste(part1, (0, 0))
|
||||
frame.paste(part2, (0, part1.height))
|
||||
frames_list.append(frame)
|
||||
|
||||
final_img = Image.new("RGBA", (width, FRAME_SIZE * len(frames_list)))
|
||||
for idx, frame in enumerate(frames_list):
|
||||
final_img.paste(frame, (0, idx * FRAME_SIZE))
|
||||
return final_img
|
||||
|
||||
|
||||
def save_png_and_mcmeta(image, base_name):
|
||||
png_path = os.path.join(OUTPUT_DIR, base_name + ".png")
|
||||
mcmeta_path = png_path + ".mcmeta"
|
||||
image.save(png_path)
|
||||
json.dump({"animation": {"interpolate": False, "frametime": 1}},
|
||||
open(mcmeta_path, "w"), indent=4)
|
||||
|
||||
|
||||
def generate_unique_shuffle(existing_orders):
|
||||
frames_indices = list(range(num_frames))
|
||||
attempt = 0
|
||||
while True:
|
||||
random.shuffle(frames_indices)
|
||||
conflict = False
|
||||
for order in existing_orders:
|
||||
for i, frame_idx in enumerate(frames_indices):
|
||||
if frame_idx == order[i]:
|
||||
conflict = True
|
||||
break
|
||||
if conflict:
|
||||
break
|
||||
if not conflict:
|
||||
return frames_indices
|
||||
attempt += 1
|
||||
if attempt > 1000:
|
||||
raise RuntimeError("Cannot generate unique shuffle after 1000 tries.")
|
||||
|
||||
|
||||
# ---------------- GENERATE SLOTS ----------------
|
||||
existing_orders = []
|
||||
|
||||
for slot_idx in range(1, NUM_SLOTS + 1):
|
||||
base_name = f"slot_{slot_idx}"
|
||||
|
||||
# generate fully unique shuffled frame order
|
||||
shuffle_order = generate_unique_shuffle(existing_orders)
|
||||
existing_orders.append(shuffle_order)
|
||||
|
||||
# build shuffled base image
|
||||
shuffled_img = Image.new("RGBA", (width, height))
|
||||
for i, frame_idx in enumerate(shuffle_order):
|
||||
frame = original.crop((0, frame_idx * FRAME_SIZE, width, (frame_idx + 1) * FRAME_SIZE))
|
||||
shuffled_img.paste(frame, (0, i * FRAME_SIZE))
|
||||
|
||||
# main sliding animation
|
||||
main_offset = random.randint(0, total_pixels - 1)
|
||||
main_img = create_animation_image(shuffled_img, main_offset, speed=SPEED)
|
||||
save_png_and_mcmeta(main_img, base_name)
|
||||
|
||||
# up/down relative to main, looping
|
||||
up_offset = (main_offset - FRAME_SIZE) % total_pixels
|
||||
down_offset = (main_offset + FRAME_SIZE) % total_pixels
|
||||
up_img = create_animation_image(shuffled_img, up_offset, speed=SPEED)
|
||||
down_img = create_animation_image(shuffled_img, down_offset, speed=SPEED)
|
||||
save_png_and_mcmeta(up_img, base_name + "_up")
|
||||
save_png_and_mcmeta(down_img, base_name + "_down")
|
||||
|
||||
print(f"Generated {NUM_SLOTS * 3 * 2} PNG+mcmeta files in {OUTPUT_DIR}")
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 11 KiB |
BIN
src/main/resources/assets/szar/textures/etc/casino.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
src/main/resources/data/szar/structures/casino.nbt
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"type": "szar:casino",
|
||||
"biomes": "#minecraft:is_overworld",
|
||||
"step": "surface_structures",
|
||||
"terrain_adaptation": "beard_thin",
|
||||
"spawn_overrides": {},
|
||||
"config": {}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"structures": [
|
||||
{
|
||||
"structure": "szar:casino",
|
||||
"weight": 1
|
||||
}
|
||||
],
|
||||
"placement": {
|
||||
"type": "minecraft:random_spread",
|
||||
"spacing": 40,
|
||||
"separation": 20,
|
||||
"salt": 753329346
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,6 @@
|
||||
"type": "minecraft:random_spread",
|
||||
"spacing": 40,
|
||||
"separation": 28,
|
||||
"salt": 987654321
|
||||
"salt": 295402814
|
||||
}
|
||||
}
|
||||
|
||||