From 0c400ef4042505b56c6297798c1f2c8393ee7fc4 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Sun, 13 Sep 2026 21:23:06 -0500 Subject: [PATCH] a few puter fixes --- .../antarchy/content/block/ComputerBlock.java | 11 +++- .../block/entity/ComputerBlockEntity.java | 15 +++++- .../content/client/screen/ComputerScreen.java | 6 ++- .../antarchy/content/item/ComputerItem.java | 54 +++++++++++++++++++ .../data/antarchy/recipe/computer.json | 33 ++++++++---- .../data/antarchy/recipe/portal_gun.json | 25 --------- .../fabric/registry/AntarchyFabricItems.java | 3 +- .../client/AntarchyNeoForgeClient.java | 1 + .../registry/AntarchyNeoforgeItems.java | 3 +- 9 files changed, 112 insertions(+), 39 deletions(-) create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ComputerItem.java delete mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/portal_gun.json diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ComputerBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ComputerBlock.java index a976cd6f..6a8ca442 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ComputerBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ComputerBlock.java @@ -19,16 +19,20 @@ import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; public final class ComputerBlock extends BaseEntityBlock { public static final MapCodec CODEC = Block.simpleCodec(ComputerBlock::new); + public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); private static final VoxelShape SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D); public ComputerBlock(BlockBehaviour.Properties properties) { - super(properties); + super(properties.lightLevel(state -> state.getValue(ACTIVE) ? 7 : 0)); + registerDefaultState(stateDefinition.any().setValue(ACTIVE, false)); } @Override @@ -36,6 +40,11 @@ public final class ComputerBlock extends BaseEntityBlock { return CODEC; } + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(ACTIVE); + } + @Override protected RenderShape getRenderShape(BlockState state) { return RenderShape.ENTITYBLOCK_ANIMATED; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/ComputerBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/ComputerBlockEntity.java index 66b77be3..4f330314 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/ComputerBlockEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/ComputerBlockEntity.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.block.entity; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.ComputerBlock; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; @@ -14,6 +15,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -46,6 +48,9 @@ public final class ComputerBlockEntity extends BlockEntity implements GeoBlockEn public static void tick(Level level, BlockPos pos, BlockState state, ComputerBlockEntity computer) { boolean active = computer.isActive(); + if (!level.isClientSide && state.getValue(ComputerBlock.ACTIVE) != active) { + level.setBlock(pos, state.setValue(ComputerBlock.ACTIVE, active), 3); + } if (active != computer.lastActive) { computer.lastActive = active; computer.triggerAnim("transitions", active ? "turn_on" : "turn_off"); @@ -80,13 +85,21 @@ public final class ComputerBlockEntity extends BlockEntity implements GeoBlockEn public void activate() { if (level != null && !level.isClientSide) { activeUntil = Math.max(activeUntil, level.getGameTime() + 40L); + if (!getBlockState().getValue(ComputerBlock.ACTIVE)) { + level.setBlock(worldPosition, getBlockState().setValue(ComputerBlock.ACTIVE, true), 3); + } setChanged(); level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); } } public boolean isActive() { - return level != null && (level.hasNeighborSignal(worldPosition) || level.getGameTime() < activeUntil); + return level != null && (level.hasNeighborSignal(worldPosition) || level.getGameTime() < activeUntil || hasNearbyPlayer()); + } + + private boolean hasNearbyPlayer() { + Vec3 center = Vec3.atCenterOf(worldPosition); + return level.players().stream().anyMatch(player -> player.distanceToSqr(center) <= 25.0D); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/screen/ComputerScreen.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/screen/ComputerScreen.java index 090ec3a4..d411944d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/screen/ComputerScreen.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/screen/ComputerScreen.java @@ -6,6 +6,7 @@ import com.craisinlord.antarchy.content.guide.ComputerGuideData; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.util.FormattedCharSequence; @@ -66,6 +67,7 @@ public final class ComputerScreen extends Screen { @Override public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { + super.render(graphics, mouseX, mouseY, partialTick); int left = (this.width - WIDTH) / 2; int top = (this.height - HEIGHT) / 2; graphics.fill(0, 0, this.width, this.height, 0x99000000); @@ -94,7 +96,9 @@ public final class ComputerScreen extends Screen { } else { renderEntry(graphics, visibleEntries.get(selectedIndex), left + 124, top + 62, accent); } - super.render(graphics, mouseX, mouseY, partialTick); + for (Renderable renderable : this.renderables) { + renderable.render(graphics, mouseX, mouseY, partialTick); + } } private void renderEntry(GuiGraphics graphics, ComputerGuideData.Entry entry, int x, int y, int accent) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ComputerItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ComputerItem.java new file mode 100644 index 00000000..4515573d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ComputerItem.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import com.craisinlord.antarchy.content.block.ComputerBlock; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.function.Consumer; + +public final class ComputerItem extends BlockItem implements GeoItem { + private static final ResourceLocation MODEL = ResourceLocation.fromNamespaceAndPath("antarchy", "geo/computer.geo.json"); + private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath("antarchy", "textures/block/computer/computer.png"); + private static final ResourceLocation ANIMATION = ResourceLocation.fromNamespaceAndPath("antarchy", "animations/computer.animation.json"); + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); + + public ComputerItem(ComputerBlock block, Properties properties) { + super(block, properties); + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "state", state -> state.setAndContinue(RawAnimation.begin().thenLoop("off_state")))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return cache; + } + + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (renderer == null) { + renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL, TEXTURE, ANIMATION)); + } + return renderer; + } + }); + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/computer.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/computer.json index 0ba39bf9..aae9c142 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/recipe/computer.json +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/computer.json @@ -1,14 +1,29 @@ { - "type": "minecraft:crafting_shapeless", - "ingredients": [ - {"item": "minecraft:iron_block"}, - {"item": "minecraft:iron_block"}, - {"item": "minecraft:iron_block"}, - {"item": "minecraft:comparator"}, - {"item": "minecraft:iron_ingot"} + "type": "minecraft:crafting_shaped", + "key": { + "A": { + "item": "minecraft:iron_ingot" + }, + "B": { + "item": "minecraft:copper_ingot" + }, + "C": { + "item": "minecraft:tinted_glass" + }, + "D": { + "item": "minecraft:comparator" + }, + "E": { + "item": "antarchy:bluestone_comparator" + } + }, + "pattern": [ + "AAC", + "DBE", + "AAA" ], "result": { - "id": "antarchy:computer", - "count": 1 + "count": 1, + "id": "antarchy:computer" } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/portal_gun.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/portal_gun.json deleted file mode 100644 index fff9858d..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/recipe/portal_gun.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "T N", - "TSN", - "TBT" - ], - "key": { - "T": { - "item": "antarchy:titanium_ingot" - }, - "N": { - "item": "antarchy:nightmare_scale" - }, - "S": { - "item": "minecraft:nether_star" - }, - "B": { - "item": "antarchy:bluestone_comparator" - } - }, - "result": { - "id": "antarchy:portal_gun" - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index b3b3cb85..80d3b06c 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -100,7 +100,8 @@ public final class AntarchyFabricItems { public static final DeferredItem DUPLICATOR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DUPLICATOR_LOG); - public static final DeferredItem COMPUTER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.COMPUTER); + public static final DeferredItem COMPUTER_ITEM = ITEMS.register("computer", + () -> new ComputerItem(AntarchyFabricBlocks.COMPUTER.get(), new Item.Properties())); public static final DeferredItem OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_LOG); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index c764a880..982bad14 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -593,6 +593,7 @@ public final class AntarchyNeoForgeClient { registerGeoItemExtension(event, AntarchyNeoforgeItems.BATTLE_AXE.get()); registerGeoItemExtension(event, AntarchyNeoforgeItems.BIG_BERTHA.get()); registerGeoItemExtension(event, AntarchyNeoforgeItems.ROYAL_GUARDIAN_SWORD.get()); + registerGeoItemExtension(event, AntarchyNeoforgeItems.COMPUTER_ITEM.get()); } @SubscribeEvent diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 9d12becb..05116ff3 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -206,7 +206,8 @@ public final class AntarchyNeoforgeItems { // Block items public static final DeferredItem DUPLICATOR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DUPLICATOR_LOG); - public static final DeferredItem COMPUTER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.COMPUTER); + public static final DeferredItem COMPUTER_ITEM = ITEMS.register("computer", + () -> new ComputerItem(AntarchyNeoforgeBlocks.COMPUTER.get(), new Item.Properties())); public static final DeferredItem OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_LOG); public static final DeferredItem OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_WOOD); public static final DeferredItem MOSSY_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_LOG);