[factions-banking] Refinement on last commit with entry + exit stuff. IT WORKS!
Some checks are pending
build / build (21) (push) Waiting to run

This commit is contained in:
Jkibbels 2025-01-18 03:29:27 -05:00
parent bcbd481fcf
commit d274810ca4
5 changed files with 108 additions and 31 deletions

View File

@ -91,11 +91,11 @@ public class AttributeMgr {
msg = "Applied attribute '" + attributeName + "' successfully"; msg = "Applied attribute '" + attributeName + "' successfully";
} else { } else {
msg = "Player tree not found!"; msg = "Player tree not found!";
String debug = "PlayerTree is null"; // String debug = "PlayerTree is null";
if (playerTree != null) { // if (playerTree != null) {
debug = playerTree.ContainsAttribute(attributeName) ? "YES":"NO"; // debug = playerTree.ContainsAttribute(attributeName) ? "YES":"NO";
} // }
System.out.println("APPLY ATTRIBUTE FAIL: TREE NULL, NODE NULL, OR PLAYER ALREADY HAS THIS ATTRIBUTE (DO THEY? " + debug + ")"); // System.out.println("APPLY ATTRIBUTE FAIL: TREE NULL, NODE NULL, OR PLAYER ALREADY HAS THIS ATTRIBUTE (DO THEY? " + debug + ")");
} }
} else { } else {
msg = "Could not apply attribute, attribute name does not exist!"; msg = "Could not apply attribute, attribute name does not exist!";

View File

@ -4,6 +4,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import jesse.keeblarcraft.AttributeMgr.AttributeNodes.AbstractNode; import jesse.keeblarcraft.AttributeMgr.AttributeNodes.AbstractNode;
import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerEnteredBaseCallback;
import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerExitedBaseCallback;
import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerInBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerInBaseCallback;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
@ -34,8 +36,18 @@ public class FactionFlight extends AbstractNode {
@Override @Override
public void RegisterCallbacks(ServerPlayerEntity playerObj, ServerWorld worldObj) { public void RegisterCallbacks(ServerPlayerEntity playerObj, ServerWorld worldObj) {
PlayerInBaseCallback.EVENT.register((player, world) -> { // PlayerInBaseCallback.EVENT.register((player, world) -> {
player.sendMessage(Text.of("Welcome home! Feel free to fly around!")); // player.sendMessage(Text.of("Welcome home! Feel free to fly around!"));
// return ActionResult.SUCCESS;
// });
PlayerEnteredBaseCallback.EVENT.register((player, world) -> {
player.sendMessage(Text.of("Faction flight enabled"));
return ActionResult.SUCCESS;
});
PlayerExitedBaseCallback.EVENT.register((player, world) -> {
player.sendMessage(Text.of("Faction flight disabled"));
return ActionResult.SUCCESS; return ActionResult.SUCCESS;
}); });
} }

View File

@ -1,7 +1,11 @@
package jesse.keeblarcraft.CustomBlocks.BlockEntities; package jesse.keeblarcraft.CustomBlocks.BlockEntities;
import java.util.ArrayList;
import jesse.keeblarcraft.AttributeMgr.AttributeMgr; import jesse.keeblarcraft.AttributeMgr.AttributeMgr;
import jesse.keeblarcraft.AttributeMgr.AttributeTree; import jesse.keeblarcraft.AttributeMgr.AttributeTree;
import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerEnteredBaseCallback;
import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerExitedBaseCallback;
import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerInBaseCallback; import jesse.keeblarcraft.FactionMgr.Callbacks.PlayerInBaseCallback;
import jesse.keeblarcraft.GuiMgr.FactionBlockScreenHandler; import jesse.keeblarcraft.GuiMgr.FactionBlockScreenHandler;
import jesse.keeblarcraft.world.ImplementedInventory; import jesse.keeblarcraft.world.ImplementedInventory;
@ -33,6 +37,7 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan
private static int factionPower = 0; private static int factionPower = 0;
Boolean stopMobSpawn = true; Boolean stopMobSpawn = true;
Boolean hasBuildFlight = true; Boolean hasBuildFlight = true;
private ArrayList<String> playersInRadius = new ArrayList<>();
protected final PropertyDelegate propertyDelegate; protected final PropertyDelegate propertyDelegate;
@ -122,34 +127,46 @@ public class FactionBlockEntity extends BlockEntity implements ExtendedScreenHan
return; return;
} }
// Do stuff here that we need to do on a per tick basis. Probably check the items inside the slots and do stuff? // 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
// Maybe something with callback handlers might be done here? Like the temp flight within bounds of the faction block if that powerup is for (PlayerEntity player : world.getPlayers()) {
// active, etc? Boolean isPlayerInFactionRadius = IsPlayerInBounds(player, pos);
if (isPlayerInFactionRadius) {
if (stopMobSpawn) { // Run individual faction modules for players here
// Temporary for now // First time entry callback check
// Sphere center point is going to be X,Y,Z if (!playersInRadius.contains(player.getUuidAsString())) {
Integer X = pos.getX(); playersInRadius.add(player.getUuidAsString());
Integer y = pos.getY(); ActionResult result = PlayerEnteredBaseCallback.EVENT.invoker().interact(player, world);
Integer z = pos.getZ();
Integer radius = 10;
} }
// Invoke the flight attribute on this player
if (hasBuildFlight) { if (hasBuildFlight) {
int worldX = pos.east().getX(); AttributeMgr.ApplyAttribute(player.getUuidAsString(), "faction_flight");
int worldY = pos.getY();
int worldZ = pos.east().getZ();
System.out.println("FACTION BLOCK DEBUG INFO: " + worldX + " " + worldY + " " + worldZ);
for (PlayerEntity player : world.getPlayers()) {
if (IsPlayerInBounds(player, pos)) {
// Notify the attribute tree to enable this attribute!
AttributeMgr.ApplyAttribute(player.getUuidAsString(), "factions_flight");
ActionResult result = PlayerInBaseCallback.EVENT.invoker().interact(player, world); ActionResult result = PlayerInBaseCallback.EVENT.invoker().interact(player, world);
} }
} else if (!isPlayerInFactionRadius && playersInRadius.contains(player.getUuidAsString())) {
playersInRadius.remove(player.getUuidAsString());
ActionResult result = PlayerExitedBaseCallback.EVENT.invoker().interact(player, world);
}
} }
world.getBlockEntity(pos.east()); // 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());
// }
} }
} }

