diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehaviors.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehaviors.java index 5062787f0..71f3de6ed 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehaviors.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehaviors.java @@ -30,7 +30,7 @@ public class BukkitBlockBehaviors extends BlockBehaviors { public static final Key CHANGE_OVER_TIME_BLOCK = Key.from("craftengine:change_over_time_block"); public static final Key SIMPLE_STORAGE_BLOCK = Key.from("craftengine:simple_storage_block"); public static final Key TOGGLEABLE_LAMP_BLOCK = Key.from("craftengine:toggleable_lamp_block"); - public static final Key BOTTOM_HALF_STAIRS_BLOCK = Key.from("craftengine:bottom_half_stairs_block"); + public static final Key SOFA_BLOCK = Key.from("craftengine:sofa_block"); public static void init() { register(EMPTY, (block, args) -> EmptyBlockBehavior.INSTANCE); @@ -59,6 +59,6 @@ public class BukkitBlockBehaviors extends BlockBehaviors { register(CHANGE_OVER_TIME_BLOCK, ChangeOverTimeBlockBehavior.FACTORY); register(SIMPLE_STORAGE_BLOCK, SimpleStorageBlockBehavior.FACTORY); register(TOGGLEABLE_LAMP_BLOCK, ToggleableLampBlockBehavior.FACTORY); - register(BOTTOM_HALF_STAIRS_BLOCK, BottomHalfStairsBlockBehavior.FACTORY); + register(SOFA_BLOCK, SofaBlockBehavior.FACTORY); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/LampBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/LampBlockBehavior.java index cd46e8ff8..432837793 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/LampBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/LampBlockBehavior.java @@ -1,7 +1,6 @@ package net.momirealms.craftengine.bukkit.block.behavior; import net.momirealms.craftengine.bukkit.nms.FastNMS; -import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; import net.momirealms.craftengine.bukkit.util.BlockStateUtils; import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.core.block.BlockBehavior; @@ -9,9 +8,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.entity.player.InteractionResult; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; -import net.momirealms.craftengine.core.item.context.UseOnContext; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; @@ -22,34 +19,14 @@ import java.util.concurrent.Callable; public class LampBlockBehavior extends BukkitBlockBehavior { public static final Factory FACTORY = new Factory(); private final Property litProperty; - private final boolean canOpenWithHand; - public LampBlockBehavior(CustomBlock block, Property litProperty, boolean canOpenWithHand) { + public LampBlockBehavior(CustomBlock block, Property litProperty) { super(block); this.litProperty = litProperty; - this.canOpenWithHand = canOpenWithHand; - } - - @Override - public InteractionResult useWithoutItem(UseOnContext context, ImmutableBlockState state) { - if (!this.canOpenWithHand) { - return InteractionResult.PASS; - } - LampBlockBehavior behavior = state.behavior().getAs(LampBlockBehavior.class).orElse(null); - if (behavior == null) return InteractionResult.PASS; - FastNMS.INSTANCE.method$LevelWriter$setBlock( - context.getLevel().serverWorld(), - LocationUtils.toBlockPos(context.getClickedPos()), - state.cycle(behavior.litProperty).customBlockState().literalObject(), - 2 - ); - Optional.ofNullable(context.getPlayer()).ifPresent(p -> p.swingHand(context.getHand())); - return InteractionResult.SUCCESS_AND_CANCEL; } @Override public ImmutableBlockState updateStateForPlacement(BlockPlaceContext context, ImmutableBlockState state) { - if (this.canOpenWithHand) return state; Object level = context.getLevel().serverWorld(); state = state.with(this.litProperty, FastNMS.INSTANCE.method$SignalGetter$hasNeighborSignal(level, LocationUtils.toBlockPos(context.getClickedPos()))); return state; @@ -58,10 +35,9 @@ public class LampBlockBehavior extends BukkitBlockBehavior { @Override public void tick(Object thisBlock, Object[] args, Callable superMethod) throws Exception { Object blockState = args[0]; - Object world = args[1]; - if (this.canOpenWithHand || !CoreReflections.clazz$ServerLevel.isInstance(world)) return; Optional optionalCustomState = BlockStateUtils.getOptionalCustomBlockState(blockState); if (optionalCustomState.isEmpty()) return; + Object world = args[1]; Object blockPos = args[2]; ImmutableBlockState customState = optionalCustomState.get(); if (customState.get(this.litProperty) && !FastNMS.INSTANCE.method$SignalGetter$hasNeighborSignal(world, blockPos)) { @@ -75,10 +51,9 @@ public class LampBlockBehavior extends BukkitBlockBehavior { @Override public void neighborChanged(Object thisBlock, Object[] args, Callable superMethod) { Object blockState = args[0]; - Object world = args[1]; - if (this.canOpenWithHand || !CoreReflections.clazz$ServerLevel.isInstance(world)) return; Optional optionalCustomState = BlockStateUtils.getOptionalCustomBlockState(blockState); if (optionalCustomState.isEmpty()) return; + Object world = args[1]; Object blockPos = args[2]; ImmutableBlockState customState = optionalCustomState.get(); boolean lit = customState.get(this.litProperty); @@ -99,8 +74,7 @@ public class LampBlockBehavior extends BukkitBlockBehavior { @Override public BlockBehavior create(CustomBlock block, Map arguments) { Property lit = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("lit"), "warning.config.block.behavior.lamp.missing_lit"); - boolean canOpenWithHand = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-open-with-hand", false), "can-open-with-hand"); - return new LampBlockBehavior(block, lit, canOpenWithHand); + return new LampBlockBehavior(block, lit); } } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BottomHalfStairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SofaBlockBehavior.java similarity index 56% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BottomHalfStairsBlockBehavior.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SofaBlockBehavior.java index ad4a00690..7d7498c36 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BottomHalfStairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SofaBlockBehavior.java @@ -10,7 +10,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.properties.StairsShape; +import net.momirealms.craftengine.core.block.state.properties.SofaShape; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.util.Direction; import net.momirealms.craftengine.core.util.HorizontalDirection; @@ -22,12 +22,12 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.Callable; -public class BottomHalfStairsBlockBehavior extends BukkitBlockBehavior { +public class SofaBlockBehavior extends BukkitBlockBehavior { public static final Factory FACTORY = new Factory(); private final Property facingProperty; - private final Property shapeProperty; + private final Property shapeProperty; - public BottomHalfStairsBlockBehavior(CustomBlock block, Property facing, Property shape) { + public SofaBlockBehavior(CustomBlock block, Property facing, Property shape) { super(block); this.facingProperty = facing; this.shapeProperty = shape; @@ -42,7 +42,7 @@ public class BottomHalfStairsBlockBehavior extends BukkitBlockBehavior { Object fluidState = FastNMS.INSTANCE.method$BlockGetter$getFluidState(context.getLevel().serverWorld(), LocationUtils.toBlockPos(clickedPos)); blockState = blockState.with(this.waterloggedProperty, FastNMS.INSTANCE.method$FluidState$getType(fluidState) == MFluids.WATER); } - return blockState.with(this.shapeProperty, getStairsShape(blockState, context.getLevel().serverWorld(), clickedPos)); + return blockState.with(this.shapeProperty, getSofaShape(blockState, context.getLevel().serverWorld(), clickedPos)); } @Override @@ -57,47 +57,31 @@ public class BottomHalfStairsBlockBehavior extends BukkitBlockBehavior { FastNMS.INSTANCE.method$ScheduledTickAccess$scheduleFluidTick(args[updateShape$level], args[updateShape$blockPos], MFluids.WATER, 5); } Direction direction = DirectionUtils.fromNMSDirection(VersionHelper.isOrAbove1_21_2() ? args[4] : args[1]); - StairsShape stairsShape = getStairsShape(customState, level, LocationUtils.fromBlockPos(blockPos)); + SofaShape sofaShape = getSofaShape(customState, level, LocationUtils.fromBlockPos(blockPos)); return direction.axis().isHorizontal() - ? customState.with(this.shapeProperty, stairsShape).customBlockState().literalObject() + ? customState.with(this.shapeProperty, sofaShape).customBlockState().literalObject() : superMethod.call(); } - private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos pos) { + private SofaShape getSofaShape(ImmutableBlockState state, Object level, BlockPos pos) { Direction direction = state.get(this.facingProperty).toDirection(); - Object relativeBlockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(direction))); - Optional optionalCustomState1 = BlockStateUtils.getOptionalCustomBlockState(relativeBlockState1); - if (optionalCustomState1.isPresent()) { - ImmutableBlockState customState1 = optionalCustomState1.get(); - Optional optionalStairsBlockBehavior = customState1.behavior().getAs(BottomHalfStairsBlockBehavior.class); + Object relativeBlockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(direction.opposite()))); + Optional optionalCustomState = BlockStateUtils.getOptionalCustomBlockState(relativeBlockState); + if (optionalCustomState.isPresent()) { + ImmutableBlockState customState = optionalCustomState.get(); + Optional optionalStairsBlockBehavior = customState.behavior().getAs(SofaBlockBehavior.class); if (optionalStairsBlockBehavior.isPresent()) { - BottomHalfStairsBlockBehavior stairsBlockBehavior = optionalStairsBlockBehavior.get(); - Direction direction1 = customState1.get(stairsBlockBehavior.facingProperty).toDirection(); - if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction1.opposite())) { + SofaBlockBehavior stairsBlockBehavior = optionalStairsBlockBehavior.get(); + Direction direction1 = customState.get(stairsBlockBehavior.facingProperty).toDirection(); + if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction1)) { if (direction1 == direction.counterClockWise()) { - return StairsShape.OUTER_LEFT; + return SofaShape.INNER_LEFT; } - return StairsShape.OUTER_RIGHT; + return SofaShape.INNER_RIGHT; } } } - Object relativeBlockState2 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(direction.opposite()))); - Optional optionalCustomState2 = BlockStateUtils.getOptionalCustomBlockState(relativeBlockState2); - if (optionalCustomState2.isPresent()) { - ImmutableBlockState customState2 = optionalCustomState2.get(); - Optional optionalStairsBlockBehavior = customState2.behavior().getAs(BottomHalfStairsBlockBehavior.class); - if (optionalStairsBlockBehavior.isPresent()) { - BottomHalfStairsBlockBehavior stairsBlockBehavior = optionalStairsBlockBehavior.get(); - Direction direction2 = customState2.get(stairsBlockBehavior.facingProperty).toDirection(); - if (direction2.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction2)) { - if (direction2 == direction.counterClockWise()) { - return StairsShape.INNER_LEFT; - } - return StairsShape.INNER_RIGHT; - } - } - } - return StairsShape.STRAIGHT; + return SofaShape.STRAIGHT; } private boolean canTakeShape(ImmutableBlockState state, Object level, BlockPos pos, Direction face) { @@ -107,11 +91,11 @@ public class BottomHalfStairsBlockBehavior extends BukkitBlockBehavior { return true; } ImmutableBlockState anotherState = optionalAnotherState.get(); - Optional optionalBehavior = anotherState.behavior().getAs(BottomHalfStairsBlockBehavior.class); + Optional optionalBehavior = anotherState.behavior().getAs(SofaBlockBehavior.class); if (optionalBehavior.isEmpty()) { return true; } - BottomHalfStairsBlockBehavior anotherBehavior = optionalBehavior.get(); + SofaBlockBehavior anotherBehavior = optionalBehavior.get(); return anotherState.get(anotherBehavior.facingProperty) != state.get(this.facingProperty); } @@ -120,9 +104,9 @@ public class BottomHalfStairsBlockBehavior extends BukkitBlockBehavior { @Override @SuppressWarnings("unchecked") public BlockBehavior create(CustomBlock block, Map arguments) { - Property facing = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("facing"), "warning.config.block.behavior.bottom_half_stairs.missing_facing"); - Property shape = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("shape"), "warning.config.block.behavior.bottom_half_stairs.missing_shape"); - return new BottomHalfStairsBlockBehavior(block, facing, shape); + Property facing = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("facing"), "warning.config.block.behavior.sofa.missing_facing"); + Property shape = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("shape"), "warning.config.block.behavior.sofa.missing_shape"); + return new SofaBlockBehavior(block, facing, shape); } } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ToggleableLampBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ToggleableLampBlockBehavior.java index f47417c55..92894f798 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ToggleableLampBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ToggleableLampBlockBehavior.java @@ -3,11 +3,14 @@ package net.momirealms.craftengine.bukkit.block.behavior; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; import net.momirealms.craftengine.bukkit.util.BlockStateUtils; +import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.core.block.BlockBehavior; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; +import net.momirealms.craftengine.core.entity.player.InteractionResult; +import net.momirealms.craftengine.core.item.context.UseOnContext; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; @@ -18,15 +21,35 @@ public class ToggleableLampBlockBehavior extends BukkitBlockBehavior { public static final Factory FACTORY = new Factory(); private final Property litProperty; private final Property poweredProperty; + private final boolean canOpenWithHand; - public ToggleableLampBlockBehavior(CustomBlock block, Property litProperty, Property poweredProperty) { + public ToggleableLampBlockBehavior(CustomBlock block, Property litProperty, Property poweredProperty, boolean canOpenWithHand) { super(block); this.litProperty = litProperty; this.poweredProperty = poweredProperty; + this.canOpenWithHand = canOpenWithHand; + } + + @Override + public InteractionResult useWithoutItem(UseOnContext context, ImmutableBlockState state) { + if (!this.canOpenWithHand) { + return InteractionResult.PASS; + } + ToggleableLampBlockBehavior behavior = state.behavior().getAs(ToggleableLampBlockBehavior.class).orElse(null); + if (behavior == null) return InteractionResult.PASS; + FastNMS.INSTANCE.method$LevelWriter$setBlock( + context.getLevel().serverWorld(), + LocationUtils.toBlockPos(context.getClickedPos()), + state.cycle(behavior.litProperty).customBlockState().literalObject(), + 2 + ); + Optional.ofNullable(context.getPlayer()).ifPresent(p -> p.swingHand(context.getHand())); + return InteractionResult.SUCCESS_AND_CANCEL; } @Override public void onPlace(Object thisBlock, Object[] args, Callable superMethod) { + if (this.canOpenWithHand) return; Object state = args[0]; Object level = args[1]; Object pos = args[2]; @@ -40,6 +63,7 @@ public class ToggleableLampBlockBehavior extends BukkitBlockBehavior { @Override public void neighborChanged(Object thisBlock, Object[] args, Callable superMethod) { + if (this.canOpenWithHand) return; Object blockState = args[0]; Object world = args[1]; if (!CoreReflections.clazz$ServerLevel.isInstance(world)) return; @@ -69,7 +93,8 @@ public class ToggleableLampBlockBehavior extends BukkitBlockBehavior { public BlockBehavior create(CustomBlock block, Map arguments) { Property lit = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("lit"), "warning.config.block.behavior.toggleable_lamp.missing_lit"); Property powered = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("powered"), "warning.config.block.behavior.toggleable_lamp.missing_powered"); - return new ToggleableLampBlockBehavior(block, lit, powered); + boolean canOpenWithHand = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-open-with-hand", false), "can-open-with-hand"); + return new ToggleableLampBlockBehavior(block, lit, powered, canOpenWithHand); } } } diff --git a/common-files/src/main/resources/additional-real-blocks.yml b/common-files/src/main/resources/additional-real-blocks.yml index 3f92d92f0..afdf2f7ea 100644 --- a/common-files/src/main/resources/additional-real-blocks.yml +++ b/common-files/src/main/resources/additional-real-blocks.yml @@ -81,4 +81,4 @@ minecraft:cherry_fence_gate: 16 minecraft:bamboo_fence_gate: 16 minecraft:crimson_fence_gate: 16 minecraft:warped_fence_gate: 16 -minecraft:cactus: 15 \ No newline at end of file +minecraft:barrier: 24 \ No newline at end of file diff --git a/common-files/src/main/resources/resources/default/configuration/blocks.yml b/common-files/src/main/resources/resources/default/configuration/blocks.yml index 573ed098d..d1fa2dbd4 100644 --- a/common-files/src/main/resources/resources/default/configuration/blocks.yml +++ b/common-files/src/main/resources/resources/default/configuration/blocks.yml @@ -555,6 +555,353 @@ items#misc: facing=west,open=true: appearance: west_open id: 29 + default:sofa: + material: nether_brick + custom-model-data: 3008 + data: + item-name: + model: + type: minecraft:model + path: minecraft:item/custom/sofa + generation: + parent: minecraft:block/custom/sofa + behavior: + type: block_item + block: + loot: + template: default:loot_table/self + settings: + hardness: 2 + resistance: 3 + map-color: 56 + burn-chance: 5 + fire-spread-chance: 20 + burnable: true + is-suffocating: false + is-redstone-conductor: false + push-reaction: BLOCK + instrument: BASS + sounds: + break: minecraft:block.wood.break + fall: minecraft:block.wood.fall + hit: minecraft:block.wood.hit + place: minecraft:block.wood.place + step: minecraft:block.wood.step + states: + properties: + waterlogged: + type: boolean + default: false + appearances: + waterlogged=false: + state: sculk_sensor[power=1,sculk_sensor_phase=inactive,waterlogged=false] + model: + path: minecraft:block/custom/sofa + waterlogged=true: + state: sculk_sensor[power=1,sculk_sensor_phase=inactive,waterlogged=true] + model: + path: minecraft:block/custom/sofa + variants: + waterlogged=false: + appearance: waterlogged=false + id: 0 + waterlogged=true: + appearance: waterlogged=true + id: 1 + + default:connectable_sofa_straight: + material: nether_brick + custom-model-data: 3009 + data: + item-name: + model: + type: minecraft:model + path: minecraft:item/custom/sofa_straight + default:connectable_sofa_inner: + material: nether_brick + custom-model-data: 3010 + data: + item-name: + model: + type: minecraft:model + path: minecraft:item/custom/sofa_inner + default:connectable_sofa: + material: nether_brick + custom-model-data: 3011 + data: + item-name: + model: + type: minecraft:model + path: minecraft:item/custom/sofa_straight + behavior: + type: block_item + block: + loot: + template: default:loot_table/self + settings: + hardness: 2 + resistance: 3 + map-color: 56 + burn-chance: 5 + fire-spread-chance: 20 + burnable: true + is-suffocating: false + is-redstone-conductor: false + push-reaction: BLOCK + instrument: BASS + sounds: + break: minecraft:block.wood.break + fall: minecraft:block.wood.fall + hit: minecraft:block.wood.hit + place: minecraft:block.wood.place + step: minecraft:block.wood.step + behavior: + type: sofa_block + states: + properties: + facing: + type: horizontal_direction + shape: + type: sofa_shape + waterlogged: + type: boolean + default: false + appearances: + facing=east,shape=straight,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_straight + yaw: 90 + facing=north,shape=straight,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_straight + facing=south,shape=straight,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_straight + yaw: 180 + facing=west,shape=straight,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_straight + yaw: 270 + facing=east,shape=straight,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_straight + yaw: 90 + facing=north,shape=straight,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_straight + facing=south,shape=straight,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_straight + yaw: 180 + facing=west,shape=straight,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_straight + yaw: 270 + facing=east,shape=inner_left,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_inner + facing=north,shape=inner_left,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 270 + facing=south,shape=inner_left,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 90 + facing=west,shape=inner_left,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 180 + facing=east,shape=inner_left,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_inner + facing=north,shape=inner_left,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 270 + facing=south,shape=inner_left,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 90 + facing=west,shape=inner_left,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 180 + facing=east,shape=inner_right,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 90 + facing=north,shape=inner_right,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_inner + facing=south,shape=inner_right,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 180 + facing=west,shape=inner_right,waterlogged=false: + state: barrier[waterlogged=false] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 270 + facing=east,shape=inner_right,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 90 + facing=north,shape=inner_right,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_inner + facing=south,shape=inner_right,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 180 + facing=west,shape=inner_right,waterlogged=true: + state: barrier[waterlogged=true] + entity-renderer: + item: default:connectable_sofa_inner + yaw: 270 + variants: + facing=east,shape=inner_left,waterlogged=false: + appearance: facing=east,shape=inner_left,waterlogged=false + id: 0 + facing=east,shape=inner_right,waterlogged=false: + appearance: facing=east,shape=inner_right,waterlogged=false + id: 1 + facing=east,shape=straight,waterlogged=false: + appearance: facing=east,shape=straight,waterlogged=false + id: 2 + facing=north,shape=inner_left,waterlogged=false: + appearance: facing=north,shape=inner_left,waterlogged=false + id: 3 + facing=north,shape=inner_right,waterlogged=false: + appearance: facing=north,shape=inner_right,waterlogged=false + id: 4 + facing=north,shape=straight,waterlogged=false: + appearance: facing=north,shape=straight,waterlogged=false + id: 5 + facing=south,shape=inner_left,waterlogged=false: + appearance: facing=south,shape=inner_left,waterlogged=false + id: 6 + facing=south,shape=inner_right,waterlogged=false: + appearance: facing=south,shape=inner_right,waterlogged=false + id: 7 + facing=south,shape=straight,waterlogged=false: + appearance: facing=south,shape=straight,waterlogged=false + id: 8 + facing=west,shape=inner_left,waterlogged=false: + appearance: facing=west,shape=inner_left,waterlogged=false + id: 9 + facing=west,shape=inner_right,waterlogged=false: + appearance: facing=west,shape=inner_right,waterlogged=false + id: 10 + facing=west,shape=straight,waterlogged=false: + appearance: facing=west,shape=straight,waterlogged=false + id: 11 + facing=east,shape=inner_left,waterlogged=true: + appearance: facing=east,shape=inner_left,waterlogged=true + id: 12 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,shape=inner_right,waterlogged=true: + appearance: facing=east,shape=inner_right,waterlogged=true + id: 13 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,shape=straight,waterlogged=true: + appearance: facing=east,shape=straight,waterlogged=true + id: 14 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,shape=inner_left,waterlogged=true: + appearance: facing=north,shape=inner_left,waterlogged=true + id: 15 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,shape=inner_right,waterlogged=true: + appearance: facing=north,shape=inner_right,waterlogged=true + id: 16 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,shape=straight,waterlogged=true: + appearance: facing=north,shape=straight,waterlogged=true + id: 17 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,shape=inner_left,waterlogged=true: + appearance: facing=south,shape=inner_left,waterlogged=true + id: 18 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,shape=inner_right,waterlogged=true: + appearance: facing=south,shape=inner_right,waterlogged=true + id: 19 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,shape=straight,waterlogged=true: + appearance: facing=south,shape=straight,waterlogged=true + id: 20 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,shape=inner_left,waterlogged=true: + appearance: facing=west,shape=inner_left,waterlogged=true + id: 21 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,shape=inner_right,waterlogged=true: + appearance: facing=west,shape=inner_right,waterlogged=true + id: 22 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,shape=straight,waterlogged=true: + appearance: facing=west,shape=straight,waterlogged=true + id: 23 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water recipes#misc: default:chinese_lantern: type: shaped diff --git a/common-files/src/main/resources/resources/default/configuration/categories.yml b/common-files/src/main/resources/resources/default/configuration/categories.yml index abe2f99fd..8614b02f7 100644 --- a/common-files/src/main/resources/resources/default/configuration/categories.yml +++ b/common-files/src/main/resources/resources/default/configuration/categories.yml @@ -72,11 +72,12 @@ categories: - default:solid_gunpowder_block - default:ender_pearl_flower_seeds - default:gui_head_size_1 - - default:gui_head_size_4 - - minecraft:air - default:copper_coil - default:flame_elytra - default:cap - default:pebble - default:chessboard_block - - default:safe_block \ No newline at end of file + - default:safe_block + - default:sofa + - default:connectable_sofa + - default:gui_head_size_4 \ No newline at end of file diff --git a/common-files/src/main/resources/resources/default/configuration/i18n.yml b/common-files/src/main/resources/resources/default/configuration/i18n.yml index cf3e1cb2e..6af2e7556 100644 --- a/common-files/src/main/resources/resources/default/configuration/i18n.yml +++ b/common-files/src/main/resources/resources/default/configuration/i18n.yml @@ -47,6 +47,7 @@ i18n: item.flower_basket: Flower Basket item.chessboard_block: Chessboard Block item.safe_block: Safe Block + item.sofa: Sofa category.default.name: Default Assets category.default.lore: Contains the default configuration of CraftEngine category.palm_tree: Palm Tree @@ -104,6 +105,7 @@ i18n: item.flower_basket: 花篮 item.chessboard_block: 棋盘方块 item.safe_block: 保险柜 + item.sofa: 沙发 category.default.name: 默认资产 category.default.lore: 包含了CraftEngine的默认配置 category.palm_tree: 棕榈树 diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/block/custom/sofa.json b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/block/custom/sofa.json new file mode 100644 index 000000000..07bbf9eaa --- /dev/null +++ b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/block/custom/sofa.json @@ -0,0 +1,118 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "item/custom/sofa", + "particle": "item/custom/sofa" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [3, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 1]}, + "faces": { + "north": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "east": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "south": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "west": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "up": {"uv": [16, 15.5, 15.5, 15], "texture": "#0"}, + "down": {"uv": [16, 15.5, 15.5, 16], "texture": "#0"} + } + }, + { + "from": [13, 0, 1], + "to": [15, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 1]}, + "faces": { + "north": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "east": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "south": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "west": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15.5, 16, 15], "texture": "#0"}, + "down": {"uv": [15.5, 15.5, 16, 16], "texture": "#0"} + } + }, + { + "from": [13, 0, 13], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 15]}, + "faces": { + "north": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "east": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "south": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "west": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15, 16, 15.5], "texture": "#0"}, + "down": {"uv": [15.5, 16, 16, 15.5], "texture": "#0"} + } + }, + { + "from": [1, 0, 13], + "to": [3, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 15]}, + "faces": { + "north": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "east": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "south": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "west": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "up": {"uv": [16, 15, 15.5, 15.5], "texture": "#0"}, + "down": {"uv": [16, 16, 15.5, 15.5], "texture": "#0"} + } + }, + { + "from": [0.01, 2.51, 0.01], + "to": [15.99, 8.49, 15.99], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "north": {"uv": [4, 11.5, 8, 13], "texture": "#0"}, + "east": {"uv": [8, 11.5, 4, 13], "texture": "#0"}, + "south": {"uv": [4, 11.5, 8, 13], "texture": "#0"}, + "west": {"uv": [4, 11.5, 8, 13], "texture": "#0"}, + "up": {"uv": [4, 4, 0, 0], "texture": "#0"}, + "down": {"uv": [4, 12, 0, 16], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [60, -34, 0], + "translation": [-0.5, 3, 0.25], + "scale": [0.25, 0.25, 0.25] + }, + "thirdperson_lefthand": { + "rotation": [60, -34, 0], + "translation": [-0.5, 3, 0.25], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson_righthand": { + "rotation": [0, 180, 0], + "translation": [0.5, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "rotation": [0, 180, 0], + "translation": [0.5, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 2.75, 0], + "scale": [0.35, 0.35, 0.35] + }, + "gui": { + "rotation": [25, -135, 0], + "translation": [0.25, -1, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -16], + "scale": [2, 2, 2] + } + }, + "groups": [ + { + "name": "group", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1, 2, 3, 4] + } + ] +} \ No newline at end of file diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/sofa_inner.json b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/sofa_inner.json new file mode 100644 index 000000000..595bdfb4f --- /dev/null +++ b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/sofa_inner.json @@ -0,0 +1,144 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "item/custom/sofa", + "particle": "item/custom/sofa" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [3, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 1]}, + "faces": { + "north": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "east": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "south": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "west": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "up": {"uv": [16, 15.5, 15.5, 15], "texture": "#0"}, + "down": {"uv": [16, 15.5, 15.5, 16], "texture": "#0"} + } + }, + { + "from": [13, 0, 1], + "to": [15, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 1]}, + "faces": { + "north": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "east": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "south": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "west": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15.5, 16, 15], "texture": "#0"}, + "down": {"uv": [15.5, 15.5, 16, 16], "texture": "#0"} + } + }, + { + "from": [13, 0, 13], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 15]}, + "faces": { + "north": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "east": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "south": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "west": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15, 16, 15.5], "texture": "#0"}, + "down": {"uv": [15.5, 16, 16, 15.5], "texture": "#0"} + } + }, + { + "from": [1, 0, 13], + "to": [3, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 15]}, + "faces": { + "north": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "east": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "south": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "west": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "up": {"uv": [16, 15, 15.5, 15.5], "texture": "#0"}, + "down": {"uv": [16, 16, 15.5, 15.5], "texture": "#0"} + } + }, + { + "from": [0.01, 2.51, 0.01], + "to": [15.99, 8.49, 15.99], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "north": {"uv": [4, 11.5, 8, 13], "texture": "#0"}, + "east": {"uv": [8, 14.5, 4, 16], "texture": "#0"}, + "south": {"uv": [4, 13, 8, 14.5], "texture": "#0"}, + "west": {"uv": [4, 14.5, 8, 16], "texture": "#0"}, + "up": {"uv": [4, 8, 0, 4], "texture": "#0"}, + "down": {"uv": [4, 12, 0, 16], "texture": "#0"} + } + }, + { + "from": [0.02, 6.02, 12.02], + "to": [15.98, 19.98, 15.98], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7, 8, 14]}, + "faces": { + "north": {"uv": [13, 8.5, 9, 12], "texture": "#0"}, + "east": {"uv": [8, 12.5, 9, 16], "texture": "#0"}, + "south": {"uv": [9, 12.5, 13, 16], "texture": "#0"}, + "west": {"uv": [9, 12.5, 8, 16], "texture": "#0"}, + "up": {"uv": [9, 12, 8, 8.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [7.75, 10.5, 4.25, 11.5], "texture": "#0"} + } + }, + { + "from": [0.02, 6.02, 0.02], + "to": [3.98, 19.98, 15.98], + "rotation": {"angle": 22.5, "axis": "z", "origin": [2, 8, 8]}, + "faces": { + "north": {"uv": [9, 8.5, 8, 12], "texture": "#0"}, + "east": {"uv": [9, 8.5, 13, 12], "texture": "#0"}, + "south": {"uv": [8, 12.5, 9, 16], "texture": "#0"}, + "west": {"uv": [13, 12.5, 9, 16], "texture": "#0"}, + "up": {"uv": [8, 12, 9, 8.5], "texture": "#0"}, + "down": {"uv": [4.25, 11.5, 7.75, 10.5], "rotation": 90, "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [60, 180, 0], + "translation": [-0.5, 3, 0.25], + "scale": [0.25, 0.25, 0.25] + }, + "thirdperson_lefthand": { + "rotation": [60, 0, 0], + "translation": [-0.5, 3, 0.25], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson_righthand": { + "rotation": [0, 180, 0], + "translation": [0.5, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0.5, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 2.75, 0], + "scale": [0.35, 0.35, 0.35] + }, + "gui": { + "rotation": [25, -135, 0], + "translation": [0.25, -1, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -16], + "scale": [2, 2, 2] + } + }, + "groups": [ + { + "name": "group", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6] + } + ] +} \ No newline at end of file diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/sofa_straight.json b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/sofa_straight.json new file mode 100644 index 000000000..4c5174513 --- /dev/null +++ b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/sofa_straight.json @@ -0,0 +1,132 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "item/custom/sofa", + "particle": "item/custom/sofa" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [3, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 1]}, + "faces": { + "north": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "east": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "south": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "west": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "up": {"uv": [16, 15.5, 15.5, 15], "texture": "#0"}, + "down": {"uv": [16, 15.5, 15.5, 16], "texture": "#0"} + } + }, + { + "from": [13, 0, 1], + "to": [15, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 1]}, + "faces": { + "north": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "east": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "south": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "west": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15.5, 16, 15], "texture": "#0"}, + "down": {"uv": [15.5, 15.5, 16, 16], "texture": "#0"} + } + }, + { + "from": [13, 0, 13], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 15]}, + "faces": { + "north": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "east": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "south": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "west": {"uv": [15, 15.25, 15.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15, 16, 15.5], "texture": "#0"}, + "down": {"uv": [15.5, 16, 16, 15.5], "texture": "#0"} + } + }, + { + "from": [1, 0, 13], + "to": [3, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 15]}, + "faces": { + "north": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "east": {"uv": [15.5, 15.25, 15, 16], "texture": "#0"}, + "south": {"uv": [15, 15.25, 14.5, 16], "texture": "#0"}, + "west": {"uv": [14.5, 15.25, 15, 16], "texture": "#0"}, + "up": {"uv": [16, 15, 15.5, 15.5], "texture": "#0"}, + "down": {"uv": [16, 16, 15.5, 15.5], "texture": "#0"} + } + }, + { + "from": [0.01, 2.51, 0.01], + "to": [15.99, 8.49, 15.99], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "north": {"uv": [4, 11.5, 8, 13], "texture": "#0"}, + "east": {"uv": [8, 14.5, 4, 16], "texture": "#0"}, + "south": {"uv": [4, 13, 8, 14.5], "texture": "#0"}, + "west": {"uv": [4, 14.5, 8, 16], "texture": "#0"}, + "up": {"uv": [4, 12, 0, 8], "texture": "#0"}, + "down": {"uv": [4, 12, 0, 16], "texture": "#0"} + } + }, + { + "from": [0.02, 6.02, 12.02], + "to": [15.98, 19.98, 15.98], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7, 8, 14]}, + "faces": { + "north": {"uv": [9, 8.5, 13, 12], "texture": "#0"}, + "east": {"uv": [8, 12.5, 9, 16], "texture": "#0"}, + "south": {"uv": [9, 12.5, 13, 16], "texture": "#0"}, + "west": {"uv": [9, 12.5, 8, 16], "texture": "#0"}, + "up": {"uv": [9, 12, 8, 8.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [7.75, 10.5, 4.25, 11.5], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [60, -34, 0], + "translation": [-0.5, 3, 0.25], + "scale": [0.25, 0.25, 0.25] + }, + "thirdperson_lefthand": { + "rotation": [60, -34, 0], + "translation": [-0.5, 3, 0.25], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson_righthand": { + "rotation": [0, 180, 0], + "translation": [0.5, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "rotation": [0, 180, 0], + "translation": [0.5, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 2.75, 0], + "scale": [0.35, 0.35, 0.35] + }, + "gui": { + "rotation": [25, -135, 0], + "translation": [0.5, -1, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -16], + "scale": [2, 2, 2] + } + }, + "groups": [ + { + "name": "group", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1, 2, 3, 4, 5] + } + ] +} \ No newline at end of file diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/item/custom/sofa.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/item/custom/sofa.png new file mode 100644 index 000000000..25e76651c Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/item/custom/sofa.png differ diff --git a/common-files/src/main/resources/translations/en.yml b/common-files/src/main/resources/translations/en.yml index 79ee371ca..2b6d0705d 100644 --- a/common-files/src/main/resources/translations/en.yml +++ b/common-files/src/main/resources/translations/en.yml @@ -305,8 +305,8 @@ warning.config.block.behavior.slab.missing_type: "Issue found in file Issue found in file - The block '' is missing the required 'facing' property for 'stairs_block' behavior." warning.config.block.behavior.stairs.missing_half: "Issue found in file - The block '' is missing the required 'half' property for 'stairs_block' behavior." warning.config.block.behavior.stairs.missing_shape: "Issue found in file - The block '' is missing the required 'shape' property for 'stairs_block' behavior." -warning.config.block.behavior.bottom_half_stairs.missing_facing: "Issue found in file - The block '' is missing the required 'facing' property for 'bottom_half_stairs_block' behavior." -warning.config.block.behavior.bottom_half_stairs.missing_shape: "Issue found in file - The block '' is missing the required 'shape' property for 'bottom_half_stairs_block' behavior." +warning.config.block.behavior.sofa.missing_facing: "Issue found in file - The block '' is missing the required 'facing' property for 'sofa_block' behavior." +warning.config.block.behavior.sofa.missing_shape: "Issue found in file - The block '' is missing the required 'shape' property for 'sofa_block' behavior." warning.config.block.behavior.pressure_plate.missing_powered: "Issue found in file - The block '' is missing the required 'powered' property for 'pressure_plate_block' behavior." warning.config.block.behavior.grass.missing_feature: "Issue found in file - The block '' is missing the required 'feature' argument for 'grass_block' behavior." warning.config.block.behavior.double_high.missing_half: "Issue found in file - The block '' is missing the required 'half' property for 'double_block' behavior." diff --git a/common-files/src/main/resources/translations/zh_cn.yml b/common-files/src/main/resources/translations/zh_cn.yml index 1df5b5430..d78d52562 100644 --- a/common-files/src/main/resources/translations/zh_cn.yml +++ b/common-files/src/main/resources/translations/zh_cn.yml @@ -305,8 +305,8 @@ warning.config.block.behavior.slab.missing_type: "在文件 发 warning.config.block.behavior.stairs.missing_facing: "在文件 发现问题 - 方块 '' 的 'stairs_block' 行为缺少必需的 'facing' 属性" warning.config.block.behavior.stairs.missing_half: "在文件 发现问题 - 方块 '' 的 'stairs_block' 行为缺少必需的 'half' 属性" warning.config.block.behavior.stairs.missing_shape: "在文件 发现问题 - 方块 '' 的 'stairs_block' 行为缺少必需的 'shape' 属性" -warning.config.block.behavior.bottom_half_stairs.missing_facing: "在文件 发现问题 - 方块 '' 的 'bottom_half_stairs_block' 行为缺少必需的 'facing' 属性" -warning.config.block.behavior.bottom_half_stairs.missing_shape: "在文件 发现问题 - 方块 '' 的 'bottom_half_stairs_block' 行为缺少必需的 'shape' 属性" +warning.config.block.behavior.sofa.missing_facing: "在文件 发现问题 - 方块 '' 的 'sofa_block' 行为缺少必需的 'facing' 属性" +warning.config.block.behavior.sofa.missing_shape: "在文件 发现问题 - 方块 '' 的 'sofa_block' 行为缺少必需的 'shape' 属性" warning.config.block.behavior.pressure_plate.missing_powered: "在文件 发现问题 - 方块 '' 的 'pressure_plate_block' 行为缺少必需的 'powered' 属性" warning.config.block.behavior.grass.missing_feature: "在文件 发现问题 - 方块 '' 的 'grass_block' 行为缺少必需的 'feature' 参数" warning.config.block.behavior.double_high.missing_half: "在文件 发现问题 - 方块 '' 的 'double_block' 行为缺少必需的 'half' 属性" diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/Properties.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/Properties.java index a54c56afa..e5a143264 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/properties/Properties.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/Properties.java @@ -21,6 +21,7 @@ public final class Properties { public static final Key HINGE = Key.of("craftengine:hinge"); public static final Key STAIRS_SHAPE = Key.of("craftengine:stairs_shape"); public static final Key SLAB_TYPE = Key.of("craftengine:slab_type"); + public static final Key SOFA_SHAPE = Key.of("craftengine:sofa_shape"); static { register(BOOLEAN, BooleanProperty.FACTORY); @@ -36,6 +37,8 @@ public final class Properties { register(HINGE, new EnumProperty.Factory<>(DoorHinge.class)); register(STAIRS_SHAPE, new EnumProperty.Factory<>(StairsShape.class)); register(SLAB_TYPE, new EnumProperty.Factory<>(SlabType.class)); + register(SOFA_SHAPE, new EnumProperty.Factory<>(SofaShape.class)); + } public static void register(Key key, PropertyFactory factory) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SofaShape.java b/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SofaShape.java new file mode 100644 index 000000000..a9d717dcb --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SofaShape.java @@ -0,0 +1,7 @@ +package net.momirealms.craftengine.core.block.state.properties; + +public enum SofaShape { + STRAIGHT, + INNER_LEFT, + INNER_RIGHT, +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index c4dab03ce..81fcf2e9a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -463,6 +463,10 @@ public abstract class AbstractPackManager implements PackManager { plugin.saveResource("resources/default/resourcepack/assets/minecraft/models/block/custom/pebble_1.json"); plugin.saveResource("resources/default/resourcepack/assets/minecraft/models/block/custom/pebble_2.json"); plugin.saveResource("resources/default/resourcepack/assets/minecraft/models/block/custom/pebble_3.json"); + plugin.saveResource("resources/default/resourcepack/assets/minecraft/models/item/custom/sofa_straight.json"); + plugin.saveResource("resources/default/resourcepack/assets/minecraft/models/item/custom/sofa_inner.json"); + plugin.saveResource("resources/default/resourcepack/assets/minecraft/models/block/custom/sofa.json"); + plugin.saveResource("resources/default/resourcepack/assets/minecraft/textures/item/custom/sofa.png"); // ores plugin.saveResource("resources/default/configuration/ores.yml");