From 7d5fbca60386b1386f4199407445cb93442047e1 Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Sun, 19 Jan 2025 20:19:31 -0500 Subject: [PATCH 01/11] [factions-banking] Correct faction block GUI draw slot positions with new gui --- .../FactionNodes/FactionBeacon.java | 13 ++++++--- .../EventMgr/DimensionLoadingEvent.java | 1 - .../GuiMgr/FactionBlockScreenHandler.java | 27 ++++++++++--------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java index f431184..d804a01 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java @@ -32,8 +32,15 @@ public class FactionBeacon extends AbstractNode { private void ApplyEffects(ServerPlayerEntity player) { // player.setAbsorptionAmount(absorptionAmnt); - StatusEffectInstance sei = new StatusEffectInstance(StatusEffects.REGENERATION, 1000, 1, true, true, true); - player.addStatusEffect(sei); + StatusEffectInstance conduit = new StatusEffectInstance(StatusEffects.CONDUIT_POWER, 1, 0, true,true, true); + StatusEffectInstance regen = new StatusEffectInstance(StatusEffects.REGENERATION, 1, 0, true, true, true); + StatusEffectInstance hero = new StatusEffectInstance(StatusEffects.HERO_OF_THE_VILLAGE, 1, 0, true, true, true); + StatusEffectInstance fire = new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, 1, 0, true, true, true); + + player.addStatusEffect(conduit); + player.addStatusEffect(regen); + player.addStatusEffect(hero); + player.addStatusEffect(fire); } @Override @@ -43,7 +50,7 @@ public class FactionBeacon extends AbstractNode { // Make sure player can fly while inside the border. We don't ever want to run this more than once! // player.sendMessage(Text.of("Applying effects")); ApplyEffects((ServerPlayerEntity) player); - return ActionResult.SUCCESS; + return ActionResult.PASS; }); } diff --git a/src/main/java/jesse/keeblarcraft/EventMgr/DimensionLoadingEvent.java b/src/main/java/jesse/keeblarcraft/EventMgr/DimensionLoadingEvent.java index 7f9a875..acaedde 100644 --- a/src/main/java/jesse/keeblarcraft/EventMgr/DimensionLoadingEvent.java +++ b/src/main/java/jesse/keeblarcraft/EventMgr/DimensionLoadingEvent.java @@ -4,7 +4,6 @@ import java.util.HashMap; import java.util.Map.Entry; import jesse.keeblarcraft.ConfigMgr.ConfigManager; -import jesse.keeblarcraft.ChatStuff.ChatMsg; import jesse.keeblarcraft.world.dimension.ModDimensions; import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtList; diff --git a/src/main/java/jesse/keeblarcraft/GuiMgr/FactionBlockScreenHandler.java b/src/main/java/jesse/keeblarcraft/GuiMgr/FactionBlockScreenHandler.java index de01b96..a334435 100644 --- a/src/main/java/jesse/keeblarcraft/GuiMgr/FactionBlockScreenHandler.java +++ b/src/main/java/jesse/keeblarcraft/GuiMgr/FactionBlockScreenHandler.java @@ -31,14 +31,15 @@ public class FactionBlockScreenHandler extends ScreenHandler { this.blockEntity = (FactionBlockEntity) blockEntity; // Need a better way of storing these coordinates... - this.addSlot(new Slot(inventory, 0, 20, 11)); // top row - this.addSlot(new Slot(inventory, 1, 20, 39)); - this.addSlot(new Slot(inventory, 2, 49, 11)); - this.addSlot(new Slot(inventory, 3, 49, 39)); - this.addSlot(new Slot(inventory, 4, 78, 11)); - this.addSlot(new Slot(inventory, 5, 78, 39)); + this.addSlot(new Slot(inventory, 0, -1, 2)); // top row + this.addSlot(new Slot(inventory, 2, 35, 2)); + this.addSlot(new Slot(inventory, 4, 71, 2)); - this.addSlot(new Slot(inventory, 6, 128, 26)); + this.addSlot(new Slot(inventory, 1, 17, 36)); + this.addSlot(new Slot(inventory, 3, 54, 36)); + this.addSlot(new Slot(inventory, 5, 90, 36)); + + this.addSlot(new Slot(inventory, 6, 148, 20)); addPlayerInventory(playerInventory); addPlayerHotbar(playerInventory); @@ -82,12 +83,12 @@ public class FactionBlockScreenHandler extends ScreenHandler { // From Kaupenjoe video private void addPlayerInventory(PlayerInventory playerInventory) { + int spacing = -8; for (int i = 0; i < 3; ++i) { // Rows for (int l = 0; l < 9; ++l) { // Columns - // The fancy math (expanded from kaupen video for clarity for me for later) seems to just specify a few things int index = l + i * 9 + 9; // l = col, i*9 = the row to be on (scaling by 9 bc slots are 1-(9*3) in amount), +9 = where on that row to be! - int x = 8 + l * 18; // Texture draw position on image - int y = 84 + i * 18; // Texture draw position on image + int x = l * 22 + spacing; // Texture draw position on image + int y = 89 + i * 22; // Texture draw position on image this.addSlot(new Slot(playerInventory, index, x, y)); } } @@ -95,10 +96,12 @@ public class FactionBlockScreenHandler extends ScreenHandler { // From Kaupenjoe video private void addPlayerHotbar(PlayerInventory playerInventory) { + int spacing = -8; for (int i = 0; i < 9; ++i) { int index = i; // Index of hotbar (only 9 slots long in vanilla) - int x = 8 + i * 18; // Texture draw position - int y = 142; // Texture draw position + // int x = (8 + i * 18) + spacing; // Texture draw position + int x = i * 22 + spacing; // Texture draw position + int y = 162; // Texture draw position this.addSlot(new Slot(playerInventory, index, x, y)); } } -- 2.45.2 From fa5bc741ec1aa9ac576e9cfdd30f782102dcfa47 Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Sun, 19 Jan 2025 21:58:12 -0500 Subject: [PATCH 02/11] [factions-banking] Added faction attachment to block. Still a bit buggy --- .../FactionNodes/FactionBeacon.java | 11 ++++--- .../FactionNodes/FactionFlight.java | 8 ++--- .../Commands/FactionCommands.java | 2 +- .../BlockEntities/FactionBlockEntity.java | 19 ++++++++--- .../CustomBlocks/Blocks/FactionBaseBlock.java | 33 +++++++++++++++++-- .../PlayerCommandFlightCallback.java | 6 ++-- .../Callbacks/PlayerEnteredBaseCallback.java | 6 ++-- .../Callbacks/PlayerExitedBaseCallback.java | 6 ++-- .../Callbacks/PlayerInBaseCallback.java | 6 ++-- .../FactionMgr/FactionManager.java | 8 +++++ 10 files changed, 76 insertions(+), 29 deletions(-) diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java index d804a01..c0978ae 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java @@ -32,10 +32,11 @@ public class FactionBeacon extends AbstractNode { private void ApplyEffects(ServerPlayerEntity player) { // player.setAbsorptionAmount(absorptionAmnt); - StatusEffectInstance conduit = new StatusEffectInstance(StatusEffects.CONDUIT_POWER, 1, 0, true,true, true); - StatusEffectInstance regen = new StatusEffectInstance(StatusEffects.REGENERATION, 1, 0, true, true, true); - StatusEffectInstance hero = new StatusEffectInstance(StatusEffects.HERO_OF_THE_VILLAGE, 1, 0, true, true, true); - StatusEffectInstance fire = new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, 1, 0, true, true, true); + // Duration is in ticks + StatusEffectInstance conduit = new StatusEffectInstance(StatusEffects.CONDUIT_POWER, 40, 0, true,true, true); + StatusEffectInstance regen = new StatusEffectInstance(StatusEffects.REGENERATION, 40, 0, true, true, true); + StatusEffectInstance hero = new StatusEffectInstance(StatusEffects.HERO_OF_THE_VILLAGE, 40, 0, true, true, true); + StatusEffectInstance fire = new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, 40, 0, true, true, true); player.addStatusEffect(conduit); player.addStatusEffect(regen); @@ -46,7 +47,7 @@ public class FactionBeacon extends AbstractNode { @Override public void RegisterCallbacks() { System.out.println("REGISTER CALLBACKS FOR FACTION BEACON CALLED"); - PlayerInBaseCallback.EVENT.register((player, world) -> { + PlayerInBaseCallback.EVENT.register((player, world, power) -> { // Make sure player can fly while inside the border. We don't ever want to run this more than once! // player.sendMessage(Text.of("Applying effects")); ApplyEffects((ServerPlayerEntity) player); diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java index e100074..1a90eea 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java @@ -78,7 +78,7 @@ public class FactionFlight extends AbstractNode { @Override public void RegisterCallbacks() { - PlayerEnteredBaseCallback.EVENT.register((player, world) -> { + PlayerEnteredBaseCallback.EVENT.register((player, world, power) -> { player.sendMessage(Text.of("Faction flight enabled")); canFly = true; ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player; @@ -88,7 +88,7 @@ public class FactionFlight extends AbstractNode { return ActionResult.PASS; }); - PlayerInBaseCallback.EVENT.register((player, world) -> { + PlayerInBaseCallback.EVENT.register((player, world, power) -> { // Make sure player can fly while inside the border. We don't ever want to run this more than once! if (!canFly && !loginInBaseToggle) { player.sendMessage(Text.of("Faction flight enabled")); @@ -100,7 +100,7 @@ public class FactionFlight extends AbstractNode { return ActionResult.PASS; }); - PlayerCommandFlightCallback.EVENT.register((player, world) -> { + PlayerCommandFlightCallback.EVENT.register((player, world, power) -> { ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player; Boolean isFlying = TurnOnFlight(serverPlayer); // This is a toggle command; so first we get if the player is flying @@ -124,7 +124,7 @@ public class FactionFlight extends AbstractNode { return ActionResult.PASS; }); - PlayerExitedBaseCallback.EVENT.register((player, world) -> { + PlayerExitedBaseCallback.EVENT.register((player, world, power) -> { Timer timer = new Timer(); canFly = false; player.sendMessage(Text.of("You left the faction's perimeter! Flight will disable in 5 seconds...")); diff --git a/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java b/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java index 34a0f4d..122bf3b 100644 --- a/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java +++ b/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java @@ -125,7 +125,7 @@ public class FactionCommands { private int ForwardFlightCallback(CommandContext context) { if (context.getSource().isExecutedByPlayer()) { - ActionResult result = PlayerCommandFlightCallback.EVENT.invoker().interact(context.getSource().getPlayer(), context.getSource().getWorld()); + ActionResult result = PlayerCommandFlightCallback.EVENT.invoker().interact(context.getSource().getPlayer(), context.getSource().getWorld(), FactionManager.GetInstance().GetFactionPower(context.getSource().getPlayer())); } return 0; } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java index 847ebe9..e77440a 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import jesse.keeblarcraft.AttributeMgr.AttributeMgr; import jesse.keeblarcraft.AttributeMgr.AttributeTree; +import jesse.keeblarcraft.FactionMgr.FactionManager; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerEnteredBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerExitedBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerInBaseCallback; @@ -34,6 +35,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan private static final int DEFENSE_SLOT_TWO = 1; private static final int OFFENSE_SLOT_ONE = 2; private static final int OFFENSE_SLOT_TWO = 3; + private String faction; // Faction this block belongs to private static int factionPower = 0; Boolean stopMobSpawn = true; Boolean hasBuildFlight = true; @@ -42,10 +44,14 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan protected final PropertyDelegate propertyDelegate; + public FactionBlockEntity(BlockPos pos, BlockState state, String faction) { + this(pos, state); + this.faction = faction; + } + public FactionBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityRegistration.FACTION_BLOCK_ENTITY, pos, state); this.propertyDelegate = new PropertyDelegate() { - @Override public int get(int index) { // The only value we need to get/delegate is faction power @@ -123,25 +129,28 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan // Tick method is called 20 times a second public void tick(World world, BlockPos pos, BlockState state) { // For reasons unknown to me and only to Kaupenjoe (youtube video) - we never want to call this on a client. - if (world.isClient()) { + if (world.isClient() || faction == null) { return; } + factionPower = FactionManager.GetInstance().GetFactionPower(faction); + // TODO: Optimize this block so that when it is placed the placers UUID is related to a faction and only pull from a list of those players not the entire server for (PlayerEntity player : world.getPlayers()) { Boolean isPlayerInFactionRadius = IsPlayerInBounds(player, pos); if (isPlayerInFactionRadius) { // Run individual faction modules for players here // First time entry callback check + System.out.println("FACTION IS " + faction); if (!playersInRadius.contains(player.getUuidAsString())) { playersInRadius.add(player.getUuidAsString()); - ActionResult result = PlayerEnteredBaseCallback.EVENT.invoker().interact(player, world); + ActionResult result = PlayerEnteredBaseCallback.EVENT.invoker().interact(player, world, factionPower); } // Invoke the flight attribute on this player if (hasBuildFlight) { AttributeMgr.ApplyAttribute(player.getUuidAsString(), "faction_flight"); - ActionResult result = PlayerInBaseCallback.EVENT.invoker().interact(player, world); + ActionResult result = PlayerInBaseCallback.EVENT.invoker().interact(player, world, factionPower); } if (hasSuperBeacon) { @@ -150,7 +159,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan } } else if (!isPlayerInFactionRadius && playersInRadius.contains(player.getUuidAsString())) { playersInRadius.remove(player.getUuidAsString()); - ActionResult result = PlayerExitedBaseCallback.EVENT.invoker().interact(player, world); + ActionResult result = PlayerExitedBaseCallback.EVENT.invoker().interact(player, world, factionPower); } } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java index f26593a..86dca90 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java @@ -1,23 +1,30 @@ package jesse.keeblarcraft.CustomBlocks.Blocks; +import org.jetbrains.annotations.Nullable; + import jesse.keeblarcraft.CustomBlocks.BlockEntities.BlockEntityRegistration; import jesse.keeblarcraft.CustomBlocks.BlockEntities.FactionBlockEntity; +import jesse.keeblarcraft.FactionMgr.FactionManager; import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityTicker; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.ItemScatterer; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.World; public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProvider { // public static final VoxelShape SHAPE = Block.createCuboidShape(0, 0, 0, 16, 12, 16); + private String faction; // Faction attached to this block public FactionBaseBlock(Settings settings) { super(settings); @@ -33,9 +40,31 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv return BlockRenderType.MODEL; } + @Override + public void onPlaced(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack itemStack) { + if (world.isClient) { + return; + } + + if (placer.isPlayer()) { + // We need to run faction checks here and make sure this player owns a faction otherwise they are NOT allowed to place it! + ServerPlayerEntity player = (ServerPlayerEntity) placer; + String fac = FactionManager.GetInstance().GetFactionOfPlayer(player.getUuidAsString()); + + // An empty string implies NO faction; only do things if it is NOT empty + if (!fac.equals("")) { + faction = fac; + player.sendMessage(Text.of("This block now belongs to the " + faction + " faction.")); + } else { + player.sendMessage(Text.of("You do not appear to be in a faction, and thus this block cannot be placed!")); + world.removeBlock(pos, false); + } + } + } + @Override public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { - return new FactionBlockEntity(pos, state); + return new FactionBlockEntity(pos, state, faction); } // If block is destroyed; drop inventory diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerCommandFlightCallback.java b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerCommandFlightCallback.java index 77f446b..ba1c933 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerCommandFlightCallback.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerCommandFlightCallback.java @@ -8,9 +8,9 @@ import net.minecraft.world.World; public interface PlayerCommandFlightCallback { Event EVENT = EventFactory.createArrayBacked(PlayerCommandFlightCallback.class, - (listeners) -> (player, world) -> { + (listeners) -> (player, world, power) -> { for (PlayerCommandFlightCallback listener : listeners) { - ActionResult result = listener.interact(player, world); + ActionResult result = listener.interact(player, world, power); if (result != ActionResult.PASS) { return result; @@ -20,5 +20,5 @@ public interface PlayerCommandFlightCallback { return ActionResult.PASS; }); - ActionResult interact(PlayerEntity player, World world); + ActionResult interact(PlayerEntity player, World world, Integer factionPower); } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerEnteredBaseCallback.java b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerEnteredBaseCallback.java index b1da132..d570e65 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerEnteredBaseCallback.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerEnteredBaseCallback.java @@ -8,9 +8,9 @@ import net.minecraft.world.World; public interface PlayerEnteredBaseCallback { Event EVENT = EventFactory.createArrayBacked(PlayerEnteredBaseCallback.class, - (listeners) -> (player, world) -> { + (listeners) -> (player, world, power) -> { for (PlayerEnteredBaseCallback listener : listeners) { - ActionResult result = listener.interact(player, world); + ActionResult result = listener.interact(player, world, power); if (result != ActionResult.PASS) { return result; @@ -20,5 +20,5 @@ public interface PlayerEnteredBaseCallback { return ActionResult.PASS; }); - ActionResult interact(PlayerEntity player, World world); + ActionResult interact(PlayerEntity player, World world, Integer factionPower); } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerExitedBaseCallback.java b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerExitedBaseCallback.java index d339f1e..6b5e74a 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerExitedBaseCallback.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerExitedBaseCallback.java @@ -8,9 +8,9 @@ import net.minecraft.world.World; public interface PlayerExitedBaseCallback { Event EVENT = EventFactory.createArrayBacked(PlayerExitedBaseCallback.class, - (listeners) -> (player, world) -> { + (listeners) -> (player, world, power) -> { for (PlayerExitedBaseCallback listener : listeners) { - ActionResult result = listener.interact(player, world); + ActionResult result = listener.interact(player, world, power); if (result != ActionResult.PASS) { return result; @@ -20,5 +20,5 @@ public interface PlayerExitedBaseCallback { return ActionResult.PASS; }); - ActionResult interact(PlayerEntity player, World world); + ActionResult interact(PlayerEntity player, World world, Integer factionPower); } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerInBaseCallback.java b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerInBaseCallback.java index 84da82a..b4f8868 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerInBaseCallback.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerInBaseCallback.java @@ -8,9 +8,9 @@ import net.minecraft.world.World; public interface PlayerInBaseCallback { Event EVENT = EventFactory.createArrayBacked(PlayerInBaseCallback.class, - (listeners) -> (player, world) -> { + (listeners) -> (player, world, power) -> { for (PlayerInBaseCallback listener : listeners) { - ActionResult result = listener.interact(player, world); + ActionResult result = listener.interact(player, world, power); if (result != ActionResult.PASS) { return result; @@ -20,5 +20,5 @@ public interface PlayerInBaseCallback { return ActionResult.PASS; }); - ActionResult interact(PlayerEntity player, World world); + ActionResult interact(PlayerEntity player, World world, Integer factionPower); } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java index ad0ad8f..eacf0d8 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java @@ -214,6 +214,14 @@ public class FactionManager { return success; } + public Integer GetFactionPower(String factionName) { + int fPower = 0; + if (factionConfig.factions.IsValid(factionName)) { + fPower = factionConfig.factions.GetPower(factionName); + } + return fPower; + } + public Integer GetFactionPower(ServerPlayerEntity caller) { Integer amount = 0; -- 2.45.2 From 0ed8838de0831e977e840f3d6c70d3f650c8a3ad Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Mon, 20 Jan 2025 00:20:18 -0500 Subject: [PATCH 03/11] [factions-banking] Fixed faction block to be correct faction on first place. Added faction tiers. --- .../FactionNodes/FactionBeacon.java | 2 +- .../FactionNodes/FactionFlight.java | 10 ++-- .../keeblarcraft/Commands/BankCommands.java | 3 -- .../Commands/FactionCommands.java | 53 +++++++++++++++---- .../BlockEntities/FactionBlockEntity.java | 13 +++-- .../CustomBlocks/Blocks/FactionBaseBlock.java | 9 +++- .../PlayerCommandFlightCallback.java | 7 +-- .../Callbacks/PlayerEnteredBaseCallback.java | 7 +-- .../Callbacks/PlayerExitedBaseCallback.java | 7 +-- .../Callbacks/PlayerInBaseCallback.java | 7 +-- .../FactionMgr/FactionManager.java | 23 +++++--- .../keeblarcraft/FactionMgr/FactionTier.java | 39 ++++++++++++++ 12 files changed, 139 insertions(+), 41 deletions(-) create mode 100644 src/main/java/jesse/keeblarcraft/FactionMgr/FactionTier.java diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java index c0978ae..a6b43e6 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java @@ -47,7 +47,7 @@ public class FactionBeacon extends AbstractNode { @Override public void RegisterCallbacks() { System.out.println("REGISTER CALLBACKS FOR FACTION BEACON CALLED"); - PlayerInBaseCallback.EVENT.register((player, world, power) -> { + PlayerInBaseCallback.EVENT.register((player, world, power, factionTier) -> { // Make sure player can fly while inside the border. We don't ever want to run this more than once! // player.sendMessage(Text.of("Applying effects")); ApplyEffects((ServerPlayerEntity) player); diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java index 1a90eea..82e3f19 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java @@ -78,7 +78,7 @@ public class FactionFlight extends AbstractNode { @Override public void RegisterCallbacks() { - PlayerEnteredBaseCallback.EVENT.register((player, world, power) -> { + PlayerEnteredBaseCallback.EVENT.register((player, world, power, factionTier) -> { player.sendMessage(Text.of("Faction flight enabled")); canFly = true; ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player; @@ -88,7 +88,9 @@ public class FactionFlight extends AbstractNode { return ActionResult.PASS; }); - PlayerInBaseCallback.EVENT.register((player, world, power) -> { + PlayerInBaseCallback.EVENT.register((player, world, power, factionTier) -> { + System.out.println("Faction power is " + power); + System.out.println("Faction tier is " + factionTier.name()); // Make sure player can fly while inside the border. We don't ever want to run this more than once! if (!canFly && !loginInBaseToggle) { player.sendMessage(Text.of("Faction flight enabled")); @@ -100,7 +102,7 @@ public class FactionFlight extends AbstractNode { return ActionResult.PASS; }); - PlayerCommandFlightCallback.EVENT.register((player, world, power) -> { + PlayerCommandFlightCallback.EVENT.register((player, world, power, factionTier) -> { ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player; Boolean isFlying = TurnOnFlight(serverPlayer); // This is a toggle command; so first we get if the player is flying @@ -124,7 +126,7 @@ public class FactionFlight extends AbstractNode { return ActionResult.PASS; }); - PlayerExitedBaseCallback.EVENT.register((player, world, power) -> { + PlayerExitedBaseCallback.EVENT.register((player, world, power, factionTier) -> { Timer timer = new Timer(); canFly = false; player.sendMessage(Text.of("You left the faction's perimeter! Flight will disable in 5 seconds...")); diff --git a/src/main/java/jesse/keeblarcraft/Commands/BankCommands.java b/src/main/java/jesse/keeblarcraft/Commands/BankCommands.java index 2a69593..8e4a54d 100644 --- a/src/main/java/jesse/keeblarcraft/Commands/BankCommands.java +++ b/src/main/java/jesse/keeblarcraft/Commands/BankCommands.java @@ -2,7 +2,6 @@ package jesse.keeblarcraft.Commands; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; -import com.mojang.brigadier.context.CommandContext; import java.util.List; import java.util.ArrayList; import java.util.Arrays; @@ -11,7 +10,6 @@ import java.util.Map.Entry; import static java.util.Map.entry; -import jesse.keeblarcraft.BankMgr.BankAccountType; import jesse.keeblarcraft.BankMgr.BankManager; import jesse.keeblarcraft.BankMgr.IndividualAccount; import jesse.keeblarcraft.BankMgr.IndividualBank; @@ -20,7 +18,6 @@ import jesse.keeblarcraft.ChatStuff.ChatFormatting.COLOR_CODE; import jesse.keeblarcraft.ChatStuff.ChatMsg; import jesse.keeblarcraft.ConfigMgr.ConfigManager; import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; diff --git a/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java b/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java index 122bf3b..6702358 100644 --- a/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java +++ b/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java @@ -8,11 +8,13 @@ import com.mojang.brigadier.context.CommandContext; import jesse.keeblarcraft.FactionMgr.FactionManager; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerCommandFlightCallback; +import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; @@ -32,6 +34,9 @@ public class FactionCommands { var promote = CommandManager.literal("promote").build(); var demote = CommandManager.literal("demote").build(); var kick = CommandManager.literal("kick").build(); + var set = CommandManager.literal("set").build(); + var get = CommandManager.literal("get").build(); + var power = CommandManager.literal("power").build(); var info = CommandManager.literal("info") .executes(context -> GetFactionInformation(context.getSource().getPlayer())) .build(); @@ -69,6 +74,15 @@ public class FactionCommands { .executes(context -> InvitePlayerToFaction(context, EntityArgumentType.getPlayer(context, "target_name"))) .build(); + var setPower = CommandManager.literal("power").build(); + var setPowerAmnt = CommandManager.argument("power_amount", IntegerArgumentType.integer()).build(); + var setPowerName = CommandManager.argument("set_power_name", StringArgumentType.string()) + .executes(context -> SetFactionPower(context.getSource().getPlayer(), StringArgumentType.getString(context, "set_power_name"), IntegerArgumentType.getInteger(context, "power_amount"))) + .build(); + + var getPowerName = CommandManager.argument("get_power_name", StringArgumentType.string()) + .executes(context -> GetFactionPower(context.getSource().getPlayer(), StringArgumentType.getString(context, "get_power_name"))).build(); + var leaveFaction = CommandManager.literal("leave").executes(context -> LeaveFaction(context) ).build(); @@ -90,6 +104,15 @@ public class FactionCommands { factionNode.addChild(info); factionNode.addChild(invite); factionNode.addChild(fly); + factionNode.addChild(set); + factionNode.addChild(get); + + get.addChild(power); + power.addChild(getPowerName); + + set.addChild(setPower); + setPower.addChild(setPowerAmnt); + setPowerAmnt.addChild(setPowerName); promote.addChild(promoteName); demote.addChild(demoteName); @@ -125,13 +148,26 @@ public class FactionCommands { private int ForwardFlightCallback(CommandContext context) { if (context.getSource().isExecutedByPlayer()) { - ActionResult result = PlayerCommandFlightCallback.EVENT.invoker().interact(context.getSource().getPlayer(), context.getSource().getWorld(), FactionManager.GetInstance().GetFactionPower(context.getSource().getPlayer())); + ServerPlayerEntity player = context.getSource().getPlayer(); + ServerWorld world = context.getSource().getWorld(); + Integer fPower = FactionManager.GetInstance().GetFactionPower(player); + FactionTierEnum fTier = FactionManager.GetInstance().GetFactionTier(FactionManager.GetInstance().GetFactionOfPlayer(player.getUuidAsString())); + + + ActionResult result = PlayerCommandFlightCallback.EVENT.invoker().interact(player, world, fPower, fTier); } return 0; } public int SetFactionPower(ServerPlayerEntity caller, String faction, Integer amount) { - FactionManager.GetInstance().SetFactionPower(caller, faction, amount); + Boolean success = FactionManager.GetInstance().SetFactionPower(caller, faction, amount); + + if (success) { + caller.sendMessage(Text.of("Successfully set the faction " + faction + " power to " + amount)); + } else { + caller.sendMessage(Text.of("This is an operator only command!")); + } + return 0; } @@ -140,6 +176,12 @@ public class FactionCommands { return 0; } + public int GetFactionPower(ServerPlayerEntity player, String factionName) { + Integer amnt = FactionManager.GetInstance().GetFactionPower(factionName); + player.sendMessage(Text.of("[" + factionName + " - POWER]:" + amnt)); + return 0; + } + ///////////////////////////////////////////////////////////////////////////// /// @fn CreateFaction /// @@ -236,13 +278,6 @@ public class FactionCommands { return retValue; } - // admin only - private int SetFactionPower() { - int retValue = -1; - - return retValue; - } - private int DeclareFactionEvent() { int retValue = -1; diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java index e77440a..19e0c1f 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java @@ -8,6 +8,7 @@ import jesse.keeblarcraft.FactionMgr.FactionManager; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerEnteredBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerExitedBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerInBaseCallback; +import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import jesse.keeblarcraft.GuiMgr.FactionBlockScreenHandler; import jesse.keeblarcraft.world.ImplementedInventory; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; @@ -37,6 +38,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan private static final int OFFENSE_SLOT_TWO = 3; private String faction; // Faction this block belongs to private static int factionPower = 0; + private FactionTierEnum factionTier = FactionTierEnum.TIER_INVALID; Boolean stopMobSpawn = true; Boolean hasBuildFlight = true; Boolean hasSuperBeacon = true; @@ -49,6 +51,10 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan this.faction = faction; } + public void SetFaction(String faction) { + this.faction = faction; + } + public FactionBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityRegistration.FACTION_BLOCK_ENTITY, pos, state); this.propertyDelegate = new PropertyDelegate() { @@ -134,6 +140,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan } factionPower = FactionManager.GetInstance().GetFactionPower(faction); + factionTier = FactionManager.GetInstance().GetFactionTier(faction); // TODO: Optimize this block so that when it is placed the placers UUID is related to a faction and only pull from a list of those players not the entire server for (PlayerEntity player : world.getPlayers()) { @@ -144,13 +151,13 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan System.out.println("FACTION IS " + faction); if (!playersInRadius.contains(player.getUuidAsString())) { playersInRadius.add(player.getUuidAsString()); - ActionResult result = PlayerEnteredBaseCallback.EVENT.invoker().interact(player, world, factionPower); + ActionResult result = PlayerEnteredBaseCallback.EVENT.invoker().interact(player, world, factionPower, factionTier); } // Invoke the flight attribute on this player if (hasBuildFlight) { AttributeMgr.ApplyAttribute(player.getUuidAsString(), "faction_flight"); - ActionResult result = PlayerInBaseCallback.EVENT.invoker().interact(player, world, factionPower); + ActionResult result = PlayerInBaseCallback.EVENT.invoker().interact(player, world, factionPower, factionTier); } if (hasSuperBeacon) { @@ -159,7 +166,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan } } else if (!isPlayerInFactionRadius && playersInRadius.contains(player.getUuidAsString())) { playersInRadius.remove(player.getUuidAsString()); - ActionResult result = PlayerExitedBaseCallback.EVENT.invoker().interact(player, world, factionPower); + ActionResult result = PlayerExitedBaseCallback.EVENT.invoker().interact(player, world, factionPower, factionTier); } } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java index 86dca90..e041b78 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java @@ -51,13 +51,20 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv ServerPlayerEntity player = (ServerPlayerEntity) placer; String fac = FactionManager.GetInstance().GetFactionOfPlayer(player.getUuidAsString()); + FactionBlockEntity bEntity = (FactionBlockEntity) world.getBlockEntity(pos); + + // Update block entity + if (bEntity != null) { + bEntity.SetFaction(fac); + } + // An empty string implies NO faction; only do things if it is NOT empty if (!fac.equals("")) { faction = fac; player.sendMessage(Text.of("This block now belongs to the " + faction + " faction.")); } else { player.sendMessage(Text.of("You do not appear to be in a faction, and thus this block cannot be placed!")); - world.removeBlock(pos, false); + world.removeBlock(pos, true); } } } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerCommandFlightCallback.java b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerCommandFlightCallback.java index ba1c933..a2038d2 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerCommandFlightCallback.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerCommandFlightCallback.java @@ -1,5 +1,6 @@ package jesse.keeblarcraft.FactionMgr.Callbacks; +import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; import net.minecraft.entity.player.PlayerEntity; @@ -8,9 +9,9 @@ import net.minecraft.world.World; public interface PlayerCommandFlightCallback { Event EVENT = EventFactory.createArrayBacked(PlayerCommandFlightCallback.class, - (listeners) -> (player, world, power) -> { + (listeners) -> (player, world, power, factionTier) -> { for (PlayerCommandFlightCallback listener : listeners) { - ActionResult result = listener.interact(player, world, power); + ActionResult result = listener.interact(player, world, power, factionTier); if (result != ActionResult.PASS) { return result; @@ -20,5 +21,5 @@ public interface PlayerCommandFlightCallback { return ActionResult.PASS; }); - ActionResult interact(PlayerEntity player, World world, Integer factionPower); + ActionResult interact(PlayerEntity player, World world, Integer factionPower, FactionTierEnum factionTier); } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerEnteredBaseCallback.java b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerEnteredBaseCallback.java index d570e65..997e284 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerEnteredBaseCallback.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerEnteredBaseCallback.java @@ -1,5 +1,6 @@ package jesse.keeblarcraft.FactionMgr.Callbacks; +import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; import net.minecraft.entity.player.PlayerEntity; @@ -8,9 +9,9 @@ import net.minecraft.world.World; public interface PlayerEnteredBaseCallback { Event EVENT = EventFactory.createArrayBacked(PlayerEnteredBaseCallback.class, - (listeners) -> (player, world, power) -> { + (listeners) -> (player, world, power, factionTier) -> { for (PlayerEnteredBaseCallback listener : listeners) { - ActionResult result = listener.interact(player, world, power); + ActionResult result = listener.interact(player, world, power, factionTier); if (result != ActionResult.PASS) { return result; @@ -20,5 +21,5 @@ public interface PlayerEnteredBaseCallback { return ActionResult.PASS; }); - ActionResult interact(PlayerEntity player, World world, Integer factionPower); + ActionResult interact(PlayerEntity player, World world, Integer factionPower, FactionTierEnum factionTier); } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerExitedBaseCallback.java b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerExitedBaseCallback.java index 6b5e74a..e1524ea 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerExitedBaseCallback.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerExitedBaseCallback.java @@ -1,5 +1,6 @@ package jesse.keeblarcraft.FactionMgr.Callbacks; +import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; import net.minecraft.entity.player.PlayerEntity; @@ -8,9 +9,9 @@ import net.minecraft.world.World; public interface PlayerExitedBaseCallback { Event EVENT = EventFactory.createArrayBacked(PlayerExitedBaseCallback.class, - (listeners) -> (player, world, power) -> { + (listeners) -> (player, world, power, factionTier) -> { for (PlayerExitedBaseCallback listener : listeners) { - ActionResult result = listener.interact(player, world, power); + ActionResult result = listener.interact(player, world, power, factionTier); if (result != ActionResult.PASS) { return result; @@ -20,5 +21,5 @@ public interface PlayerExitedBaseCallback { return ActionResult.PASS; }); - ActionResult interact(PlayerEntity player, World world, Integer factionPower); + ActionResult interact(PlayerEntity player, World world, Integer factionPower, FactionTierEnum factionTier); } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerInBaseCallback.java b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerInBaseCallback.java index b4f8868..3ecda2b 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerInBaseCallback.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/Callbacks/PlayerInBaseCallback.java @@ -1,5 +1,6 @@ package jesse.keeblarcraft.FactionMgr.Callbacks; +import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; import net.minecraft.entity.player.PlayerEntity; @@ -8,9 +9,9 @@ import net.minecraft.world.World; public interface PlayerInBaseCallback { Event EVENT = EventFactory.createArrayBacked(PlayerInBaseCallback.class, - (listeners) -> (player, world, power) -> { + (listeners) -> (player, world, power, factionTier) -> { for (PlayerInBaseCallback listener : listeners) { - ActionResult result = listener.interact(player, world, power); + ActionResult result = listener.interact(player, world, power, factionTier); if (result != ActionResult.PASS) { return result; @@ -20,5 +21,5 @@ public interface PlayerInBaseCallback { return ActionResult.PASS; }); - ActionResult interact(PlayerEntity player, World world, Integer factionPower); + ActionResult interact(PlayerEntity player, World world, Integer factionPower, FactionTierEnum factionTier); } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java index eacf0d8..6259d7d 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java @@ -12,10 +12,9 @@ package jesse.keeblarcraft.FactionMgr; import java.util.List; import jesse.keeblarcraft.ConfigMgr.ConfigManager; +import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import jesse.keeblarcraft.MailSystem.MailMgr; import jesse.keeblarcraft.Keeblarcraft; -import jesse.keeblarcraft.ChatStuff.ChatMsg; -import jesse.keeblarcraft.Utils.CustomExceptions.FILE_WRITE_EXCEPTION; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; @@ -75,6 +74,8 @@ public class FactionManager { factionConfig.factions = new FactionConfig(); FlashConfig(); } + + FactionTier.InitializeFactionTiers(); } ///////////////////////////////////////////////////////////////////////////// @@ -118,10 +119,10 @@ public class FactionManager { String facOfPlayer = factionConfig.factions.FindFactionOfPlayer(creator.getUuidAsString()); if (facOfPlayer == "") { - creator.sendMessage(Text.of("Your display name: " + creator.getDisplayName().toString())); - creator.sendMessage(Text.of("Your name: " + creator.getName())); - creator.sendMessage(Text.of("Your custom name: " + creator.getCustomName())); - creator.sendMessage(Text.of("Your entity name: " + creator.getEntityName())); + // creator.sendMessage(Text.of("Your display name: " + creator.getDisplayName().toString())); + // creator.sendMessage(Text.of("Your name: " + creator.getName())); + // creator.sendMessage(Text.of("Your custom name: " + creator.getCustomName())); + // creator.sendMessage(Text.of("Your entity name: " + creator.getEntityName())); success = factionConfig.factions.CreateFaction(factionName, creator.getUuidAsString(), creator.getEntityName()); if (!success) { @@ -196,8 +197,9 @@ public class FactionManager { } if (success) { - String mailMsg = "You receive a faction invite from " + caller.getEntityName() + "! You can join with /faction join " + playerFaction; + String mailMsg = "You received a faction invite from " + caller.getEntityName() + "! You can join with /faction join " + playerFaction; MailMgr.GetInstance().SendMail(inviteeUuid, mailMsg); + FlashConfig(); } return success; } @@ -206,7 +208,8 @@ public class FactionManager { Boolean success = false; if (caller.hasPermissionLevel(4)) { - factionConfig.factions.SetPower(factionName, amount); + success = factionConfig.factions.SetPower(factionName, amount); + FlashConfig(); } else { caller.sendMessage(Text.of("You do not have permission to use this command")); } @@ -222,6 +225,10 @@ public class FactionManager { return fPower; } + public FactionTierEnum GetFactionTier(String factionName) { + return FactionTier.GetFactionTier(factionConfig.factions.GetPower(factionName)); + } + public Integer GetFactionPower(ServerPlayerEntity caller) { Integer amount = 0; diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionTier.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionTier.java new file mode 100644 index 0000000..36a6df8 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionTier.java @@ -0,0 +1,39 @@ +package jesse.keeblarcraft.FactionMgr; + +import com.google.common.collect.Range; +import com.google.common.collect.RangeMap; +import com.google.common.collect.TreeRangeMap; + +public class FactionTier { + public static enum FactionTierEnum { + TIER_INVALID, + TIER_I, + TIER_II, + TIER_III, + TIER_IV, + TIER_V, + TIER_VI + } + + private static RangeMap factionTiers = TreeRangeMap.create(); + + public static void InitializeFactionTiers() { + factionTiers.put(Range.closed(0, 29), FactionTierEnum.TIER_I); + factionTiers.put(Range.closed(30, 74), FactionTierEnum.TIER_II); + factionTiers.put(Range.closed(75, 99), FactionTierEnum.TIER_III); + factionTiers.put(Range.closed(100, 149), FactionTierEnum.TIER_IV); + factionTiers.put(Range.closed(150, 999), FactionTierEnum.TIER_V); + factionTiers.put(Range.closed(1000, Integer.MAX_VALUE), FactionTierEnum.TIER_VI); + } + + // Make sure you initialize tiers by calling the above function first! + public static FactionTierEnum GetFactionTier(Integer value) { + FactionTierEnum tier = factionTiers.get(value); + + if (tier == null) { + tier = FactionTierEnum.TIER_INVALID; + } + + return tier; + } +} -- 2.45.2 From a36ef1c8f16557020cd82cbb08a9165aa0116f28 Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Mon, 20 Jan 2025 02:28:41 -0500 Subject: [PATCH 04/11] [factions-banking] Balanced some of the beacon effects, notable bugs: Flight stays active when player leaves a faction. Need to update block entity to reset player on block break! --- .../FactionNodes/FactionBeacon.java | 109 +++++++++++++++--- .../keeblarcraft/CustomBlocks/BlockList.java | 4 +- .../CustomBlocks/Blocks/FactionBaseBlock.java | 3 +- .../keeblarcraft/FactionMgr/FactionTier.java | 26 +++++ .../tags/blocks/needs_tool_level_4.json | 3 +- .../blocks/faction_base_block.json | 20 ++++ .../recipes/faction_base_block.json | 27 +++++ .../tags/blocks/mineable/pickaxe.json | 3 +- .../tags/blocks/needs_diamond_tool.json | 3 +- 9 files changed, 178 insertions(+), 20 deletions(-) create mode 100644 src/main/resources/data/keeblarcraft/loot_tables/blocks/faction_base_block.json create mode 100644 src/main/resources/data/keeblarcraft/recipes/faction_base_block.json diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java index a6b43e6..e4917bd 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java @@ -2,9 +2,13 @@ package jesse.keeblarcraft.AttributeMgr.AttributeNodes.FactionNodes; import java.util.HashMap; import java.util.List; +import java.util.Timer; +import java.util.TimerTask; import jesse.keeblarcraft.AttributeMgr.AttributeNodes.AbstractNode; +import jesse.keeblarcraft.FactionMgr.FactionTier; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerInBaseCallback; +import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.server.network.ServerPlayerEntity; @@ -12,7 +16,10 @@ import net.minecraft.util.ActionResult; public class FactionBeacon extends AbstractNode { private int beaconStrength = 1; // Increases with faction power; 1 is default - private float absorptionAmnt = 0.2f * beaconStrength; + private int potionEffectLastingTimeTicks = 200; // 20 ticks per second makes this 10 seconds + private Integer timerLengthMillis = 5000; // The default potion length is 10 seconds; so reset every 5 to be sure! + private Boolean resetTimer = true; + private Timer timer = new Timer(); @Override public String GetNodeTitle() { return "faction_beacon"; @@ -30,27 +37,101 @@ public class FactionBeacon extends AbstractNode { return ret; } - private void ApplyEffects(ServerPlayerEntity player) { + private Integer GetBeaconAmplifier(FactionTierEnum tier) { + switch (tier) { + case TIER_I: + case TIER_II: + beaconStrength = 0; + break; + case TIER_III: + beaconStrength = 1; + break; + case TIER_IV: + beaconStrength = 2; + break; + case TIER_V: + beaconStrength = 3; + break; + case TIER_VI: + beaconStrength = 8; + break; + default: + // Invalid case; in which case the beacon probably should do nothing + beaconStrength = 0; + break; + } + return beaconStrength; + } + + private void ApplyEffects(ServerPlayerEntity player, FactionTierEnum tier) { // player.setAbsorptionAmount(absorptionAmnt); // Duration is in ticks - StatusEffectInstance conduit = new StatusEffectInstance(StatusEffects.CONDUIT_POWER, 40, 0, true,true, true); - StatusEffectInstance regen = new StatusEffectInstance(StatusEffects.REGENERATION, 40, 0, true, true, true); - StatusEffectInstance hero = new StatusEffectInstance(StatusEffects.HERO_OF_THE_VILLAGE, 40, 0, true, true, true); - StatusEffectInstance fire = new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, 40, 0, true, true, true); + beaconStrength = GetBeaconAmplifier(tier); + System.out.println("Beacon strength is " + beaconStrength); - player.addStatusEffect(conduit); - player.addStatusEffect(regen); - player.addStatusEffect(hero); - player.addStatusEffect(fire); + // Tier 2 effects + if (FactionTier.IsGreaterOrEqualTo(tier, FactionTierEnum.TIER_II)) { + StatusEffectInstance regen = new StatusEffectInstance(StatusEffects.REGENERATION, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + StatusEffectInstance fire = new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + player.addStatusEffect(regen); + player.addStatusEffect(fire); + } + + // Tier 3 effects + if (FactionTier.IsGreaterOrEqualTo(tier, FactionTierEnum.TIER_III)) { + StatusEffectInstance hero = new StatusEffectInstance(StatusEffects.HERO_OF_THE_VILLAGE, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + StatusEffectInstance haste = new StatusEffectInstance(StatusEffects.HASTE, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + + player.addStatusEffect(hero); + player.addStatusEffect(haste); + } + + // Tier 4 effects + if (FactionTier.IsGreaterOrEqualTo(tier, FactionTierEnum.TIER_IV)) { + StatusEffectInstance conduit = new StatusEffectInstance(StatusEffects.CONDUIT_POWER, potionEffectLastingTimeTicks, 0, true,true, true); + StatusEffectInstance luck = new StatusEffectInstance(StatusEffects.LUCK, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + StatusEffectInstance absorption = new StatusEffectInstance(StatusEffects.ABSORPTION, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + StatusEffectInstance waterBreathing = new StatusEffectInstance(StatusEffects.WATER_BREATHING, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + player.addStatusEffect(conduit); + player.addStatusEffect(luck); + player.addStatusEffect(absorption); + player.addStatusEffect(waterBreathing); + } + + // Tier 5 effects + if (FactionTier.IsGreaterOrEqualTo(tier, FactionTierEnum.TIER_V)) { + StatusEffectInstance resistance = new StatusEffectInstance(StatusEffects.RESISTANCE, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + StatusEffectInstance strength = new StatusEffectInstance(StatusEffects.STRENGTH, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + StatusEffectInstance dolphins = new StatusEffectInstance(StatusEffects.DOLPHINS_GRACE, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + + player.addStatusEffect(resistance); + player.addStatusEffect(strength); + player.addStatusEffect(dolphins); + } + + // Tier 6 effects + if (FactionTier.IsGreaterOrEqualTo(tier, FactionTierEnum.TIER_VI)) { + StatusEffectInstance freeHealth = new StatusEffectInstance(StatusEffects.HEALTH_BOOST, potionEffectLastingTimeTicks, beaconStrength, true, true, true); + + player.addStatusEffect(freeHealth); + } } @Override public void RegisterCallbacks() { - System.out.println("REGISTER CALLBACKS FOR FACTION BEACON CALLED"); PlayerInBaseCallback.EVENT.register((player, world, power, factionTier) -> { - // Make sure player can fly while inside the border. We don't ever want to run this more than once! - // player.sendMessage(Text.of("Applying effects")); - ApplyEffects((ServerPlayerEntity) player); + if (resetTimer) { + // The timer is super necessary because some effects (like regen) will not actually regen the player unless they can run for a few seconds + timer.schedule(new TimerTask() { + @Override + public void run() { + ApplyEffects((ServerPlayerEntity) player, factionTier); + resetTimer = true; + } + + }, timerLengthMillis); + resetTimer = false; + } return ActionResult.PASS; }); } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockList.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockList.java index 2547c67..3d57533 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockList.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockList.java @@ -19,7 +19,7 @@ public class BlockList { public static void RegisterBlocks() { BlockManager.RegisterBlock("example_block_ore", new Block(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakInstantly())); BlockManager.RegisterBlock("example_block", new ExperienceDroppingBlock(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).sounds(BlockSoundGroup.ANCIENT_DEBRIS).requiresTool(), UniformIntProvider.create(4, 20))); - BlockManager.RegisterBlock("example_statue", new Block(FabricBlockSettings.copyOf(Blocks.BELL))); - BlockManager.RegisterBlock("faction_base_block", new FactionBaseBlock(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).nonOpaque())); + BlockManager.RegisterBlock("example_statue", new Block(FabricBlockSettings.copyOf(Blocks.BELL).nonOpaque())); + BlockManager.RegisterBlock("faction_base_block", new FactionBaseBlock(FabricBlockSettings.copyOf(Blocks.COBBLESTONE).requiresTool().nonOpaque())); } } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java index e041b78..52459a9 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java @@ -64,7 +64,8 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv player.sendMessage(Text.of("This block now belongs to the " + faction + " faction.")); } else { player.sendMessage(Text.of("You do not appear to be in a faction, and thus this block cannot be placed!")); - world.removeBlock(pos, true); + // world.removeBlock(pos, false); + world.breakBlock(pos, true); } } } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionTier.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionTier.java index 36a6df8..637163b 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionTier.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionTier.java @@ -26,6 +26,32 @@ public class FactionTier { factionTiers.put(Range.closed(1000, Integer.MAX_VALUE), FactionTierEnum.TIER_VI); } + // Tier 1 can never be greater than anything (and not itself, obviously) + public static Boolean IsGreaterThan(FactionTierEnum tierInQuestion, FactionTierEnum tierToCompareAgainst) { + Boolean isGreater = false; + + if (tierInQuestion == FactionTierEnum.TIER_II && tierToCompareAgainst == FactionTierEnum.TIER_I) { + isGreater = true; + } else if (tierInQuestion == FactionTierEnum.TIER_III && (tierToCompareAgainst == FactionTierEnum.TIER_II || tierToCompareAgainst == FactionTierEnum.TIER_I)) { + isGreater = true; + } else if (tierInQuestion == FactionTierEnum.TIER_IV && (tierToCompareAgainst == FactionTierEnum.TIER_III || tierToCompareAgainst == FactionTierEnum.TIER_II || tierToCompareAgainst == FactionTierEnum.TIER_I)) { + isGreater = true; + } else if (tierInQuestion == FactionTierEnum.TIER_V && (tierToCompareAgainst == FactionTierEnum.TIER_IV || tierToCompareAgainst == FactionTierEnum.TIER_III || tierToCompareAgainst == FactionTierEnum.TIER_II || tierToCompareAgainst == FactionTierEnum.TIER_I)) { + isGreater = true; + } else if (tierInQuestion == FactionTierEnum.TIER_VI && (tierToCompareAgainst == FactionTierEnum.TIER_V || tierToCompareAgainst == FactionTierEnum.TIER_IV || tierToCompareAgainst == FactionTierEnum.TIER_III || tierToCompareAgainst == FactionTierEnum.TIER_II || tierToCompareAgainst == FactionTierEnum.TIER_I)) { + isGreater = true; + } + return isGreater; + } + + public static Boolean IsEqualTo(FactionTierEnum tierInQuestion, FactionTierEnum tierToCompareAgainst) { + return tierInQuestion == tierToCompareAgainst; + } + + public static Boolean IsGreaterOrEqualTo(FactionTierEnum tierInQuestion, FactionTierEnum tierToCompareAgainst) { + return IsEqualTo(tierInQuestion, tierToCompareAgainst) || IsGreaterThan(tierInQuestion, tierToCompareAgainst); + } + // Make sure you initialize tiers by calling the above function first! public static FactionTierEnum GetFactionTier(Integer value) { FactionTierEnum tier = factionTiers.get(value); diff --git a/src/main/resources/data/fabric/tags/blocks/needs_tool_level_4.json b/src/main/resources/data/fabric/tags/blocks/needs_tool_level_4.json index 05f6913..fb99323 100644 --- a/src/main/resources/data/fabric/tags/blocks/needs_tool_level_4.json +++ b/src/main/resources/data/fabric/tags/blocks/needs_tool_level_4.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "keeblarcraft:example_block_ore" + "keeblarcraft:example_block_ore", + "keeblarcraft:faction_base_block" ] } \ No newline at end of file diff --git a/src/main/resources/data/keeblarcraft/loot_tables/blocks/faction_base_block.json b/src/main/resources/data/keeblarcraft/loot_tables/blocks/faction_base_block.json new file mode 100644 index 0000000..ce8f364 --- /dev/null +++ b/src/main/resources/data/keeblarcraft/loot_tables/blocks/faction_base_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "keeblarcraft:faction_base_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/keeblarcraft/recipes/faction_base_block.json b/src/main/resources/data/keeblarcraft/recipes/faction_base_block.json new file mode 100644 index 0000000..9240890 --- /dev/null +++ b/src/main/resources/data/keeblarcraft/recipes/faction_base_block.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "#E#", + "#T#", + "#G#" + ], + "key": { + "#": { + "item": "minecraft:netherite_block" + }, + "T": { + "item": "minecraft:totem_of_undying" + }, + "E": { + "item": "minecraft:elytra" + }, + "G": { + "item": "minecraft:golden_apple" + } + }, + "result": { + "item": "keeblarcraft:faction_base_block", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 1ca2bd7..e8b832f 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "keeblarcraft:example_block", - "keeblarcraft:example_block_ore" + "keeblarcraft:example_block_ore", + "keeblarcraft:faction_base_block" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json index 345906e..84a5c58 100644 --- a/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json +++ b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "keeblarcraft:example_block" + "keeblarcraft:example_block", + "keeblarcraft:faction_base_block" ] } \ No newline at end of file -- 2.45.2 From bf3b1f6ed27d3d87e4db76feb3e5c1b03cca869d Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Mon, 20 Jan 2025 17:38:53 -0500 Subject: [PATCH 05/11] [factions-banking] More updates --- .../FactionNodes/FactionBeacon.java | 1 - .../FactionNodes/FactionFlight.java | 2 - .../keeblarcraft/ChatStuff/ChatMenu.java | 23 ++++++++ .../jesse/keeblarcraft/ChatStuff/ChatMsg.java | 8 ++- .../Commands/FactionCommands.java | 15 +++++ .../BlockEntities/FactionBlockEntity.java | 39 +++++++++--- .../CustomBlocks/Blocks/FactionBaseBlock.java | 13 +++- .../FactionMgr/FactionConfig.java | 22 +++++++ .../FactionMgr/FactionManager.java | 59 +++++++++++++++++++ 9 files changed, 168 insertions(+), 14 deletions(-) diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java index e4917bd..373e7ac 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java @@ -67,7 +67,6 @@ public class FactionBeacon extends AbstractNode { // player.setAbsorptionAmount(absorptionAmnt); // Duration is in ticks beaconStrength = GetBeaconAmplifier(tier); - System.out.println("Beacon strength is " + beaconStrength); // Tier 2 effects if (FactionTier.IsGreaterOrEqualTo(tier, FactionTierEnum.TIER_II)) { diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java index 82e3f19..aac3786 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionFlight.java @@ -89,8 +89,6 @@ public class FactionFlight extends AbstractNode { }); PlayerInBaseCallback.EVENT.register((player, world, power, factionTier) -> { - System.out.println("Faction power is " + power); - System.out.println("Faction tier is " + factionTier.name()); // Make sure player can fly while inside the border. We don't ever want to run this more than once! if (!canFly && !loginInBaseToggle) { player.sendMessage(Text.of("Faction flight enabled")); diff --git a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMenu.java b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMenu.java index 16b5cf5..54a6454 100644 --- a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMenu.java +++ b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMenu.java @@ -34,6 +34,10 @@ public class ChatMenu { this.header = header; } + public void SetHeader(ChatMsg msg) { + this.header = msg.regularText; + } + public void SetLeftArrow(Text leftArrow) { this.leftArrow = leftArrow; } @@ -50,6 +54,10 @@ public class ChatMenu { AddMsg(Text.of(newMsg)); } + public void AddMsg(ChatMsg newMsg) { + AddMsg(newMsg.regularText); + } + public void ClearList() { msgList.clear(); pageCount = 1; @@ -64,5 +72,20 @@ public class ChatMenu { public void SendMsg(ServerPlayerEntity target) { // Calculate number of pages pageCount = (int) Math.ceil(msgList.size() / (double) pageLimit); + + // Send the header + target.sendMessage(header); + target.sendMessage(Text.of("")); // Spacer + + // Send the body + int msgIndex = 0; + for (int page = 0; page < pageCount; page++) { + for (int i = 0; i < pageLimit; i++) { + target.sendMessage(msgList.get(msgIndex++)); + } + } + + // Send the footer + // target.sendMessage(footer); } } diff --git a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java index c5d0cf3..087387e 100644 --- a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java +++ b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java @@ -19,6 +19,9 @@ import net.minecraft.text.Style; import net.minecraft.text.Text; public class ChatMsg { + // May be null; store last message of each type so class can be referenced as object + MutableText mutableText; + Text regularText; ///////////////////////////////////////////////////////////////////////////// /// @fn MakeCopyableTxt /// @@ -93,6 +96,8 @@ public class ChatMsg { System.out.println("Value of copyAbleText: " + copyableText.getString()); System.out.println("Value of testTxt: " + testTxt.getString()); + mutableText = testTxt; + return testTxt; } @@ -130,7 +135,8 @@ public class ChatMsg { /// first with functions inside this class. ///////////////////////////////////////////////////////////////////////////// public Text ColorMsg(Text msg, COLOR_CODE color) { - return Text.of(ChatFormatting.GetColor(color) + msg.getString() + ChatFormatting.COLOR_END); + regularText = Text.of(ChatFormatting.GetColor(color) + msg.getString() + ChatFormatting.COLOR_END); + return regularText; } ///////////////////////////////////////////////////////////////////////////// diff --git a/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java b/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java index 6702358..37b0ef6 100644 --- a/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java +++ b/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java @@ -37,6 +37,7 @@ public class FactionCommands { var set = CommandManager.literal("set").build(); var get = CommandManager.literal("get").build(); var power = CommandManager.literal("power").build(); + var join = CommandManager.literal("join").build(); var info = CommandManager.literal("info") .executes(context -> GetFactionInformation(context.getSource().getPlayer())) .build(); @@ -61,6 +62,10 @@ public class FactionCommands { ) ).build(); + var joinName = CommandManager.argument("faction_name", StringArgumentType.string()) + .executes(context -> JoinFaction(context.getSource().getPlayer(), StringArgumentType.getString(context, "faction_name"))) + .build(); + var promoteName = CommandManager.argument("target_name", EntityArgumentType.player()) .executes(context -> PromotePlayerInFaction(context, EntityArgumentType.getPlayer(context, "target_name"))) .build(); @@ -106,6 +111,9 @@ public class FactionCommands { factionNode.addChild(fly); factionNode.addChild(set); factionNode.addChild(get); + factionNode.addChild(join); + + join.addChild(joinName); get.addChild(power); power.addChild(getPowerName); @@ -171,6 +179,11 @@ public class FactionCommands { return 0; } + public int JoinFaction(ServerPlayerEntity player, String factionName) { + FactionManager.GetInstance().JoinFaction(player, factionName); + return 0; + } + public int GetFactionPower(ServerPlayerEntity player) { FactionManager.GetInstance().GetFactionPower(player); return 0; @@ -244,7 +257,9 @@ public class FactionCommands { return 0; } + // Returns information on the players current faction private int GetFactionInformation(ServerPlayerEntity player) { + FactionManager.GetInstance().GetFactionInformation(player); return 0; } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java index 19e0c1f..524d868 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java @@ -3,13 +3,13 @@ package jesse.keeblarcraft.CustomBlocks.BlockEntities; import java.util.ArrayList; import jesse.keeblarcraft.AttributeMgr.AttributeMgr; -import jesse.keeblarcraft.AttributeMgr.AttributeTree; import jesse.keeblarcraft.FactionMgr.FactionManager; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerEnteredBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerExitedBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerInBaseCallback; import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import jesse.keeblarcraft.GuiMgr.FactionBlockScreenHandler; +import jesse.keeblarcraft.Utils.CommonStructures.Position3d; import jesse.keeblarcraft.world.ImplementedInventory; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; import net.minecraft.block.BlockState; @@ -42,6 +42,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan Boolean stopMobSpawn = true; Boolean hasBuildFlight = true; Boolean hasSuperBeacon = true; + Position3d storedBlockPos; private ArrayList playersInRadius = new ArrayList<>(); protected final PropertyDelegate propertyDelegate; @@ -57,6 +58,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan public FactionBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityRegistration.FACTION_BLOCK_ENTITY, pos, state); + storedBlockPos = new Position3d(pos.getX(), pos.getY(), pos.getZ()); this.propertyDelegate = new PropertyDelegate() { @Override public int get(int index) { @@ -120,18 +122,37 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan private Boolean IsPlayerInBounds(PlayerEntity player, BlockPos pos) { Boolean isNearBlock = false; + String playerFaction = FactionManager.GetInstance().GetFactionOfPlayer(player.getUuidAsString()); - // Will check in range - assumes same world! 50 is a temporary value at the moment - Boolean xBounds = player.getX() <= pos.getX() + 50 && player.getX() >= pos.getX() - 50; - Boolean yBounds = player.getY() <= pos.getY() + 50 && player.getY() >= pos.getY() - 50; - Boolean zBounds = player.getZ() <= pos.getZ() + 50 && player.getZ() >= pos.getZ() - 50; - if (xBounds && yBounds && zBounds) { - isNearBlock = true; + // Verify the player is in the faction to be considered "in bounds"! + if (playerFaction.equals(faction)) { + // Will check in range - assumes same world! 50 is a temporary value at the moment + Boolean xBounds = player.getX() <= pos.getX() + 50 && player.getX() >= pos.getX() - 50; + Boolean yBounds = player.getY() <= pos.getY() + 50 && player.getY() >= pos.getY() - 50; + Boolean zBounds = player.getZ() <= pos.getZ() + 50 && player.getZ() >= pos.getZ() - 50; + if (xBounds && yBounds && zBounds) { + isNearBlock = true; + } } return isNearBlock; } + // Call when the block attached to this entity is broken so we can send out our last messages to reset players correctly before perishing + public void ResetBlock() { + System.out.println("Reset block called. Is world null? " + (world==null?"YES":"NO")); + if (world != null) { + for (PlayerEntity player : world.getPlayers()) { + Boolean isPlayerInFactionRadius = IsPlayerInBounds(player, pos); + if (isPlayerInFactionRadius) { + ActionResult result = PlayerExitedBaseCallback.EVENT.invoker().interact(player, world, factionPower, factionTier); + } + } + } else { + System.out.println("Error, world is null and factionblockentity cannot reset players!"); + } + } + // Tick method is called 20 times a second public void tick(World world, BlockPos pos, BlockState state) { // For reasons unknown to me and only to Kaupenjoe (youtube video) - we never want to call this on a client. @@ -139,16 +160,16 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan return; } + this.world = world; + factionPower = FactionManager.GetInstance().GetFactionPower(faction); factionTier = FactionManager.GetInstance().GetFactionTier(faction); - // TODO: Optimize this block so that when it is placed the placers UUID is related to a faction and only pull from a list of those players not the entire server for (PlayerEntity player : world.getPlayers()) { Boolean isPlayerInFactionRadius = IsPlayerInBounds(player, pos); if (isPlayerInFactionRadius) { // Run individual faction modules for players here // First time entry callback check - System.out.println("FACTION IS " + faction); if (!playersInRadius.contains(player.getUuidAsString())) { playersInRadius.add(player.getUuidAsString()); ActionResult result = PlayerEnteredBaseCallback.EVENT.invoker().interact(player, world, factionPower, factionTier); diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java index 52459a9..b26125f 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java @@ -21,6 +21,7 @@ import net.minecraft.util.ItemScatterer; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProvider { // public static final VoxelShape SHAPE = Block.createCuboidShape(0, 0, 0, 16, 12, 16); @@ -42,7 +43,7 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv @Override public void onPlaced(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack itemStack) { - if (world.isClient) { + if (world.isClient()) { return; } @@ -84,6 +85,16 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv ItemScatterer.spawn(world, pos, (FactionBlockEntity) blockEntity); world.updateComparators(pos, this); } + + // This is pulled directly from #AbstractBlock$AbstractBlockState.class:onStateReplaced + // Catch if the block is being broken. Update our block entity to reset all + if (state.hasBlockEntity() && !state.isOf(newState.getBlock())) { + FactionBlockEntity bEntity = (FactionBlockEntity) world.getBlockEntity(pos); + if (bEntity != null) { + bEntity.ResetBlock(); + } + } + super.onStateReplaced(state, world, pos, newState, moved); } } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java index e2a573c..b1e59ae 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java @@ -57,6 +57,7 @@ public class FactionConfig { HashMap DISPLAY_ONLY_LIST = new HashMap(); // List contains UUID of players who are openly invited to this faction + // TODO: Refactor to map so players can un-invite by name not UUID... List openInvites = new ArrayList(); Integer factionBankBalance; @@ -112,6 +113,26 @@ public class FactionConfig { return amount; } + public Integer GetBankBalance(String factionName) { + Integer amount = 0; + if (IsValid(factionName)) { + amount = allFactions.get(factionName).factionBankBalance; + } + + return amount; + } + + // You should probably verify the player is in the faction before calling this so the object is not empty + public HashMap GetMemberNames(String factionName) { + HashMap members = new HashMap(); + + if (IsValid(factionName)) { + members = allFactions.get(factionName).DISPLAY_ONLY_LIST; + } + + return members; + } + ///////////////////////////////////////////////////////////////////////////// /// @fn DeleteFaction /// @@ -204,6 +225,7 @@ public class FactionConfig { if (allFactions.containsKey(factionName)) { allFactions.get(factionName).factionPlayerList.put(playerUuid, VALID_FACTION_ROLES.EMPLOYEE); allFactions.get(factionName).DISPLAY_ONLY_LIST.put(playerDisplayName, VALID_FACTION_ROLES.EMPLOYEE); + allFactions.get(factionName).openInvites.remove(playerUuid); // Remove them from the invite list if they joined } } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java index 6259d7d..9a80288 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java @@ -9,12 +9,19 @@ package jesse.keeblarcraft.FactionMgr; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map.Entry; import jesse.keeblarcraft.ConfigMgr.ConfigManager; +import jesse.keeblarcraft.FactionMgr.FactionConfig.VALID_FACTION_ROLES; import jesse.keeblarcraft.FactionMgr.FactionTier.FactionTierEnum; import jesse.keeblarcraft.MailSystem.MailMgr; import jesse.keeblarcraft.Keeblarcraft; +import jesse.keeblarcraft.ChatStuff.ChatMenu; +import jesse.keeblarcraft.ChatStuff.ChatMsg; +import jesse.keeblarcraft.ChatStuff.ChatFormatting.COLOR_CODE; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; @@ -78,6 +85,46 @@ public class FactionManager { FactionTier.InitializeFactionTiers(); } + public void GetFactionInformation(ServerPlayerEntity player) { + String factionName = GetFactionOfPlayer(player.getUuidAsString()); + + if (!factionName.equals("")) { + Integer fPower = factionConfig.factions.GetPower(factionName); + HashMap displayNames = factionConfig.factions.GetMemberNames(factionName); + Integer fBankBalance = factionConfig.factions.GetBankBalance(factionName); + + System.out.println((fPower == null ? "YES":"NO") + " " + (displayNames == null ? "YES":"NO") + " " + (fBankBalance == null ? "YES":"NO")); + + ArrayList nameMapToList = new ArrayList(); + ChatMsg chatPlayerList = new ChatMsg(); + for (Entry entry : displayNames.entrySet()) { + nameMapToList.add(chatPlayerList.ColorMsg(entry.getKey() + " - " + entry.getValue().name(), COLOR_CODE.BLUE)); + } + + System.out.println("name map null? " + nameMapToList == null ? "YES":"NO"); + + // Let's make our chat objects first so things are copyable and whatnot + ChatMsg chatHeader = new ChatMsg(); + chatHeader.ColorMsg(Text.of(factionName), COLOR_CODE.GOLD); + + ChatMsg chatBalance = new ChatMsg(); + chatBalance.ColorMsg(Text.of(Integer.toString(fBankBalance)), COLOR_CODE.GREEN); + + ChatMsg chatPower = new ChatMsg(); + chatPower.ColorMsg(Text.of(Integer.toString(fPower)), COLOR_CODE.RED); + + ChatMenu chatBlock = new ChatMenu(); + chatBlock.SetHeader(chatHeader); + chatBlock.AddMsg(chatPlayerList); + chatBlock.AddMsg(chatBalance); + chatBlock.AddMsg(chatPower); + + chatBlock.SendMsg(player); + } else { + player.sendMessage(Text.of("You aren't in a faction!")); + } + } + ///////////////////////////////////////////////////////////////////////////// /// @fn LeaveFaction /// @@ -162,6 +209,18 @@ public class FactionManager { return success; } + public Boolean JoinFaction(ServerPlayerEntity player, String factionName) { + Boolean joinedFaction = factionConfig.factions.JoinFaction(factionName, player.getUuidAsString(), player.getEntityName()); + + if (joinedFaction) { + player.sendMessage(Text.of("Successfully joined the faction " + factionName)); + } else { + player.sendMessage(Text.of("Failed to join faction - you were not on the invite list!")); + } + + return joinedFaction; + } + ///////////////////////////////////////////////////////////////////////////// /// @fn ListOfFactions /// -- 2.45.2 From 5911c7c775285164ef7abfb0d7b999bcaed5ddeb Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Fri, 24 Jan 2025 20:00:41 -0500 Subject: [PATCH 06/11] [factions-banking] Added mixin to capture mob spawning. Other faction features too --- .../Callbacks/MobSpawnCallback.java | 24 ++++ .../keeblarcraft/ChatStuff/ChatMenu.java | 119 ++++++++++++++++-- .../jesse/keeblarcraft/ChatStuff/ChatMsg.java | 19 +-- .../Commands/FactionCommands.java | 2 + .../BlockEntities/FactionBlockEntity.java | 17 +++ .../FactionMgr/FactionConfig.java | 2 - .../FactionMgr/FactionManager.java | 16 ++- .../keeblarcraft/mixin/EntitySpawnMixin.java | 33 +++++ src/main/resources/keeblarcraft.mixins.json | 3 +- 9 files changed, 203 insertions(+), 32 deletions(-) create mode 100644 src/main/java/jesse/keeblarcraft/Callbacks/MobSpawnCallback.java create mode 100644 src/main/java/jesse/keeblarcraft/mixin/EntitySpawnMixin.java diff --git a/src/main/java/jesse/keeblarcraft/Callbacks/MobSpawnCallback.java b/src/main/java/jesse/keeblarcraft/Callbacks/MobSpawnCallback.java new file mode 100644 index 0000000..9505a1c --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/Callbacks/MobSpawnCallback.java @@ -0,0 +1,24 @@ +package jesse.keeblarcraft.Callbacks; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.entity.mob.MobEntity; +import net.minecraft.util.ActionResult; +import net.minecraft.world.World; + +public interface MobSpawnCallback { + Event EVENT = EventFactory.createArrayBacked(MobSpawnCallback.class, + (listeners) -> (world, mob) -> { + for (MobSpawnCallback listener : listeners) { + ActionResult result = listener.interact(world, mob); + + if (result != ActionResult.PASS) { + return result; + } + } + + return ActionResult.PASS; + }); + + ActionResult interact(World world, MobEntity mob); +} diff --git a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMenu.java b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMenu.java index 54a6454..5efc12d 100644 --- a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMenu.java +++ b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMenu.java @@ -5,18 +5,27 @@ import java.util.List; import jesse.keeblarcraft.ChatStuff.ChatFormatting.COLOR_CODE; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; // Create a "chat menu" which is just a menu in chat with pages that a user can click to display // the next page. public class ChatMenu { - private List msgList = new ArrayList<>(); + private ArrayList msgList = new ArrayList<>(); private Text header; + private Text headerFooterSpacing = Text.of(" "); private Text leftArrow; private Text rightArrow; - private int pageLimit = 5; // Messages per page in this menu + private int pageLimit = 25; // Messages per page in this menu (//TODO: This is being increased to show all info at once. Need to add callback to flip a page somehow) private int pageCount = 1; // Calculated at runtime private ChatMsg formatter = new ChatMsg(); + private int currentPage = 0; + ServerPlayerEntity lastTarget; + + private enum TURN_DIRECTION { + BACK, + FORWARD + } public ChatMenu() { // Initialize default header and arrows @@ -35,7 +44,7 @@ public class ChatMenu { } public void SetHeader(ChatMsg msg) { - this.header = msg.regularText; + this.header = msg.mutableText; } public void SetLeftArrow(Text leftArrow) { @@ -46,6 +55,57 @@ public class ChatMenu { this.rightArrow = rightArrow; } + private Text MakeFooter() { + // leftArrow = (Text) formatter.MakeClickCallback((MutableText) leftArrow, new ChatMsgClickEvent(() -> TurnPage(TURN_DIRECTION.BACK))); + // leftArrow = Text.literal("TEST").styled(style -> style.withClickEvent(new ChatMsgClickEvent(() -> { + // System.out.println("Click event called from server"); + // }))); + + MutableText footer = (MutableText) leftArrow; + + // This spacing is arbitrary and may be changed in future. It just looks OK for now + footer.append(Text.of(" ")); + + // rightArrow = formatter.MakeClickCallback((MutableText) rightArrow, new ChatMsgClickEvent(() -> TurnPage(TURN_DIRECTION.FORWARD))); + footer.append(rightArrow); + + return (Text) footer; + } + + private void TurnPage(TURN_DIRECTION turn) { + System.out.println("TurnPage called"); + // The page we need to turn to will be calculated as so: + // msgList[index] where index = (0 + pageLimit) * currentPage(+- 1) + pageCount = (int) Math.ceil(msgList.size() / (double) pageLimit); + + // Guard clause: Cannot turn further than end of all pages or before page 1 + if ((turn == TURN_DIRECTION.BACK && currentPage == 1) || (turn == TURN_DIRECTION.FORWARD && currentPage == pageCount)) { + return; + } + + // Adjust new page number + if (turn == TURN_DIRECTION.BACK) { + --currentPage; + } else { + ++currentPage; + } + + // Send updated message to player (msg takes care of printing page) + if (lastTarget != null) { + SendMsg(lastTarget); + } + } + + private Text MakeHeader() { + MutableText head = (MutableText) Text.of(" "); + head.append(header); + head.append(Text.of(" ")); + + header = (Text) head; + + return header; + } + public void AddMsg(Text newMsg) { msgList.add(newMsg); } @@ -55,7 +115,17 @@ public class ChatMenu { } public void AddMsg(ChatMsg newMsg) { - AddMsg(newMsg.regularText); + AddMsg(newMsg.mutableText); + } + + public void AddMsg(List newMsgList) { + for (int i = 0; i < newMsgList.size(); i++) { + AddMsg(newMsgList.get(i)); + } + } + + public void AddNewLine() { + AddMsg(Text.of("")); } public void ClearList() { @@ -69,23 +139,48 @@ public class ChatMenu { } } + // Prints the current page public void SendMsg(ServerPlayerEntity target) { // Calculate number of pages pageCount = (int) Math.ceil(msgList.size() / (double) pageLimit); + int startIdx = currentPage * pageLimit; // Send the header - target.sendMessage(header); - target.sendMessage(Text.of("")); // Spacer + target.sendMessage(MakeHeader()); + int maxCapoutDebug = 20; - // Send the body - int msgIndex = 0; - for (int page = 0; page < pageCount; page++) { - for (int i = 0; i < pageLimit; i++) { - target.sendMessage(msgList.get(msgIndex++)); + int stopIdx = startIdx + pageLimit; + for (int pageItem = startIdx; pageItem < stopIdx && pageItem < msgList.size(); pageItem++) { + target.sendMessage(msgList.get(pageItem)); + + --maxCapoutDebug; + + if (maxCapoutDebug <= 0) { + break; } } + // Send the body + // int msgIndex = 0; + // for (int page = 0; page < pageCount && msgList.get(msgIndex) != null; page++) { + // for (int i = 0; i < pageLimit && msgList.get(msgIndex) != null; i++) { + // Text msg = msgList.get(msgIndex); + // if (msg == null) { + // target.sendMessage(msg); + // } + // } + // } + // Send the footer - // target.sendMessage(footer); + target.sendMessage(MakeFooter()); + + // ChatMsg temp = new ChatMsg(); + // Text test = (Text) temp.MakeCopyableTxt("<<", "Click to copy", "Copied string"); + // Text test2 = (Text) temp.MakeCopyableTxt(">>", "Click to copy", "Copied"); + + // MutableText temp3 = (MutableText) test; + // temp3.append(test2); + + // target.sendMessage((Text) temp3); } } diff --git a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java index 087387e..6b5c95d 100644 --- a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java +++ b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java @@ -19,9 +19,8 @@ import net.minecraft.text.Style; import net.minecraft.text.Text; public class ChatMsg { - // May be null; store last message of each type so class can be referenced as object - MutableText mutableText; - Text regularText; + public Text regularText = Text.of(""); + public MutableText mutableText = (MutableText) regularText; ///////////////////////////////////////////////////////////////////////////// /// @fn MakeCopyableTxt /// @@ -71,6 +70,11 @@ public class ChatMsg { return MakeCopyableTxt(terminalTxt, hoverTxt, expanded); } + // public MutableText MakeClickCallback(MutableText text, ChatMsgClickEvent callback) { + // text.styled(style -> style.withClickEvent(callback)); + // return text; + // } + ///////////////////////////////////////////////////////////////////////////// /// @fn MakeCopyableTxt /// @@ -88,15 +92,11 @@ public class ChatMsg { public MutableText MakeCopyableTxt(String terminalTxt, String hoverTxt, String copyStr) { Text copyableText = Text.of(terminalTxt); MutableText testTxt = (MutableText) copyableText; - System.out.println("Making hoverable stuff"); testTxt.setStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, copyStr)) .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.of(hoverTxt)))); - System.out.println("Done making hoverable stuff"); - - System.out.println("Value of copyAbleText: " + copyableText.getString()); - System.out.println("Value of testTxt: " + testTxt.getString()); mutableText = testTxt; + regularText = copyableText; return testTxt; } @@ -114,6 +114,8 @@ public class ChatMsg { /// @return Formatted string of colored text ///////////////////////////////////////////////////////////////////////////// public String ColorMsg(Integer msg, COLOR_CODE color) { + regularText = Text.of(ChatFormatting.GetColor(color) + msg + ChatFormatting.COLOR_END); + mutableText = (MutableText) regularText; return ChatFormatting.GetColor(color) + msg + ChatFormatting.COLOR_END; } @@ -136,6 +138,7 @@ public class ChatMsg { ///////////////////////////////////////////////////////////////////////////// public Text ColorMsg(Text msg, COLOR_CODE color) { regularText = Text.of(ChatFormatting.GetColor(color) + msg.getString() + ChatFormatting.COLOR_END); + mutableText = (MutableText) regularText; return regularText; } diff --git a/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java b/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java index 37b0ef6..86d6997 100644 --- a/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java +++ b/src/main/java/jesse/keeblarcraft/Commands/FactionCommands.java @@ -259,7 +259,9 @@ public class FactionCommands { // Returns information on the players current faction private int GetFactionInformation(ServerPlayerEntity player) { + System.out.println("GETTING FACTION INFO"); FactionManager.GetInstance().GetFactionInformation(player); + System.out.println("ENDING FACTION INFO"); return 0; } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java index 524d868..1703158 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java @@ -3,6 +3,7 @@ package jesse.keeblarcraft.CustomBlocks.BlockEntities; import java.util.ArrayList; import jesse.keeblarcraft.AttributeMgr.AttributeMgr; +import jesse.keeblarcraft.Callbacks.MobSpawnCallback; import jesse.keeblarcraft.FactionMgr.FactionManager; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerEnteredBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerExitedBaseCallback; @@ -14,6 +15,7 @@ import jesse.keeblarcraft.world.ImplementedInventory; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.Inventories; @@ -50,6 +52,12 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan public FactionBlockEntity(BlockPos pos, BlockState state, String faction) { this(pos, state); this.faction = faction; + + System.out.println("Subscribing to mob spawning"); + MobSpawnCallback.EVENT.register((world, mob) -> { + HandleMobSpawn(world, mob); + return ActionResult.PASS; + }); } public void SetFaction(String faction) { @@ -84,6 +92,15 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan }; } + // TODO: Make sure mobs are within range before targeting! + private void HandleMobSpawn(World world, MobEntity mob) { + if (world.isClient()) { + return; + } + + mob.kill(); + } + @Override public Text getDisplayName() { return Text.literal("Faction Home Base Station"); // Replace with proper en_us format later diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java index b1e59ae..280d5ee 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java @@ -360,10 +360,8 @@ public class FactionConfig { public String FindFactionOfPlayer(String playerUuid) { String faction = ""; - System.out.println("Attempting to find player factions with uuid " + playerUuid); for (Entry entry : allFactions.entrySet()) { if (entry.getValue().factionPlayerList.containsKey(playerUuid)) { - System.out.println("FAC [" + entry.getKey() + "]: PLAY-LIST: " + entry.getValue().factionPlayerList); faction = entry.getKey(); break; } diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java index 9a80288..08612d6 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java @@ -95,27 +95,25 @@ public class FactionManager { System.out.println((fPower == null ? "YES":"NO") + " " + (displayNames == null ? "YES":"NO") + " " + (fBankBalance == null ? "YES":"NO")); - ArrayList nameMapToList = new ArrayList(); - ChatMsg chatPlayerList = new ChatMsg(); + ArrayList chatPlayerList = new ArrayList<>(); for (Entry entry : displayNames.entrySet()) { - nameMapToList.add(chatPlayerList.ColorMsg(entry.getKey() + " - " + entry.getValue().name(), COLOR_CODE.BLUE)); + ChatMsg temp = new ChatMsg(); + temp.ColorMsg(entry.getKey() + " - " + entry.getValue().name(), COLOR_CODE.BLUE); + chatPlayerList.add(temp); } - System.out.println("name map null? " + nameMapToList == null ? "YES":"NO"); - // Let's make our chat objects first so things are copyable and whatnot ChatMsg chatHeader = new ChatMsg(); - chatHeader.ColorMsg(Text.of(factionName), COLOR_CODE.GOLD); + chatHeader.ColorMsg(Text.of("----[" + factionName + "]----"), COLOR_CODE.GOLD); ChatMsg chatBalance = new ChatMsg(); - chatBalance.ColorMsg(Text.of(Integer.toString(fBankBalance)), COLOR_CODE.GREEN); + chatBalance.ColorMsg(Text.of("Balance: " + Integer.toString(fBankBalance)), COLOR_CODE.GREEN); ChatMsg chatPower = new ChatMsg(); - chatPower.ColorMsg(Text.of(Integer.toString(fPower)), COLOR_CODE.RED); + chatPower.ColorMsg(Text.of("Power: " + Integer.toString(fPower)), COLOR_CODE.RED); ChatMenu chatBlock = new ChatMenu(); chatBlock.SetHeader(chatHeader); - chatBlock.AddMsg(chatPlayerList); chatBlock.AddMsg(chatBalance); chatBlock.AddMsg(chatPower); diff --git a/src/main/java/jesse/keeblarcraft/mixin/EntitySpawnMixin.java b/src/main/java/jesse/keeblarcraft/mixin/EntitySpawnMixin.java new file mode 100644 index 0000000..e8c7c22 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/mixin/EntitySpawnMixin.java @@ -0,0 +1,33 @@ +package jesse.keeblarcraft.mixin; + +import net.minecraft.entity.mob.MobEntity; + +// import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.ModifyReceiver; + + import jesse.keeblarcraft.Callbacks.MobSpawnCallback; +import net.minecraft.entity.EntityData; +import net.minecraft.entity.SpawnReason; +import net.minecraft.nbt.NbtCompound; + import net.minecraft.util.ActionResult; +import net.minecraft.world.LocalDifficulty; +import net.minecraft.world.ServerWorldAccess; +import net.minecraft.world.SpawnHelper; + +@Mixin(SpawnHelper.class) +public class EntitySpawnMixin { + @ModifyReceiver( + method = "spawnEntitiesInChunk(Lnet/minecraft/entity/SpawnGroup;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/world/chunk/Chunk;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/SpawnHelper$Checker;Lnet/minecraft/world/SpawnHelper$Runner;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/mob/MobEntity;initialize(Lnet/minecraft/world/ServerWorldAccess;Lnet/minecraft/world/LocalDifficulty;Lnet/minecraft/entity/SpawnReason;Lnet/minecraft/entity/EntityData;Lnet/minecraft/nbt/NbtCompound;)Lnet/minecraft/entity/EntityData;") + ) + private static MobEntity mobEntity(MobEntity instance, ServerWorldAccess world, LocalDifficulty difficulty, SpawnReason spawnReason, EntityData entityData, NbtCompound entityNbt) { + // Do stuff + ActionResult action = MobSpawnCallback.EVENT.invoker().interact(instance.getWorld(), instance); + + return instance; + } +} diff --git a/src/main/resources/keeblarcraft.mixins.json b/src/main/resources/keeblarcraft.mixins.json index b185abb..88ccd00 100644 --- a/src/main/resources/keeblarcraft.mixins.json +++ b/src/main/resources/keeblarcraft.mixins.json @@ -7,7 +7,8 @@ "PlayerMixin", "ServerPlayNetworkHandlerMixin", "PlayerEntityInteractionHandler", - "ServerPlayerInteractionManagerMixin" + "ServerPlayerInteractionManagerMixin", + "EntitySpawnMixin" ], "client": [ "ClientPlayerInteractionManagerMixin" -- 2.45.2 From 4becbd8f45781ad3fa675a8f05c4804255a78551 Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Sat, 25 Jan 2025 16:02:11 -0500 Subject: [PATCH 07/11] [factions-banking] More adjustments. Chunk load block, bug fixing, faction stuff extension --- .../FactionNodes/FactionBeacon.java | 4 +- .../BlockEntities/FactionBlockEntity.java | 71 ++++++++----------- .../CustomBlocks/Blocks/FactionBaseBlock.java | 13 ++-- .../FactionMgr/FactionConfig.java | 16 ++++- .../FactionMgr/FactionManager.java | 5 ++ .../keeblarcraft/mixin/EntitySpawnMixin.java | 4 +- 6 files changed, 61 insertions(+), 52 deletions(-) diff --git a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java index 373e7ac..c035c31 100644 --- a/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java +++ b/src/main/java/jesse/keeblarcraft/AttributeMgr/AttributeNodes/FactionNodes/FactionBeacon.java @@ -17,9 +17,9 @@ import net.minecraft.util.ActionResult; public class FactionBeacon extends AbstractNode { private int beaconStrength = 1; // Increases with faction power; 1 is default private int potionEffectLastingTimeTicks = 200; // 20 ticks per second makes this 10 seconds - private Integer timerLengthMillis = 5000; // The default potion length is 10 seconds; so reset every 5 to be sure! + private final Integer timerLengthMillis = 5000; // The default potion length is 10 seconds; so reset every 5 to be sure! private Boolean resetTimer = true; - private Timer timer = new Timer(); + private final Timer timer = new Timer(); @Override public String GetNodeTitle() { return "faction_beacon"; diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java index 1703158..7d66ed1 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java @@ -1,9 +1,11 @@ package jesse.keeblarcraft.CustomBlocks.BlockEntities; import java.util.ArrayList; +import java.util.HashMap; import jesse.keeblarcraft.AttributeMgr.AttributeMgr; import jesse.keeblarcraft.Callbacks.MobSpawnCallback; +import jesse.keeblarcraft.FactionMgr.FactionConfig; import jesse.keeblarcraft.FactionMgr.FactionManager; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerEnteredBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerExitedBaseCallback; @@ -45,7 +47,9 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan Boolean hasBuildFlight = true; Boolean hasSuperBeacon = true; Position3d storedBlockPos; + private final double factionDefaultRadiusBlocks = 50; // 50 blocks private ArrayList playersInRadius = new ArrayList<>(); + private HashMap factionPlayers; protected final PropertyDelegate propertyDelegate; @@ -53,7 +57,6 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan this(pos, state); this.faction = faction; - System.out.println("Subscribing to mob spawning"); MobSpawnCallback.EVENT.register((world, mob) -> { HandleMobSpawn(world, mob); return ActionResult.PASS; @@ -71,21 +74,17 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan @Override public int get(int index) { // The only value we need to get/delegate is faction power - return switch(index) { - default -> factionPower; - }; + return factionPower; } @Override public void set(int index, int value) { - switch(index) { - default -> factionPower = value; - }; + factionPower = value; } @Override public int size() { - // We are only sync'ing 1 integer - faction power + // We are only syncing 1 integer - faction power return 1; } @@ -137,22 +136,29 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan buf.writeBlockPos(this.pos); } + // This is uniquely only calculating the second coordinate on 'storedBlockPos' which is the center coordinate of the + // hypothetical sphere + private Boolean DistanceToCenterSphere(double x, double y, double z) { + // Distance between two points + double dist = Math.ceil(Math.sqrt( + Math.abs(Math.pow(Math.floor(x) - storedBlockPos.x, 2)) + + Math.abs(Math.pow(Math.floor(y) - storedBlockPos.y, 2)) + + Math.abs(Math.pow(Math.floor(z) - storedBlockPos.z, 2)))); + + // Arbitrarily for now; each point of faction power increases the distance by 10. Testing will confirm if this + // is too much or too little. Making this configurable would probably be good too + // Default radius; increased by power + double factionBlockRadius = factionDefaultRadiusBlocks + (10 * factionPower); + System.out.println("Dist: " + dist); + + return Math.ceil(dist) <= factionBlockRadius; + } + private Boolean IsPlayerInBounds(PlayerEntity player, BlockPos pos) { Boolean isNearBlock = false; String playerFaction = FactionManager.GetInstance().GetFactionOfPlayer(player.getUuidAsString()); - // Verify the player is in the faction to be considered "in bounds"! - if (playerFaction.equals(faction)) { - // Will check in range - assumes same world! 50 is a temporary value at the moment - Boolean xBounds = player.getX() <= pos.getX() + 50 && player.getX() >= pos.getX() - 50; - Boolean yBounds = player.getY() <= pos.getY() + 50 && player.getY() >= pos.getY() - 50; - Boolean zBounds = player.getZ() <= pos.getZ() + 50 && player.getZ() >= pos.getZ() - 50; - if (xBounds && yBounds && zBounds) { - isNearBlock = true; - } - } - - return isNearBlock; + return playerFaction.equals(faction) && DistanceToCenterSphere(player.getX(), player.getY(), player.getZ()); } // Call when the block attached to this entity is broken so we can send out our last messages to reset players correctly before perishing @@ -172,13 +178,14 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan // Tick method is called 20 times a second public void tick(World world, BlockPos pos, BlockState state) { - // For reasons unknown to me and only to Kaupenjoe (youtube video) - we never want to call this on a client. if (world.isClient() || faction == null) { return; } this.world = world; - + //TODO: The below values can ABSOLUTELY be moved to a one-time call-out when the block is created & when a player + // leaves or joins a faction with a simple callback subscriber. Leaving because not doing now, BUT REFACTOR + factionPlayers = FactionManager.GetInstance().GetFactionPlayers(faction); factionPower = FactionManager.GetInstance().GetFactionPower(faction); factionTier = FactionManager.GetInstance().GetFactionTier(faction); @@ -207,25 +214,5 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan ActionResult result = PlayerExitedBaseCallback.EVENT.invoker().interact(player, world, factionPower, factionTier); } } - - // if (stopMobSpawn) { - // // Temporary for now - // // Sphere center point is going to be X,Y,Z - // Integer X = pos.getX(); - // Integer y = pos.getY(); - // Integer z = pos.getZ(); - // Integer radius = 10; - // } - - // if (hasBuildFlight) { - // for (PlayerEntity player : world.getPlayers()) { - // if (IsPlayerInBounds(player, pos)) { - // // Notify the attribute tree to enable this attribute! - - // } - // } - - // world.getBlockEntity(pos.east()); - // } } } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java index b26125f..1a4d0d8 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java @@ -21,7 +21,6 @@ import net.minecraft.util.ItemScatterer; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProvider { // public static final VoxelShape SHAPE = Block.createCuboidShape(0, 0, 0, 16, 12, 16); @@ -57,10 +56,12 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv // Update block entity if (bEntity != null) { bEntity.SetFaction(fac); + // Enable chunk loading + world.getChunkManager().setChunkForced(world.getChunk(pos).getPos(), true); } // An empty string implies NO faction; only do things if it is NOT empty - if (!fac.equals("")) { + if (!fac.isEmpty()) { faction = fac; player.sendMessage(Text.of("This block now belongs to the " + faction + " faction.")); } else { @@ -81,7 +82,7 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) { if (state.getBlock() != newState.getBlock()) { BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity != null && blockEntity instanceof FactionBlockEntity) { + if (blockEntity instanceof FactionBlockEntity) { ItemScatterer.spawn(world, pos, (FactionBlockEntity) blockEntity); world.updateComparators(pos, this); } @@ -93,8 +94,10 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv if (bEntity != null) { bEntity.ResetBlock(); } - } + }t + // Disable chunk loading + world.getChunkManager().setChunkForced(world.getChunk(pos).getPos(), false); super.onStateReplaced(state, world, pos, newState, moved); } } @@ -103,7 +106,7 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv // Calls ScreenHandler inside createMenu of entity class @Override public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - // Server side handling is different than that of client side handling; we MUST check if we are on a server first because then we must + // Server side handling is different from that of client side handling; we MUST check if we are on a server first because then we must // request information about this block entity from the server System.out.println("onUse of faction base block called"); if (!world.isClient()) { diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java index 280d5ee..4abebfa 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java @@ -8,6 +8,8 @@ package jesse.keeblarcraft.FactionMgr; +import jesse.keeblarcraft.Utils.CommonStructures.Pair; + import static java.util.Map.entry; import java.util.ArrayList; @@ -48,7 +50,7 @@ public class FactionConfig { entry (3, VALID_FACTION_ROLES.OWNER) ); - public class WriteableFaction { + public static class WriteableFaction { // Key = Player UUID // Val = Faction role of player HashMap factionPlayerList = new HashMap(); @@ -133,6 +135,18 @@ public class FactionConfig { return members; } + // Gets faction members in a pair return; KEY = UUID values. PAIR = Ranks of each UUID + // Alternatively you could just call @see GetMemberNames(String) to get member names + // and their ranks. + public HashMap GetFactionPlayers(String factionName) { + HashMap players = null; + + if (IsValid(factionName)) { + players = allFactions.get(factionName).factionPlayerList; + } + return players; + } + ///////////////////////////////////////////////////////////////////////////// /// @fn DeleteFaction /// diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java index 08612d6..ecb4191 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java @@ -85,6 +85,7 @@ public class FactionManager { FactionTier.InitializeFactionTiers(); } + // This is purely a chat-based call. Here to help with `/faction info` basically. public void GetFactionInformation(ServerPlayerEntity player) { String factionName = GetFactionOfPlayer(player.getUuidAsString()); @@ -274,6 +275,10 @@ public class FactionManager { return success; } + public HashMap GetFactionPlayers(String factionName) { + return factionConfig.factions.GetFactionPlayers(factionName); + } + public Integer GetFactionPower(String factionName) { int fPower = 0; if (factionConfig.factions.IsValid(factionName)) { diff --git a/src/main/java/jesse/keeblarcraft/mixin/EntitySpawnMixin.java b/src/main/java/jesse/keeblarcraft/mixin/EntitySpawnMixin.java index e8c7c22..a7a617b 100644 --- a/src/main/java/jesse/keeblarcraft/mixin/EntitySpawnMixin.java +++ b/src/main/java/jesse/keeblarcraft/mixin/EntitySpawnMixin.java @@ -9,11 +9,11 @@ import org.spongepowered.asm.mixin.injection.At; import com.llamalad7.mixinextras.injector.ModifyReceiver; - import jesse.keeblarcraft.Callbacks.MobSpawnCallback; +import jesse.keeblarcraft.Callbacks.MobSpawnCallback; import net.minecraft.entity.EntityData; import net.minecraft.entity.SpawnReason; import net.minecraft.nbt.NbtCompound; - import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResult; import net.minecraft.world.LocalDifficulty; import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.SpawnHelper; -- 2.45.2 From 2d926310cf371069b83b5b5593df1229ba78786d Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Sun, 26 Jan 2025 00:25:07 -0500 Subject: [PATCH 08/11] [factions-banking] Added some of the commissioned art to the game to get ready to add the faction upgrades. Corrected faction block behavior to have to be unique & make it so only one can be placed. Probably some other things too --- .../ChatStuff/ChatFormatting.java | 20 +++---- .../jesse/keeblarcraft/ChatStuff/ChatMsg.java | 2 +- .../keeblarcraft/ConfigMgr/GeneralConfig.java | 2 - .../BlockEntities/FactionBlockEntity.java | 54 ++++++++++------- .../CustomBlocks/Blocks/FactionBaseBlock.java | 48 ++++++++++----- .../keeblarcraft/CustomItems/ItemManager.java | 10 +++- .../CustomItems/Items/FactionBeaconItem.java | 28 +++++++++ .../CustomItems/Items/FactionFlightItem.java | 28 +++++++++ .../FactionMgr/FactionBlockItems.java | 24 ++++++++ .../FactionMgr/FactionConfig.java | 55 ++++++++++++++++-- .../FactionMgr/FactionManager.java | 35 +++++++++++ .../GuiMgr/FactionBlockScreenHandler.java | 8 +-- .../Utils/CommonStructures/Position3d.java | 13 +++++ .../assets/keeblarcraft/lang/en_us.json | 2 + .../models/item/faction_upgrade_beacon.json | 6 ++ .../models/item/faction_upgrade_flight.json | 6 ++ .../textures/item/faction_upgrade_beacon.png | Bin 0 -> 685013 bytes .../textures/item/faction_upgrade_flight.png | Bin 0 -> 624744 bytes 18 files changed, 275 insertions(+), 66 deletions(-) create mode 100644 src/main/java/jesse/keeblarcraft/CustomItems/Items/FactionBeaconItem.java create mode 100644 src/main/java/jesse/keeblarcraft/CustomItems/Items/FactionFlightItem.java create mode 100644 src/main/java/jesse/keeblarcraft/FactionMgr/FactionBlockItems.java create mode 100644 src/main/resources/assets/keeblarcraft/models/item/faction_upgrade_beacon.json create mode 100644 src/main/resources/assets/keeblarcraft/models/item/faction_upgrade_flight.json create mode 100644 src/main/resources/assets/keeblarcraft/textures/item/faction_upgrade_beacon.png create mode 100644 src/main/resources/assets/keeblarcraft/textures/item/faction_upgrade_flight.png diff --git a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatFormatting.java b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatFormatting.java index e15b929..b7faf63 100644 --- a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatFormatting.java +++ b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatFormatting.java @@ -24,20 +24,14 @@ public class ChatFormatting { ///////////////////////////////////////////////////////////////////////////// public static String GetColor(COLOR_CODE code) { String colorStr = COLOR_START; - switch(code) { - case BLUE: - return colorStr + "9"; - case GRAY: - return colorStr + "7"; - case GOLD: - return colorStr + "6"; - case RED: - return colorStr + "4"; - case GREEN: - return colorStr + "2"; - } + return switch (code) { + case BLUE -> colorStr + "9"; + case GRAY -> colorStr + "7"; + case GOLD -> colorStr + "6"; + case RED -> colorStr + "4"; + case GREEN -> colorStr + "2"; + }; // If this code is reachable, then someone has not properly handled the above switch-case - return colorStr; } } diff --git a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java index 6b5c95d..527fdd4 100644 --- a/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java +++ b/src/main/java/jesse/keeblarcraft/ChatStuff/ChatMsg.java @@ -178,7 +178,7 @@ public class ChatMsg { /// /// @return Formatted string of colored text ///////////////////////////////////////////////////////////////////////////// - public String ColorMsg(String msg, COLOR_CODE color) { + public static String ColorMsg(String msg, COLOR_CODE color) { return ChatFormatting.GetColor(color) + msg + ChatFormatting.COLOR_END; } diff --git a/src/main/java/jesse/keeblarcraft/ConfigMgr/GeneralConfig.java b/src/main/java/jesse/keeblarcraft/ConfigMgr/GeneralConfig.java index 801ccf4..0fa4e13 100644 --- a/src/main/java/jesse/keeblarcraft/ConfigMgr/GeneralConfig.java +++ b/src/main/java/jesse/keeblarcraft/ConfigMgr/GeneralConfig.java @@ -70,8 +70,6 @@ public class GeneralConfig { /// set yet. ///////////////////////////////////////////////////////////////////////////// public DirectionalVec GetSpawnCoords() { - System.out.println("Among us"); - System.out.println("GetSpawnCoords called. is global_spawn null? " + (config.global_spawn == null ? "YES": "NO")); return config.global_spawn; } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java index 7d66ed1..e91b482 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/BlockEntities/FactionBlockEntity.java @@ -36,17 +36,14 @@ import net.minecraft.world.World; public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHandlerFactory, ImplementedInventory { private final DefaultedList inventory = DefaultedList.ofSize(7, ItemStack.EMPTY); - private static final int DEFENSE_SLOT_ONE = 0; - private static final int DEFENSE_SLOT_TWO = 1; - private static final int OFFENSE_SLOT_ONE = 2; - private static final int OFFENSE_SLOT_TWO = 3; - private String faction; // Faction this block belongs to + private String faction = null; // Faction this block belongs to private static int factionPower = 0; private FactionTierEnum factionTier = FactionTierEnum.TIER_INVALID; - Boolean stopMobSpawn = true; - Boolean hasBuildFlight = true; - Boolean hasSuperBeacon = true; - Position3d storedBlockPos; + private Boolean hasStopMobSpawn = true; + private Boolean registeredMobSpawnCallback = false; + private Boolean hasBuildFlight = true; + private Boolean hasSuperBeacon = true; + private Position3d storedBlockPos; private final double factionDefaultRadiusBlocks = 50; // 50 blocks private ArrayList playersInRadius = new ArrayList<>(); private HashMap factionPlayers; @@ -56,17 +53,17 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan public FactionBlockEntity(BlockPos pos, BlockState state, String faction) { this(pos, state); this.faction = faction; - - MobSpawnCallback.EVENT.register((world, mob) -> { - HandleMobSpawn(world, mob); - return ActionResult.PASS; - }); + RegisterMobSpawn(); } public void SetFaction(String faction) { this.faction = faction; } + public String GetFaction() { + return this.faction; + } + public FactionBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityRegistration.FACTION_BLOCK_ENTITY, pos, state); storedBlockPos = new Position3d(pos.getX(), pos.getY(), pos.getZ()); @@ -91,13 +88,22 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan }; } + private void RegisterMobSpawn() { + if (hasStopMobSpawn && !registeredMobSpawnCallback) { + MobSpawnCallback.EVENT.register((world, mob) -> { + HandleMobSpawn(world, mob); + return ActionResult.PASS; + }); + } + } + // TODO: Make sure mobs are within range before targeting! private void HandleMobSpawn(World world, MobEntity mob) { if (world.isClient()) { return; } - mob.kill(); + mob.setDespawnCounter(0); } @Override @@ -146,11 +152,9 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan Math.abs(Math.pow(Math.floor(z) - storedBlockPos.z, 2)))); // Arbitrarily for now; each point of faction power increases the distance by 10. Testing will confirm if this - // is too much or too little. Making this configurable would probably be good too + // is too much or too little. Making this configurable would probably be good to // Default radius; increased by power double factionBlockRadius = factionDefaultRadiusBlocks + (10 * factionPower); - System.out.println("Dist: " + dist); - return Math.ceil(dist) <= factionBlockRadius; } @@ -163,7 +167,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan // Call when the block attached to this entity is broken so we can send out our last messages to reset players correctly before perishing public void ResetBlock() { - System.out.println("Reset block called. Is world null? " + (world==null?"YES":"NO")); + System.out.println("Reset block called. Is world null? " + (world == null ? "YES" : "NO")); if (world != null) { for (PlayerEntity player : world.getPlayers()) { Boolean isPlayerInFactionRadius = IsPlayerInBounds(player, pos); @@ -172,7 +176,17 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan } } } else { - System.out.println("Error, world is null and factionblockentity cannot reset players!"); + System.out.println("Error, world is null and FactionBlockEntity cannot reset players!"); + } + } + + // TODO: There has GOT to be a better way of validating the inventory than this... but it's okay for now! *cries* + public void ValidateInventory() { + // Slots 1, 3, 5 are ATTACK/PASSIVE slots + // Slots 2, 4, 6 are DEFENSE/PASSIVE slots + // Slot 7 is the special slot reserved EXCLUSIVELY for LEGENDARY Tier only! Legendary CANNOT go in other slots! + for (ItemStack item : inventory) { + } } diff --git a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java index 1a4d0d8..4871715 100644 --- a/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java +++ b/src/main/java/jesse/keeblarcraft/CustomBlocks/Blocks/FactionBaseBlock.java @@ -1,5 +1,9 @@ package jesse.keeblarcraft.CustomBlocks.Blocks; +import jesse.keeblarcraft.ChatStuff.ChatFormatting; +import jesse.keeblarcraft.ChatStuff.ChatMsg; +import jesse.keeblarcraft.FactionMgr.FactionConfig; +import jesse.keeblarcraft.Utils.CommonStructures.Position3d; import org.jetbrains.annotations.Nullable; import jesse.keeblarcraft.CustomBlocks.BlockEntities.BlockEntityRegistration; @@ -46,29 +50,40 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv return; } - if (placer.isPlayer()) { + if (placer != null && placer.isPlayer()) { // We need to run faction checks here and make sure this player owns a faction otherwise they are NOT allowed to place it! ServerPlayerEntity player = (ServerPlayerEntity) placer; String fac = FactionManager.GetInstance().GetFactionOfPlayer(player.getUuidAsString()); - FactionBlockEntity bEntity = (FactionBlockEntity) world.getBlockEntity(pos); + // We need to verify the faction does not already have a block placed in the world; and make sure the placer + // is the owner of the faction. + Boolean canPlaceFactionBlock = FactionManager.GetInstance().CanPlaceFactionBlock(fac); + System.out.println("hasFacBlock: " + canPlaceFactionBlock); + FactionConfig.VALID_FACTION_ROLES role = FactionManager.GetInstance().GetPlayerRole(fac, placer.getUuidAsString()); + System.out.println("Can place block?: " + canPlaceFactionBlock); + System.out.println("Role: " + role.name()); - // Update block entity - if (bEntity != null) { - bEntity.SetFaction(fac); - // Enable chunk loading - world.getChunkManager().setChunkForced(world.getChunk(pos).getPos(), true); - } - - // An empty string implies NO faction; only do things if it is NOT empty - if (!fac.isEmpty()) { - faction = fac; - player.sendMessage(Text.of("This block now belongs to the " + faction + " faction.")); + if (canPlaceFactionBlock && role == FactionConfig.VALID_FACTION_ROLES.OWNER) { + FactionBlockEntity bEntity = (FactionBlockEntity) world.getBlockEntity(pos); + // Update block entity - this is the "ultimate success" portion + if (bEntity != null) { + bEntity.SetFaction(fac); + // Enable chunk loading + world.getChunkManager().setChunkForced(world.getChunk(pos).getPos(), true); + faction = fac; + FactionManager.GetInstance().SetFactionBlock(faction, new Position3d(pos.getX(), pos.getY(), pos.getZ())); + player.sendMessage(Text.of(ChatMsg.ColorMsg("This block now begins to the " + fac + " faction!", ChatFormatting.COLOR_CODE.GOLD))); + } + } else if (canPlaceFactionBlock) { + player.sendMessage(Text.of(ChatMsg.ColorMsg("You cannot place more than one faction block per faction!", ChatFormatting.COLOR_CODE.RED))); + world.breakBlock(pos, true); } else { - player.sendMessage(Text.of("You do not appear to be in a faction, and thus this block cannot be placed!")); - // world.removeBlock(pos, false); + player.sendMessage(Text.of(ChatMsg.ColorMsg("You do not appear to be in a faction or are not the leader of this faction. You cannot place this block!", ChatFormatting.COLOR_CODE.RED))); world.breakBlock(pos, true); } + } else { + // Only a player should be able to place the block in order to set faction appropriately. Destroy! + world.breakBlock(pos, true); } } @@ -94,10 +109,11 @@ public class FactionBaseBlock extends BlockWithEntity implements BlockEntityProv if (bEntity != null) { bEntity.ResetBlock(); } - }t + } // Disable chunk loading world.getChunkManager().setChunkForced(world.getChunk(pos).getPos(), false); + FactionManager.GetInstance().RemoveFactionBlock(faction, new Position3d(pos.getX(), pos.getY(), pos.getZ())); super.onStateReplaced(state, world, pos, newState, moved); } } diff --git a/src/main/java/jesse/keeblarcraft/CustomItems/ItemManager.java b/src/main/java/jesse/keeblarcraft/CustomItems/ItemManager.java index 656b80e..26f6890 100644 --- a/src/main/java/jesse/keeblarcraft/CustomItems/ItemManager.java +++ b/src/main/java/jesse/keeblarcraft/CustomItems/ItemManager.java @@ -13,7 +13,10 @@ package jesse.keeblarcraft.CustomItems; import java.util.ArrayList; import java.util.List; +import jesse.keeblarcraft.CustomItems.Items.FactionBeaconItem; +import jesse.keeblarcraft.CustomItems.Items.FactionFlightItem; import jesse.keeblarcraft.Keeblarcraft; +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.item.Item; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; @@ -34,7 +37,8 @@ public class ItemManager { /// 1. The name provided here must match these names: /// * This items models/item name /// * This items textures/item name - /// 2 Name must be lowercase & no special characters besides '_' + /// 2. Name must be lowercase & no special characters besides '_' + /// 3. Do NOT provide the Mod ID inside the name part /// /// @arg[in] item is the item to be added to the item list /// @@ -62,7 +66,7 @@ public class ItemManager { CustomItemGroups.RegisterGroups(); // The example item provides a demo of how you could make an item in your class - // Item exampleItem = new Item(new FabricItemSettings()); - // RegisterItem("metaljacket_helmet", exampleItem); + RegisterItem("faction_upgrade_flight", new FactionFlightItem(new FabricItemSettings().maxCount(1))); + RegisterItem("faction_upgrade_beacon", new FactionBeaconItem(new FabricItemSettings().maxCount(1))); } } diff --git a/src/main/java/jesse/keeblarcraft/CustomItems/Items/FactionBeaconItem.java b/src/main/java/jesse/keeblarcraft/CustomItems/Items/FactionBeaconItem.java new file mode 100644 index 0000000..8e079fd --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/CustomItems/Items/FactionBeaconItem.java @@ -0,0 +1,28 @@ +package jesse.keeblarcraft.CustomItems.Items; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class FactionBeaconItem extends Item { + public FactionBeaconItem(Settings settings) { + super(settings); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + if (world.isClient()) { + user.sendMessage(Text.of("This item can only be placed inside the faction home block!")); + } + return super.use(world, user, hand); + } + + @Override + public boolean isDamageable() { + return false; + } +} diff --git a/src/main/java/jesse/keeblarcraft/CustomItems/Items/FactionFlightItem.java b/src/main/java/jesse/keeblarcraft/CustomItems/Items/FactionFlightItem.java new file mode 100644 index 0000000..891e2a0 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/CustomItems/Items/FactionFlightItem.java @@ -0,0 +1,28 @@ +package jesse.keeblarcraft.CustomItems.Items; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class FactionFlightItem extends Item { + public FactionFlightItem(Settings settings) { + super(settings); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + if (world.isClient()) { + user.sendMessage(Text.of("This item can only be placed inside the faction home block!")); + } + return super.use(world, user, hand); + } + + @Override + public boolean isDamageable() { + return false; + } +} diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionBlockItems.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionBlockItems.java new file mode 100644 index 0000000..8d398b4 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionBlockItems.java @@ -0,0 +1,24 @@ +package jesse.keeblarcraft.FactionMgr; + +import java.util.Map; + +import static java.util.Map.entry; + +// This class is going to keep track of everything related to items that the faction block is allowed to accept and +// information regarding those items. +public class FactionBlockItems { + public static enum ITEM_TIER { + COMMON, + UNCOMMON, + RARE, + VERY_RARE, + LEGENDARY + } + + // TODO: Need to add the Item information for these down below; but I haven't made them yet! The string should + // make it obvious what needs to go here though. + public static Map FACTION_UPGRADES = Map.ofEntries( + entry("keeblarcraft:faction_flight", ITEM_TIER.UNCOMMON), + entry("keeblarcraft:faction_beacon", ITEM_TIER.RARE) + ); +} diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java index 4abebfa..9ad8373 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionConfig.java @@ -9,6 +9,7 @@ package jesse.keeblarcraft.FactionMgr; import jesse.keeblarcraft.Utils.CommonStructures.Pair; +import jesse.keeblarcraft.Utils.CommonStructures.Position3d; import static java.util.Map.entry; @@ -30,7 +31,8 @@ public class FactionConfig { OWNER, COOWNER, MANAGEMENT, - EMPLOYEE + EMPLOYEE, + INVALID } private static Map ROLE_LEVELS = Map.ofEntries @@ -50,6 +52,7 @@ public class FactionConfig { entry (3, VALID_FACTION_ROLES.OWNER) ); + // This is the actual faction configuration object that is written to a json file public static class WriteableFaction { // Key = Player UUID // Val = Faction role of player @@ -62,6 +65,9 @@ public class FactionConfig { // TODO: Refactor to map so players can un-invite by name not UUID... List openInvites = new ArrayList(); + Position3d factionBlockLocation; // May be null until faction places it; but only one can be placed! + int numFactionBlocks = 0; + Integer factionBankBalance; Integer factionPower; String factionName; @@ -94,6 +100,38 @@ public class FactionConfig { return success; } + public void SetFactionBlock(String factionName, Position3d blockPos) { + if (IsValid(factionName) && blockPos != null) { + allFactions.get(factionName).numFactionBlocks++; + allFactions.get(factionName).factionBlockLocation = blockPos; + } + } + + public void RemoveFactionBlock(String factionName) { + if (IsValid(factionName)) { + allFactions.get(factionName).factionBlockLocation = null; + allFactions.get(factionName).numFactionBlocks--; + } + } + + public Position3d GetFactionBlock(String factionName) { + Position3d blockLoc = null; + if (IsValid(factionName)){ + blockLoc = allFactions.get(factionName).factionBlockLocation; + } + return blockLoc; + } + + // Will return amount of faction blocks in a faction, where any number less than 0 should be treated + // as an invalid case where the faction may have not existed when this function was called. + public Integer GetNumberOfFactionBlocks(String factionName) { + int amount = -1; + if (IsValid(factionName)) { + amount = allFactions.get(factionName).numFactionBlocks; + } + return amount; + } + // It is assumed that the person calling this function has verified that the person // can in fact set faction power. This is generally just an admin command public Boolean SetPower(String factionName, Integer amount) { @@ -147,6 +185,15 @@ public class FactionConfig { return players; } + public VALID_FACTION_ROLES GetPlayerRole(String factionName, String playerUuid) { + VALID_FACTION_ROLES role = VALID_FACTION_ROLES.INVALID; + // Check to make sure faction exists & player is in faction + if (IsValid(factionName) && allFactions.get(factionName).factionPlayerList.containsKey(playerUuid)) { + role = allFactions.get(factionName).factionPlayerList.get(playerUuid); + } + return role; + } + ///////////////////////////////////////////////////////////////////////////// /// @fn DeleteFaction /// @@ -353,11 +400,7 @@ public class FactionConfig { /// @return True if a faction exists with the specified name, false if not ///////////////////////////////////////////////////////////////////////////// public Boolean IsValid(String factionName) { - if (allFactions.containsKey(factionName)) { - return true; - } else { - return false; - } + return allFactions.containsKey(factionName); } ///////////////////////////////////////////////////////////////////////////// diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java index ecb4191..b8ac1f4 100644 --- a/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/FactionManager.java @@ -22,6 +22,7 @@ import jesse.keeblarcraft.Keeblarcraft; import jesse.keeblarcraft.ChatStuff.ChatMenu; import jesse.keeblarcraft.ChatStuff.ChatMsg; import jesse.keeblarcraft.ChatStuff.ChatFormatting.COLOR_CODE; +import jesse.keeblarcraft.Utils.CommonStructures.Position3d; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; @@ -85,6 +86,40 @@ public class FactionManager { FactionTier.InitializeFactionTiers(); } + // Returns true if the faction is allowed to place a faction block. False if not + public Boolean CanPlaceFactionBlock(String factionName) { + return factionConfig.factions.GetNumberOfFactionBlocks(factionName) == 0; + } + + public void SetFactionBlock(String factionName, Position3d newPos) { + // Only consider the faction block now "placed" if we (the manager) agree there are no others + if (factionConfig.factions.GetNumberOfFactionBlocks(factionName) == 0) { + factionConfig.factions.SetFactionBlock(factionName, newPos); + } + + FlashConfig(); + } + + public void RemoveFactionBlock(String factionName, Position3d blockPos) { + // In order to "remove" a block (NOT from the world, just the manager) - it must be the LAST remaining faction + // block. In general, it should NOT be possible (for now) to set more than one faction block in the world from + // the manager's perspective. + Position3d origBlock = factionConfig.factions.GetFactionBlock(factionName); + if (origBlock != null && origBlock.equals(blockPos)) { + factionConfig.factions.RemoveFactionBlock(factionName); + } + + FlashConfig(); + } + + public int GetNumberOfFactionBlocks(String factionName) { + return factionConfig.factions.GetNumberOfFactionBlocks(factionName); + } + + public VALID_FACTION_ROLES GetPlayerRole(String factionName, String uuid) { + return factionConfig.factions.GetPlayerRole(factionName, uuid); + } + // This is purely a chat-based call. Here to help with `/faction info` basically. public void GetFactionInformation(ServerPlayerEntity player) { String factionName = GetFactionOfPlayer(player.getUuidAsString()); diff --git a/src/main/java/jesse/keeblarcraft/GuiMgr/FactionBlockScreenHandler.java b/src/main/java/jesse/keeblarcraft/GuiMgr/FactionBlockScreenHandler.java index a334435..c79c8e9 100644 --- a/src/main/java/jesse/keeblarcraft/GuiMgr/FactionBlockScreenHandler.java +++ b/src/main/java/jesse/keeblarcraft/GuiMgr/FactionBlockScreenHandler.java @@ -11,6 +11,7 @@ import net.minecraft.screen.ArrayPropertyDelegate; import net.minecraft.screen.PropertyDelegate; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; +import org.jetbrains.annotations.Nullable; public class FactionBlockScreenHandler extends ScreenHandler { private final Inventory inventory; @@ -44,10 +45,6 @@ public class FactionBlockScreenHandler extends ScreenHandler { addPlayerInventory(playerInventory); addPlayerHotbar(playerInventory); - // Need to reference Kaupendim tutorial again; but we could theoretically just add the player inventory - // right here so that they can drag items in and whatnot (I assume). I am unsure if I am taking that - // direction with this block RIGHT NOW - so for now I am NOT doing that - // Remainder stuff addProperties(arrayPropertyDelegate); } @@ -60,9 +57,10 @@ public class FactionBlockScreenHandler extends ScreenHandler { // This is just for SHIFT+CLICK moving @Override public ItemStack quickMove(PlayerEntity player, int invSlot) { + System.out.println("Is client: " + player.getWorld().isClient()); ItemStack newStack = ItemStack.EMPTY; Slot slot = this.slots.get(invSlot); - if (slot != null && slot.hasStack()) { + if (slot.hasStack()) { ItemStack originalStack = slot.getStack(); newStack = originalStack.copy(); diff --git a/src/main/java/jesse/keeblarcraft/Utils/CommonStructures/Position3d.java b/src/main/java/jesse/keeblarcraft/Utils/CommonStructures/Position3d.java index d1dde69..9b9873d 100644 --- a/src/main/java/jesse/keeblarcraft/Utils/CommonStructures/Position3d.java +++ b/src/main/java/jesse/keeblarcraft/Utils/CommonStructures/Position3d.java @@ -7,6 +7,19 @@ public class Position3d { this.z = z; } + @Override + public boolean equals(Object obj) { + boolean isEqual = false; + if (this == obj) { + isEqual = true; + } else if (obj instanceof Position3d castedObj) { + if (castedObj.x == this.x && castedObj.y == this.y && castedObj.z == this.z) { + isEqual = true; + } + } + return isEqual; + } + public int x; public int y; public int z; diff --git a/src/main/resources/assets/keeblarcraft/lang/en_us.json b/src/main/resources/assets/keeblarcraft/lang/en_us.json index ddd3162..3cc7ce8 100644 --- a/src/main/resources/assets/keeblarcraft/lang/en_us.json +++ b/src/main/resources/assets/keeblarcraft/lang/en_us.json @@ -3,6 +3,8 @@ "item.keeblarcraft.metaljacket_chestplate": "MetalJacket Chestplate", "item.keeblarcraft.metaljacket_leggings": "MetalJacket Leggings", "item.keeblarcraft.metaljacket_boots": "MetalJacket Booties", + "item.keeblarcraft.faction_upgrade_flight": "Faction Flight Upgrade", + "item.keeblarcraft.faction_upgrade_beacon": "Faction Beacon Upgrade", "itemgroup.keeblarcraft": "Keeblarcraft Modded Items", diff --git a/src/main/resources/assets/keeblarcraft/models/item/faction_upgrade_beacon.json b/src/main/resources/assets/keeblarcraft/models/item/faction_upgrade_beacon.json new file mode 100644 index 0000000..b5bbcf0 --- /dev/null +++ b/src/main/resources/assets/keeblarcraft/models/item/faction_upgrade_beacon.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "keeblarcraft:item/faction_upgrade_beacon" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/keeblarcraft/models/item/faction_upgrade_flight.json b/src/main/resources/assets/keeblarcraft/models/item/faction_upgrade_flight.json new file mode 100644 index 0000000..a0f29d0 --- /dev/null +++ b/src/main/resources/assets/keeblarcraft/models/item/faction_upgrade_flight.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "keeblarcraft:item/faction_upgrade_flight" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/keeblarcraft/textures/item/faction_upgrade_beacon.png b/src/main/resources/assets/keeblarcraft/textures/item/faction_upgrade_beacon.png new file mode 100644 index 0000000000000000000000000000000000000000..6485a2e8455c7bf50e87224a89a7cf64bffd34d7 GIT binary patch literal 685013 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

!IGG{2aCawlm> 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

5>J7sVNWWi_Cr2}ggfB!zmJgmA|5 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≤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

JA5#)!dn6y;qfmKSZ&&2BYEM+;c3+ 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