Skip to content

Commit

Permalink
Finish server support
Browse files Browse the repository at this point in the history
  • Loading branch information
SamB440 committed Mar 24, 2023
1 parent 3ee2131 commit 9db78d2
Show file tree
Hide file tree
Showing 45 changed files with 566 additions and 261 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;

public class TaleOfKingdomsAPI {

Expand Down Expand Up @@ -49,7 +50,7 @@ public EnvType getEnvironment() {
}

@Environment(EnvType.SERVER)
public ServerPacketHandler getServerHandler(Identifier identifier) {
public ServerPacketHandler getServerPacketHandler(Identifier identifier) {
return serverPacketHandlers.get(identifier);
}

Expand All @@ -59,7 +60,7 @@ public void registerServerHandler(ServerPacketHandler serverPacketHandler) {
}

@Environment(EnvType.CLIENT)
public ClientPacketHandler getClientHandler(Identifier identifier) {
public ClientPacketHandler getClientPacketHandler(Identifier identifier) {
return clientPacketHandlers.get(identifier);
}

Expand Down Expand Up @@ -117,6 +118,14 @@ public void executeOnServer(Runnable runnable) {
}
}

public void executeOnServerEnvironment(Consumer<MinecraftServer> runnable) {
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
executeOnServer(() -> runnable.accept(MinecraftClient.getInstance().getServer()));
} else {
executeOnDedicatedServer(() -> runnable.accept(minecraftServer));
}
}

/**
* Executes a task on the dedicated server.
* @param runnable task to run
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingBankerInteractPacketHandler;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingBuildKingdomPacket;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingBuyItemPacketHandler;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingCityBuilderActionPacketHandler;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingFixGuildPacketHandler;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingForemanBuyWorkerPacketHandler;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingForemanCollectPacketHandler;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingHunterPacketHandler;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingInnkeeperPacketHandler;
import com.convallyria.taleofkingdoms.client.packet.outgoing.OutgoingToggleSellGuiPacketHandler;
Expand Down Expand Up @@ -67,7 +70,10 @@ private void registerPacketHandlers() {
registerHandler(new OutgoingBankerInteractPacketHandler());
registerHandler(new OutgoingBuildKingdomPacket());
registerHandler(new OutgoingBuyItemPacketHandler());
registerHandler(new OutgoingCityBuilderActionPacketHandler());
registerHandler(new OutgoingFixGuildPacketHandler());
registerHandler(new OutgoingForemanBuyWorkerPacketHandler());
registerHandler(new OutgoingForemanCollectPacketHandler());
registerHandler(new OutgoingHunterPacketHandler());
registerHandler(new OutgoingInnkeeperPacketHandler());
registerHandler(new OutgoingToggleSellGuiPacketHandler());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,8 @@ protected void build(FlowLayout rootComponent) {
if (guildPlayer.getCoins() >= coins) {
this.close();
if (MinecraftClient.getInstance().getServer() == null) {
TaleOfKingdoms.getAPI().getClientHandler(Packets.BANKER_INTERACT_PACKET_ID)
.handleOutgoingPacket(Packets.BANKER_INTERACT_PACKET_ID,
player, BankerMethod.DEPOSIT, coins);
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.BANKER_INTERACT)
.handleOutgoingPacket(player, BankerMethod.DEPOSIT, coins);
return;
}
guildPlayer.setCoins(guildPlayer.getCoins() - coins);
Expand All @@ -82,9 +81,8 @@ protected void build(FlowLayout rootComponent) {
if (guildPlayer.getBankerCoins() >= coins) {
this.close();
if (MinecraftClient.getInstance().getServer() == null) {
TaleOfKingdoms.getAPI().getClientHandler(Packets.BANKER_INTERACT_PACKET_ID)
.handleOutgoingPacket(Packets.BANKER_INTERACT_PACKET_ID,
player, BankerMethod.WITHDRAW, coins);
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.BANKER_INTERACT)
.handleOutgoingPacket(player, BankerMethod.WITHDRAW, coins);
return;
}
guildPlayer.setBankerCoins(guildPlayer.getBankerCoins() - coins);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,8 @@ public void init() {
if (!guildPlayer.getHunters().isEmpty()) {
Translations.HUNTER_THANK.send(player);
if (MinecraftClient.getInstance().getServer() == null) {
TaleOfKingdoms.getAPI().getClientHandler(Packets.HUNTER_PACKET_ID)
.handleOutgoingPacket(Packets.HUNTER_PACKET_ID,
player,
client.getNetworkHandler().getConnection(),
true);
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.HIRE_HUNTER)
.handleOutgoingPacket(player, true);
this.close();
return;
}
Expand Down Expand Up @@ -117,10 +114,8 @@ public void init() {
if (guildPlayer.getCoins() < 3000) return;
if (stack == null) return;
if (MinecraftClient.getInstance().getServer() == null) {
api.getClientHandler(Packets.FIX_GUILD_PACKET_ID)
.handleOutgoingPacket(Packets.FIX_GUILD_PACKET_ID,
player,
client.getNetworkHandler().getConnection());
api.getClientPacketHandler(Packets.FIX_GUILD)
.handleOutgoingPacket(player);
return;
}

Expand Down Expand Up @@ -177,9 +172,8 @@ private void makeContractSignButton() {
guildPlayer.setSignedContract(true);
Translations.GUILDMASTER_CONTRACT_SIGN.send(player);
} else {
TaleOfKingdoms.getAPI().getClientHandler(Packets.SIGN_CONTRACT_PACKET_ID)
.handleOutgoingPacket(Packets.SIGN_CONTRACT_PACKET_ID,
player, true);
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.SIGN_CONTRACT)
.handleOutgoingPacket(player, true);
}
widget.visible = false;
widget.active = false;
Expand All @@ -199,9 +193,8 @@ private void makeCancelContractButton() {
guildPlayer.setSignedContract(false);
Translations.GUILDMASTER_CONTRACT_CANCEL_AWAIT.send(player);
} else {
TaleOfKingdoms.getAPI().getClientHandler(Packets.SIGN_CONTRACT_PACKET_ID)
.handleOutgoingPacket(Packets.SIGN_CONTRACT_PACKET_ID,
player, false);
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.SIGN_CONTRACT)
.handleOutgoingPacket(player, false);
}
widget.visible = false;
widget.active = false;
Expand All @@ -222,9 +215,8 @@ private void makeHireHuntersButton() {
final TaleOfKingdomsAPI api = TaleOfKingdoms.getAPI();
Translations.SERVE.send(player);
if (MinecraftClient.getInstance().getServer() == null) {
api.getClientHandler(Packets.HUNTER_PACKET_ID)
.handleOutgoingPacket(Packets.HUNTER_PACKET_ID,
player, false);
api.getClientPacketHandler(Packets.HIRE_HUNTER)
.handleOutgoingPacket(player, false);
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,8 @@ public void init() {

MinecraftServer server = MinecraftClient.getInstance().getServer();
if (server == null) {
api.getClientHandler(Packets.INNKEEPER_PACKET_ID)
.handleOutgoingPacket(Packets.INNKEEPER_PACKET_ID,
player, true);
api.getClientPacketHandler(Packets.INNKEEPER_HIRE_ROOM)
.handleOutgoingPacket(player, true);
return;
}

Expand Down Expand Up @@ -85,9 +84,8 @@ public void init() {
}

if (server == null) {
api.getClientHandler(Packets.INNKEEPER_PACKET_ID)
.handleOutgoingPacket(Packets.INNKEEPER_PACKET_ID,
player, false);
api.getClientPacketHandler(Packets.INNKEEPER_HIRE_ROOM)
.handleOutgoingPacket(player, false);
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@
import com.convallyria.taleofkingdoms.common.entity.guild.CityBuilderEntity;
import com.convallyria.taleofkingdoms.common.kingdom.PlayerKingdom;
import com.convallyria.taleofkingdoms.common.kingdom.builds.BuildCosts;
import com.convallyria.taleofkingdoms.common.kingdom.poi.KingdomPOI;
import com.convallyria.taleofkingdoms.common.schematic.Schematic;
import com.convallyria.taleofkingdoms.common.utils.InventoryUtils;
import com.convallyria.taleofkingdoms.common.packet.Packets;
import com.convallyria.taleofkingdoms.common.packet.action.CityBuilderAction;
import com.convallyria.taleofkingdoms.common.world.ConquestInstance;
import com.convallyria.taleofkingdoms.common.world.guild.GuildPlayer;
import io.wispforest.owo.ui.component.ButtonComponent;
Expand All @@ -21,11 +20,6 @@
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.server.integrated.IntegratedServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;

Expand Down Expand Up @@ -89,42 +83,25 @@ protected void build(FlowLayout rootComponent) {

inner.child(
Components.button(Text.literal("Give 64 wood"), c -> {
//todo: server packet
final int playerWoodCount = InventoryUtils.count(player.getInventory(), ItemTags.LOGS);
TaleOfKingdoms.getAPI().executeOnServer(() -> {
final IntegratedServer server = MinecraftClient.getInstance().getServer();
final ItemStack stack = InventoryUtils.getStack(player.getInventory(), ItemTags.LOGS, 64);
final ServerPlayerEntity serverPlayer = server.getPlayerManager().getPlayer(player.getUuid());
final CityBuilderEntity serverCityBuilder = (CityBuilderEntity) serverPlayer.getWorld().getEntityById(entity.getId());
if (stack != null && playerWoodCount >= 64 && oakWoodCount.get() <= (320 - 64) && serverCityBuilder.getInventory().canInsert(stack)) {
int slot = serverPlayer.getInventory().getSlotWithStack(stack);
serverPlayer.getInventory().removeStack(slot);
player.getInventory().removeStack(slot);
oakWoodCount.addAndGet(64);
serverCityBuilder.getInventory().addStack(new ItemStack(Items.OAK_LOG, 64));
update();
}
});
if (MinecraftClient.getInstance().getServer() == null) {
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.CITYBUILDER_ACTION)
.handleOutgoingPacket(player, entity.getId(), CityBuilderAction.GIVE_64_WOOD);
return;
}

entity.give64wood(player);
}).positioning(Positioning.relative(80, 20)).sizing(Sizing.fixed(100), Sizing.fixed(20))
);

inner.child(
Components.button(Text.literal("Give 64 cobblestone"), c -> {
//todo: server packet
final int playerCobblestoneCount = player.getInventory().count(Items.COBBLESTONE);
TaleOfKingdoms.getAPI().executeOnServer(() -> {
final ItemStack stack = new ItemStack(Items.COBBLESTONE, 64);
final ServerPlayerEntity serverPlayer = MinecraftClient.getInstance().getServer().getPlayerManager().getPlayer(player.getUuid());
final CityBuilderEntity serverCityBuilder = (CityBuilderEntity) serverPlayer.getWorld().getEntityById(entity.getId());
if (playerCobblestoneCount >= 64 && cobblestoneCount.get() <= (320 - 64) && serverCityBuilder.getInventory().canInsert(stack)) {
int slot = serverPlayer.getInventory().getSlotWithStack(stack);
serverPlayer.getInventory().removeStack(slot);
player.getInventory().removeStack(slot);
cobblestoneCount.addAndGet(64);
serverCityBuilder.getInventory().addStack(stack);
update();
}
});
if (MinecraftClient.getInstance().getServer() == null) {
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.CITYBUILDER_ACTION)
.handleOutgoingPacket(player, entity.getId(), CityBuilderAction.GIVE_64_STONE);
return;
}

entity.give64stone(player);
}).positioning(Positioning.relative(80, 30)).sizing(Sizing.fixed(100), Sizing.fixed(20))
);

Expand All @@ -150,20 +127,13 @@ protected void build(FlowLayout rootComponent) {

inner.child(
this.fixWholeKingdomButton = (ButtonComponent) Components.button(Text.literal("Fix whole kingdom"), c -> TaleOfKingdoms.getAPI().executeOnServer(() -> {
//todo send server packet
if (entity.getStone() != 320 || entity.getWood() != 320)
if (MinecraftClient.getInstance().getServer() == null) {
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.CITYBUILDER_ACTION)
.handleOutgoingPacket(player, entity.getId(), CityBuilderAction.FIX_KINGDOM);
return;
final ServerPlayerEntity serverPlayer = MinecraftClient.getInstance().getServer().getPlayerManager().getPlayer(player.getUuid());
final CityBuilderEntity serverCityBuilder = (CityBuilderEntity) serverPlayer.getWorld().getEntityById(entity.getId());
TaleOfKingdoms.getAPI().getSchematicHandler().pasteSchematic(Schematic.TIER_1_KINGDOM, serverPlayer, kingdom.getOrigin());
for (BuildCosts buildCost : BuildCosts.values()) {
final KingdomPOI kingdomPOI = buildCost.getKingdomPOI();
final Schematic schematic = buildCost.getSchematic();
if (kingdom.hasBuilt(kingdomPOI)) {
TaleOfKingdoms.getAPI().getSchematicHandler().pasteSchematic(schematic, serverPlayer, kingdom.getPOIPos(kingdomPOI), buildCost.getSchematicRotation());
}
}
serverCityBuilder.getInventory().clear();

entity.fixKingdom(player, kingdom);
})).tooltip(List.of(
Text.literal("Repairing the kingdom costs:"),
Text.literal(" - 320 oak wood"),
Expand Down Expand Up @@ -197,16 +167,13 @@ protected void build(FlowLayout rootComponent) {
final String pluralText = hasBuilt ? "Repairing " : "Building ";

final Component button = Components.button(Text.literal(text).append(build.getDisplayName()), c -> {
//todo: send server packet
final ServerPlayerEntity serverPlayer = MinecraftClient.getInstance().getServer().getPlayerManager().getPlayer(player.getUuid());
final CityBuilderEntity serverCityBuilder = (CityBuilderEntity) serverPlayer.getWorld().getEntityById(entity.getId());
MinecraftClient.getInstance().currentScreen.close();
kingdom.addBuilt(build.getKingdomPOI());
TaleOfKingdoms.LOGGER.info("Placing " + build + "...");
TaleOfKingdoms.getAPI().getSchematicHandler().pasteSchematic(build.getSchematic(), serverPlayer, kingdom.getPOIPos(build.getKingdomPOI()), build.getSchematicRotation());

serverCityBuilder.getInventory().removeItem(Items.OAK_LOG, build.getWood());
serverCityBuilder.getInventory().removeItem(Items.COBBLESTONE, build.getStone());
if (MinecraftClient.getInstance().getServer() == null) {
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.CITYBUILDER_ACTION)
.handleOutgoingPacket(player, entity.getId(), CityBuilderAction.BUILD, build);
return;
}

entity.build(player, build, kingdom);
}).active(canAffordBuild)
.tooltip(List.of(
Text.literal(pluralText).append(build.getDisplayName()).append(Text.literal(" costs:")),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,8 @@ protected void build(FlowLayout rootComponent) {
// Close current screen, calculate paste position, and add their kingdom
MinecraftClient.getInstance().currentScreen.close();
if (MinecraftClient.getInstance().getServer() == null) {
TaleOfKingdoms.getAPI().getClientHandler(Packets.BUILD_KINGDOM_PACKET_ID)
.handleOutgoingPacket(Packets.BUILD_KINGDOM_PACKET_ID,
player, entity.getId());
TaleOfKingdoms.getAPI().getClientPacketHandler(Packets.BUILD_KINGDOM)
.handleOutgoingPacket(player, entity.getId());
return;
}

Expand Down
Loading

0 comments on commit 9db78d2

Please sign in to comment.