This commit is contained in:
2026-03-01 18:32:28 +01:00
parent 5a79447622
commit 0c9a6a7d64
76 changed files with 2444 additions and 193 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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,39 +114,49 @@ 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();
String json = new String(in.readAllBytes());
in.close();
JsonObject obj = JsonParser.parseString(json).getAsJsonObject();
JsonArray capes = obj.getAsJsonArray("capes");
if (capes == null) return;
List<MojangCape> list = new ArrayList<>();
for (JsonElement e : capes) {
JsonObject c = e.getAsJsonObject();
MojangCape cape = new MojangCape();
cape.id = c.get("id").getAsString();
cape.name = c.has("alias") ? c.get("alias").getAsString() : cape.id;
cape.url = c.get("url").getAsString();
list.add(cape);
int responseCode = con.getResponseCode();
if (responseCode != 200) {
// 401 or any other response → silently ignore
con.disconnect();
return;
}
PacketByteBuf buf = PacketByteBufs.create();
buf.writeUuid(uuid);
buf.writeInt(list.size());
try (InputStream in = con.getInputStream()) {
String json = new String(in.readAllBytes());
for (MojangCape cape : list) {
buf.writeString(cape.id);
buf.writeString(cape.name);
buf.writeString(cape.url);
JsonObject obj = JsonParser.parseString(json).getAsJsonObject();
JsonArray capes = obj.getAsJsonArray("capes");
if (capes == null) return;
List<MojangCape> list = new ArrayList<>();
for (JsonElement e : capes) {
JsonObject c = e.getAsJsonObject();
MojangCape cape = new MojangCape();
cape.id = c.get("id").getAsString();
cape.name = c.has("alias") ? c.get("alias").getAsString() : cape.id;
cape.url = c.get("url").getAsString();
list.add(cape);
}
PacketByteBuf buf = PacketByteBufs.create();
buf.writeUuid(uuid);
buf.writeInt(list.size());
for (MojangCape cape : list) {
buf.writeString(cape.id);
buf.writeString(cape.name);
buf.writeString(cape.url);
}
ClientPlayNetworking.send(MOJANG_CAPES_SYNC, buf);
}
ClientPlayNetworking.send(MOJANG_CAPES_SYNC, buf);
} catch (Exception ex) {
ex.printStackTrace();
// Only log unexpected exceptions
ex.printStackTrace(System.err);
}
}

View File

@@ -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;
@@ -111,7 +173,7 @@ public class SlotMachineScreen extends HandledScreen<SlotMachineScreenHandler> {
// CALL SCREEN HANDLER LOGIC HERE
if (client != null && client.player != null && client.interactionManager != null) {
client.interactionManager.clickButton(handler.syncId, 0);
client.interactionManager.clickButton(handler.syncId, 0);
}
}
}
@@ -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();
}
}

View File

@@ -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);
});
});

View File

@@ -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);
}
}

View 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;
}
}

View 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
) {
}
}

View File

@@ -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

View File

@@ -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
}
final0 = SlotSymbol.roll(random);
final1 = rollWithBias(final0);
final2 = rollWithBias(final0, final1);
// === 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 = 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) {
blockEntity.setSymbols(
random.nextInt(7),
random.nextInt(7),
random.nextInt(7)
);
if (!spinning) {
if (blockEntity.getWorld().getTime() % IDLE_SPEED == 0) {
blockEntity.setSymbols(
random.nextInt(7),
random.nextInt(7),
random.nextInt(7)
);
}
return;
}
// Lock first reel
if (spinTicks == 40) {
blockEntity.setSymbols(
final0.ordinal(),
random.nextInt(7),
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 second reel
if (spinTicks == 20) {
blockEntity.setSymbols(
final0.ordinal(),
final1.ordinal(),
random.nextInt(7)
);
if (spinTimer >= (totalSpinDuration - RESULT_VIEW_TIME + 15)) {
propertyDelegate.set(1, forceWin ? 1 : 0);
}
// Lock third reel
if (spinTicks == 0) {
blockEntity.setSymbols(
final0.ordinal(),
final1.ordinal(),
final2.ordinal()
);
finishSpin(player);
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();
public ItemStack quickMove(PlayerEntity player, int index) {
if (spinning) return ItemStack.EMPTY;
return ItemStack.EMPTY;
}
if (!spinning) return;
public PropertyDelegate getPropertyDelegate() {
return propertyDelegate;
}
public int getSpinTimer() {
return spinTimer;
}
spinTicks--;
int reel0;
int reel1;
int reel2;
if (spinTicks > 40) {
reel0 = random.nextInt(7);
} else {
reel0 = final0.ordinal();
}
if (spinTicks > 20) {
reel1 = random.nextInt(7);
} else {
reel1 = final1.ordinal();
}
// 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;
}
}

View File

@@ -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;
@@ -34,6 +40,5 @@ public enum SlotSymbol {
case 3: return MELON_SLICE;
default: return CHORUS_FRUIT;
}
}
}
}

View File

@@ -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"),

View 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 }
}
}

View 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 }
}
}

View 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 }
}
}

View 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 }
}
}

View 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 }
}
}

View 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 }
}
}

View 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 }
}
}

View File

@@ -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"
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View 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]
}
]
}

View File

@@ -0,0 +1,3 @@
{
"parent": "szar:block/casino"
}

View File

@@ -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
}
]
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,6 @@
{
"animation": {
"interpolate": false,
"frametime": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 136 KiB

View 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}")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

View File

@@ -0,0 +1,8 @@
{
"type": "szar:casino",
"biomes": "#minecraft:is_overworld",
"step": "surface_structures",
"terrain_adaptation": "beard_thin",
"spawn_overrides": {},
"config": {}
}

View File

@@ -0,0 +1,14 @@
{
"structures": [
{
"structure": "szar:casino",
"weight": 1
}
],
"placement": {
"type": "minecraft:random_spread",
"spacing": 40,
"separation": 20,
"salt": 753329346
}
}

View File

@@ -9,6 +9,6 @@
"type": "minecraft:random_spread",
"spacing": 40,
"separation": 28,
"salt": 987654321
"salt": 295402814
}
}