View File

@ -0,0 +1,24 @@
package jesse.keeblarcraft.FactionMgr.Callbacks;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.ActionResult;
import net.minecraft.world.World;
public interface PlayerEnteredBaseCallback {
Event<PlayerEnteredBaseCallback> EVENT = EventFactory.createArrayBacked(PlayerEnteredBaseCallback.class,
(listeners) -> (player, world) -> {
for (PlayerEnteredBaseCallback listener : listeners) {
ActionResult result = listener.interact(player, world);
if (result != ActionResult.PASS) {
return result;
}
}
return ActionResult.PASS;
});
ActionResult interact(PlayerEntity player, World world);
}

View File

@ -0,0 +1,24 @@
package jesse.keeblarcraft.FactionMgr.Callbacks;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.ActionResult;
import net.minecraft.world.World;
public interface PlayerExitedBaseCallback {
Event<PlayerExitedBaseCallback> EVENT = EventFactory.createArrayBacked(PlayerExitedBaseCallback.class,
(listeners) -> (player, world) -> {
for (PlayerExitedBaseCallback listener : listeners) {
ActionResult result = listener.interact(player, world);
if (result != ActionResult.PASS) {
return result;
}
}
return ActionResult.PASS;
});
ActionResult interact(PlayerEntity player, World world);
}