Skip to content

Commit

Permalink
okable.
Browse files Browse the repository at this point in the history
  • Loading branch information
KrLite committed Mar 10, 2024
1 parent deb4f63 commit f10d573
Show file tree
Hide file tree
Showing 17 changed files with 222 additions and 91 deletions.
5 changes: 3 additions & 2 deletions src/main/java/net/krlite/knowledges/KnowledgesClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import net.krlite.knowledges.manager.KnowledgesComponentManager;
import net.krlite.knowledges.manager.KnowledgesDataManager;
import net.krlite.knowledges.manager.KnowledgesTagManager;
import net.krlite.knowledges.networking.KnowledgesNetworking;
import net.krlite.knowledges.networking.ClientNetworking;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
Expand All @@ -41,6 +41,7 @@ public class KnowledgesClient implements ClientModInitializer {
public static final KnowledgesTagManager TAGS = new KnowledgesTagManager();

public static final KnowledgesHud HUD = new KnowledgesHud();

public static final UsernameCache CACHE_USERNAME = new UsernameCache();

static {
Expand Down Expand Up @@ -68,7 +69,7 @@ public void onInitializeClient() {
TAGS.fixKeys();

AbstractInfoComponent.Animation.registerEvents();
KnowledgesNetworking.registerClient();
new ClientNetworking().register();

// Components
FabricLoader.getInstance().getEntrypointContainers(KnowledgesCommon.ID, ComponentProvider.class).forEach(entrypoint -> {
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/krlite/knowledges/KnowledgesCommon.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.krlite.knowledges;

import net.fabricmc.api.ModInitializer;
import net.krlite.knowledges.networking.KnowledgesNetworking;
import net.krlite.knowledges.networking.ServerNetworking;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -11,6 +11,6 @@ public class KnowledgesCommon implements ModInitializer {

@Override
public void onInitialize() {
KnowledgesNetworking.registerServer();
new ServerNetworking().register();
}
}
7 changes: 0 additions & 7 deletions src/main/java/net/krlite/knowledges/api/tag/TagProtocol.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,12 @@ public void operate(Consumer<Map<K, V>> mapConsumer) {

protected void save() {
if (!file.exists()) {
file.mkdirs();
try {
file.getParentFile().mkdirs();
file.createNewFile();
} catch (IOException e) {
KnowledgesClient.LOGGER.error("Failed creating file!", e);
}
}

new SaveThread(file, gson.toJson(asMap())).start();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.mojang.authlib.yggdrasil.ProfileResult;
import net.krlite.knowledges.KnowledgesClient;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity;

import java.util.*;

Expand All @@ -28,6 +29,10 @@ public Optional<String> get(UUID key) {
return super.get(key);
}

public void put(PlayerEntity player) {
put(player.getUuid(), player.getGameProfile().getName());
}

private void download(UUID uuid) {
if (downloading.contains(uuid)) return;
new DownloadThread(this, uuid).start();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ public Optional<MutableText> blockInformation(BlockRepresentable representable)
);

final AtomicReference<MutableText> beeCountText = new AtomicReference<>(Text.empty());
((NbtByteCaster) BeehiveTag.Protocol.BEES_BYTE.caster()).get(data).ifPresent(beeCount -> {
BeehiveTag.BEES.get(data).ifPresent(beeCount -> {
beeCountText.set(beeCount == 0 ? localize("bee_count", "empty") : Text.translatable(
localizationKey("bee_count"),
beeCount
));
});
((NbtBooleanCaster) BeehiveTag.Protocol.FULL_BOOLEAN.caster()).get(data).ifPresent(full -> {
BeehiveTag.FULL.get(data).ifPresent(full -> {
if (full) beeCountText.set(localize("bee_count", "full"));
});

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.krlite.knowledges.impl.data.info.entity.entitydescription;

import net.krlite.knowledges.KnowledgesClient;
import net.krlite.knowledges.api.representable.EntityRepresentable;
import net.krlite.knowledges.impl.data.info.entity.AbstractEntityDescriptionData;
import net.krlite.knowledges.impl.tag.entity.AnimalOwnerTag;
import net.minecraft.entity.Ownable;
import net.minecraft.text.MutableText;
import org.jetbrains.annotations.NotNull;

import java.util.Optional;
import java.util.UUID;
import java.util.function.Function;

public class AnimalOwnerEntityDescriptionData extends AbstractEntityDescriptionData {
@Override
public Optional<MutableText> entityDescription(EntityRepresentable representable) {
if (representable.entity() instanceof Ownable ownable && ownable.getOwner() != null) {
final Function<String, MutableText> localization = name -> localize("owner", name);

return AnimalOwnerTag.OWNER.get(representable.data())
.map(localization)
.or(() -> {
UUID ownerUuid = ownable.getOwner().getUuid();
return KnowledgesClient.CACHE_USERNAME.get(ownerUuid)
.map(localization)
.or(() -> Optional.of(localize("owner.none")));
});
}

return Optional.empty();
}

@Override
public @NotNull String partialPath() {
return "animal_owner";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ public Optional<MutableText> entityDescription(EntityRepresentable representable
}
}

// Description
if (heldItemStack.isOf(Items.CLOCK)) {
descriptionText = KnowledgeProxy.getDateAndTime();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import net.krlite.knowledges.api.entrypoint.DataProvider;
import net.krlite.knowledges.impl.data.info.block.MineableToolData;
import net.krlite.knowledges.impl.data.info.block.blockinformation.*;
import net.krlite.knowledges.impl.data.info.entity.entitydescription.AnimalOwnerEntityDescriptionData;
import net.krlite.knowledges.impl.data.info.entity.entitydescription.ItemFrameEntityDescriptionData;
import net.krlite.knowledges.impl.data.info.entity.entitydescription.VillagerEntityDescriptionData;
import net.krlite.knowledges.impl.data.info.entity.entityinformation.ItemFrameEntityInformationData;
Expand All @@ -18,6 +19,7 @@ public class KnowledgesDataProvider implements DataProvider {
public @NotNull List<Class<? extends Data<?>>> provide() {
return List.of(
MineableToolData.class,

NoteBlockInformationData.class,
BannerBlockInformationData.class,
ComposterBlockInformationData.class,
Expand All @@ -29,6 +31,8 @@ public class KnowledgesDataProvider implements DataProvider {
PaintingEntityInformationData.class,
ItemFrameEntityInformationData.class,
VillagerEntityInformationData.class,

AnimalOwnerEntityDescriptionData.class,
ItemFrameEntityDescriptionData.class,
VillagerEntityDescriptionData.class
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import net.krlite.knowledges.api.entrypoint.TagProvider;
import net.krlite.knowledges.api.tag.AdditionalTag;
import net.krlite.knowledges.impl.tag.block.BeehiveTag;
import net.krlite.knowledges.impl.tag.entity.AnimalOwnerTag;
import org.jetbrains.annotations.NotNull;

import java.util.List;
Expand All @@ -11,7 +12,8 @@ public class KnowledgesTagProvider implements TagProvider {
@Override
public @NotNull List<Class<? extends AdditionalTag<?, ?>>> provide() {
return List.of(
BeehiveTag.class
BeehiveTag.class,
AnimalOwnerTag.class
);
}
}
23 changes: 4 additions & 19 deletions src/main/java/net/krlite/knowledges/impl/tag/block/BeehiveTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import net.krlite.knowledges.api.proxy.KnowledgeProxy;
import net.krlite.knowledges.api.representable.BlockRepresentable;
import net.krlite.knowledges.api.tag.AdditionalBlockTag;
import net.krlite.knowledges.api.tag.TagProtocol;
import net.krlite.knowledges.api.tag.caster.NbtBooleanCaster;
import net.krlite.knowledges.api.tag.caster.NbtByteCaster;
import net.krlite.knowledges.api.tag.caster.NbtCaster;
Expand All @@ -15,34 +14,20 @@
import org.jetbrains.annotations.NotNull;

public class BeehiveTag implements AdditionalBlockTag {
public enum Protocol implements TagProtocol<BeehiveTag, Protocol> {
BEES_BYTE(new NbtByteCaster("Bees")),
FULL_BOOLEAN(new NbtBooleanCaster("Full"));

private final NbtCaster<?> caster;

Protocol(NbtCaster<?> caster) {
this.caster = caster;
}

@Override
public NbtCaster<?> caster() {
return caster;
}
}
public static final NbtByteCaster BEES = new NbtByteCaster("Bees");
public static final NbtBooleanCaster FULL = new NbtBooleanCaster("Full");

@Override
public boolean isApplicableTo(Block block) {
System.out.println(block);
return block instanceof BeehiveBlock;
}

@Override
public void append(NbtCompound data, BlockRepresentable representable) {
representable.blockEntity().ifPresent(blockEntity -> {
if (blockEntity instanceof BeehiveBlockEntity beehiveBlockEntity) {
((NbtByteCaster) Protocol.BEES_BYTE.caster()).put(data, (byte) beehiveBlockEntity.getBeeCount());
((NbtBooleanCaster) Protocol.FULL_BOOLEAN.caster()).put(data, beehiveBlockEntity.isFullOfBees());
BEES.put(data, (byte) beehiveBlockEntity.getBeeCount());
FULL.put(data, beehiveBlockEntity.isFullOfBees());
}
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package net.krlite.knowledges.impl.tag.entity;

import net.krlite.knowledges.KnowledgesClient;
import net.krlite.knowledges.api.representable.EntityRepresentable;
import net.krlite.knowledges.api.tag.AdditionalEntityTag;
import net.krlite.knowledges.api.tag.caster.NbtCaster;
import net.krlite.knowledges.api.tag.caster.NbtStringCaster;
import net.minecraft.entity.Entity;
import net.minecraft.entity.Ownable;
import net.minecraft.entity.passive.TameableEntity;
Expand All @@ -12,9 +15,11 @@
import java.util.UUID;

public class AnimalOwnerTag implements AdditionalEntityTag {
public static final NbtStringCaster OWNER = new NbtStringCaster("Owner");

@Override
public boolean isApplicableTo(Entity entity) {
return true;
return entity instanceof Ownable;
}

@Override
Expand All @@ -25,7 +30,10 @@ public void append(NbtCompound data, EntityRepresentable representable) {
return;

if (entity instanceof Ownable ownable && ownable.getOwner() != null) {
UUID owner = ownable.getOwner().getUuid();
UUID ownerUuid = ownable.getOwner().getUuid();
KnowledgesClient.CACHE_USERNAME.get(ownerUuid).ifPresent(name ->
OWNER.put(data, name)
);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package net.krlite.knowledges.mixin.client;

import net.krlite.knowledges.KnowledgesClient;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(ClientWorld.class)
public class ClientWorldMixin {
@Inject(method = "addEntity", at = @At("HEAD"))
private void addPlayer(Entity entity, CallbackInfo ci) {
if (entity instanceof PlayerEntity player)
KnowledgesClient.CACHE_USERNAME.put(player);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package net.krlite.knowledges.networking;

import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.krlite.knowledges.KnowledgesClient;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.network.PacketByteBuf;

public class ClientNetworking implements KnowledgesNetworking {
@Override
public void register() {
ClientPlayNetworking.registerGlobalReceiver(KnowledgesNetworking.PACKET_RECEIVE_DATA, new ReceiveData());
ClientPlayNetworking.registerGlobalReceiver(KnowledgesNetworking.PACKET_SERVER_PING, new ServerPing());
ClientPlayConnectionEvents.DISCONNECT.register(new PlayerDisconnect());
}

public static class ReceiveData implements ClientPlayNetworking.PlayChannelHandler {
@Override
public void receive(MinecraftClient client, ClientPlayNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) {
NbtCompound compound = buf.readNbt();
client.execute(() -> KnowledgesClient.HUD.onReceiveData(compound));
}
}

public static class ServerPing implements ClientPlayNetworking.PlayChannelHandler {
@Override
public void receive(MinecraftClient client, ClientPlayNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) {
client.execute(() -> KnowledgesClient.HUD.setConnectionStatus(true));
}
}

public static class PlayerDisconnect implements ClientPlayConnectionEvents.Disconnect {
@Override
public void onPlayDisconnect(ClientPlayNetworkHandler handler, MinecraftClient client) {
KnowledgesClient.HUD.setConnectionStatus(false);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.krlite.knowledges.KnowledgesClient;
Expand All @@ -11,44 +12,20 @@
import net.krlite.knowledges.impl.representable.KnowledgesEntityRepresentable;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;

public class KnowledgesNetworking {
public static final Identifier PACKET_PEEK_BLOCK = identifier("packet_peek_block");
public static final Identifier PACKET_PEEK_ENTITY = identifier("packet_peek_entity");
public static final Identifier PACKET_RECEIVE_DATA = identifier("packet_receive_data");
public static final Identifier PACKET_SERVER_PING = identifier("packet_server_ping");
public interface KnowledgesNetworking {
Identifier PACKET_PEEK_BLOCK = identifier("packet_peek_block");
Identifier PACKET_PEEK_ENTITY = identifier("packet_peek_entity");
Identifier PACKET_RECEIVE_DATA = identifier("packet_receive_data");
Identifier PACKET_SERVER_PING = identifier("packet_server_ping");

public static Identifier identifier(String path) {
static Identifier identifier(String path) {
return new Identifier(KnowledgesCommon.ID + "_networking", path);
}

public static void registerServer() {
ServerPlayNetworking.registerGlobalReceiver(PACKET_PEEK_BLOCK, (server, player, handler, buf, responseSender) -> {
KnowledgesBlockRepresentable.onRequest(buf, player, server::execute, compound -> {
PacketByteBuf data = PacketByteBufs.create();
data.writeNbt(compound);
responseSender.sendPacket(PACKET_RECEIVE_DATA, data);
});
});
ServerPlayNetworking.registerGlobalReceiver(PACKET_PEEK_ENTITY, (server, player, handler, buf, responseSender) -> {
KnowledgesEntityRepresentable.onRequest(buf, player, server::execute, compound -> {
PacketByteBuf data = PacketByteBufs.create();
data.writeNbt(compound);
responseSender.sendPacket(PACKET_RECEIVE_DATA, data);
});
});
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> ServerPlayNetworking.send(handler.getPlayer(), PACKET_SERVER_PING, PacketByteBufs.create()));
}

public static void registerClient() {
ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> KnowledgesClient.HUD.setConnectionStatus(false));
ClientPlayNetworking.registerGlobalReceiver(KnowledgesNetworking.PACKET_RECEIVE_DATA, (client, handler, buf, responseSender) -> {
NbtCompound compound = buf.readNbt();
client.execute(() -> KnowledgesClient.HUD.onReceiveData(compound));
});
ClientPlayNetworking.registerGlobalReceiver(KnowledgesNetworking.PACKET_SERVER_PING, (client, handler, buf, responseSender) ->
client.execute(() -> KnowledgesClient.HUD.setConnectionStatus(true))
);
}
void register();
}
Loading

0 comments on commit f10d573

Please sign in to comment.