mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-08 06:26:43 +01:00
Add a toast message when discovering traits
This commit is contained in:
parent
5b9f548585
commit
1da86cda06
7 changed files with 169 additions and 2 deletions
|
@ -10,6 +10,8 @@ import java.util.Set;
|
|||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||
import com.minelittlepony.unicopia.network.Channel;
|
||||
import com.minelittlepony.unicopia.network.MsgUnlockTraits;
|
||||
import com.minelittlepony.unicopia.util.NbtSerialisable;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
|
@ -21,6 +23,7 @@ import net.minecraft.nbt.NbtCompound;
|
|||
import net.minecraft.nbt.NbtElement;
|
||||
import net.minecraft.nbt.NbtList;
|
||||
import net.minecraft.nbt.NbtString;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
|
@ -56,12 +59,17 @@ public class TraitDiscovery implements NbtSerialisable {
|
|||
}
|
||||
SpellTraits traits = SpellTraits.of(item);
|
||||
items.put(Registry.ITEM.getId(item), traits);
|
||||
Set<Trait> newTraits = new HashSet<>();
|
||||
traits.entries().forEach(e -> {
|
||||
if (this.traits.add(e.getKey())) {
|
||||
unreadTraits.add(e.getKey());
|
||||
newTraits.add(e.getKey());
|
||||
}
|
||||
});
|
||||
unreadTraits.addAll(newTraits);
|
||||
pony.setDirty();
|
||||
if (!newTraits.isEmpty() && !pony.getWorld().isClient) {
|
||||
Channel.UNLOCK_TRAITS.send((ServerPlayerEntity)pony.getMaster(), new MsgUnlockTraits(newTraits));
|
||||
}
|
||||
}
|
||||
|
||||
public SpellTraits getKnownTraits(Item item) {
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
package com.minelittlepony.unicopia.client;
|
||||
|
||||
import com.minelittlepony.unicopia.item.UItems;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.spongepowered.include.com.google.common.base.Objects;
|
||||
|
||||
import net.minecraft.client.gui.DrawableHelper;
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
import net.minecraft.client.toast.Toast;
|
||||
import net.minecraft.client.toast.ToastManager;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TranslatableText;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class DiscoveryToast implements Toast {
|
||||
private static final long MAX_AGE = 5000L;
|
||||
private static final Text TITLE = new TranslatableText("unicopia.toast.discoveries.title");
|
||||
private static final Text DESCRIPTION = new TranslatableText("unicopia.toast.discoveries.description");
|
||||
|
||||
private final List<Identifier> discoveries = new ArrayList<>();
|
||||
private long startTime;
|
||||
|
||||
private boolean justUpdated;
|
||||
|
||||
@Override
|
||||
public Toast.Visibility draw(MatrixStack matrices, ToastManager manager, long startTime) {
|
||||
if (justUpdated) {
|
||||
this.startTime = startTime;
|
||||
justUpdated = false;
|
||||
}
|
||||
|
||||
if (discoveries.isEmpty()) {
|
||||
return Toast.Visibility.HIDE;
|
||||
}
|
||||
|
||||
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
||||
RenderSystem.setShaderTexture(0, TEXTURE);
|
||||
RenderSystem.setShaderColor(1.0F, 1, 1, 1);
|
||||
manager.drawTexture(matrices, 0, 0, 0, 32, getWidth(), getHeight());
|
||||
manager.getGame().textRenderer.draw(matrices, TITLE, 30, 7, -11534256);
|
||||
manager.getGame().textRenderer.draw(matrices, DESCRIPTION, 30, 18, -16777216);
|
||||
|
||||
Identifier icon = discoveries.get((int)(startTime / Math.max(1L, MAX_AGE / discoveries.size()) % discoveries.size()));
|
||||
|
||||
MatrixStack matrixStack = RenderSystem.getModelViewStack();
|
||||
matrixStack.push();
|
||||
matrixStack.scale(0.6F, 0.6F, 1);
|
||||
RenderSystem.applyModelViewMatrix();
|
||||
manager.getGame().getItemRenderer().renderInGui(UItems.SPELLBOOK.getDefaultStack(), 3, 3);
|
||||
matrixStack.pop();
|
||||
RenderSystem.applyModelViewMatrix();
|
||||
|
||||
RenderSystem.setShaderTexture(0, icon);
|
||||
DrawableHelper.drawTexture(matrices, 8, 8, 1, 0, 0, 16, 16, 16, 16);
|
||||
|
||||
// manager.getGame().getItemRenderer().renderInGui(recipe.getOutput(), 8, 8);
|
||||
|
||||
return startTime - this.startTime >= MAX_AGE ? Toast.Visibility.HIDE : Toast.Visibility.SHOW;
|
||||
}
|
||||
|
||||
public DiscoveryToast addDiscoveries(Identifier icon) {
|
||||
if (!discoveries.contains(icon)) {
|
||||
discoveries.add(icon);
|
||||
}
|
||||
justUpdated = true;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
class Discovery {
|
||||
final Identifier icon;
|
||||
final Text description;
|
||||
|
||||
Discovery(Identifier icon, Text description) {
|
||||
this.icon = icon;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
return o instanceof Discovery
|
||||
&& Objects.equal(icon, ((Discovery) o).icon)
|
||||
&& Objects.equal(description, ((Discovery) o).description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(icon, description);
|
||||
}
|
||||
}
|
||||
|
||||
public static void show(ToastManager manager, Identifier icon) {
|
||||
DiscoveryToast existing = manager.getToast(DiscoveryToast.class, TYPE);
|
||||
if (existing == null) {
|
||||
manager.add(new DiscoveryToast().addDiscoveries(icon));
|
||||
} else {
|
||||
existing.addDiscoveries(icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@ public interface Channel {
|
|||
S2CPacketType<MsgSpawnProjectile> SERVER_SPAWN_PROJECTILE = SimpleNetworking.serverToClient(new Identifier("unicopia", "projectile_entity"), MsgSpawnProjectile::new);
|
||||
S2CPacketType<MsgBlockDestruction> SERVER_BLOCK_DESTRUCTION = SimpleNetworking.serverToClient(new Identifier("unicopia", "block_destruction"), MsgBlockDestruction::new);
|
||||
S2CPacketType<MsgCancelPlayerAbility> CANCEL_PLAYER_ABILITY = SimpleNetworking.serverToClient(new Identifier("unicopia", "player_ability_cancel"), MsgCancelPlayerAbility::new);
|
||||
S2CPacketType<MsgUnlockTraits> UNLOCK_TRAITS = SimpleNetworking.serverToClient(new Identifier("unicopia", "unlock_traits"), MsgUnlockTraits::new);
|
||||
|
||||
Identifier SERVER_SELECT_TRIBE_ID = new Identifier("unicopia", "select_tribe");
|
||||
S2CPacketType<MsgTribeSelect> SERVER_SELECT_TRIBE = SimpleNetworking.serverToClient(SERVER_SELECT_TRIBE_ID, MsgTribeSelect::new);
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
package com.minelittlepony.unicopia.network;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.minelittlepony.unicopia.InteractionManager;
|
||||
import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait;
|
||||
import com.minelittlepony.unicopia.util.network.Packet;
|
||||
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
|
||||
public class MsgUnlockTraits implements Packet<PlayerEntity> {
|
||||
|
||||
public final Set<Trait> traits = new HashSet<>();
|
||||
|
||||
MsgUnlockTraits(PacketByteBuf buffer) {
|
||||
int length = buffer.readInt();
|
||||
for (int i = 0; i < length; i++) {
|
||||
Trait.fromId(buffer.readIdentifier()).ifPresent(traits::add);
|
||||
}
|
||||
}
|
||||
|
||||
public MsgUnlockTraits(Set<Trait> traits) {
|
||||
this.traits.addAll(traits);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBuffer(PacketByteBuf buffer) {
|
||||
buffer.writeInt(traits.size());
|
||||
traits.forEach(trait -> buffer.writeIdentifier(trait.getId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(PlayerEntity sender) {
|
||||
InteractionManager.instance().getClientNetworkHandler().handleUnlockTraits(this);
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ import com.minelittlepony.unicopia.network.MsgBlockDestruction;
|
|||
import com.minelittlepony.unicopia.network.MsgCancelPlayerAbility;
|
||||
import com.minelittlepony.unicopia.network.MsgSpawnProjectile;
|
||||
import com.minelittlepony.unicopia.network.MsgTribeSelect;
|
||||
import com.minelittlepony.unicopia.network.MsgUnlockTraits;
|
||||
|
||||
public interface ClientNetworkHandler {
|
||||
|
||||
|
@ -14,4 +15,6 @@ public interface ClientNetworkHandler {
|
|||
void handleBlockDestruction(MsgBlockDestruction packet);
|
||||
|
||||
void handleCancelAbility(MsgCancelPlayerAbility packet);
|
||||
|
||||
void handleUnlockTraits(MsgUnlockTraits packet);
|
||||
}
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
package com.minelittlepony.unicopia.network.handler;
|
||||
|
||||
import com.minelittlepony.unicopia.Owned;
|
||||
import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait;
|
||||
import com.minelittlepony.unicopia.client.ClientBlockDestructionManager;
|
||||
import com.minelittlepony.unicopia.client.DiscoveryToast;
|
||||
import com.minelittlepony.unicopia.client.gui.TribeSelectionScreen;
|
||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||
import com.minelittlepony.unicopia.network.MsgBlockDestruction;
|
||||
import com.minelittlepony.unicopia.network.MsgCancelPlayerAbility;
|
||||
import com.minelittlepony.unicopia.network.MsgSpawnProjectile;
|
||||
import com.minelittlepony.unicopia.network.MsgTribeSelect;
|
||||
import com.minelittlepony.unicopia.network.MsgUnlockTraits;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
|
@ -59,4 +62,10 @@ public class ClientNetworkHandlerImpl implements ClientNetworkHandler {
|
|||
Pony.of(client.player).getAbilities().getStats().forEach(s -> s.setCooldown(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleUnlockTraits(MsgUnlockTraits packet) {
|
||||
for (Trait trait : packet.traits) {
|
||||
DiscoveryToast.show(client.getToastManager(), trait.getSprite());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -500,5 +500,8 @@
|
|||
"advancements.unicopia.molting_season_2.description": "Drop 5 feathers whilst flying",
|
||||
|
||||
"advancements.unicopia.molting_season_3.title": "Molting Season 3",
|
||||
"advancements.unicopia.molting_season_3.description": "Drop 15 feathers whilst flying"
|
||||
"advancements.unicopia.molting_season_3.description": "Drop 15 feathers whilst flying",
|
||||
|
||||
"unicopia.toast.discoveries.title": "New Discoveries!",
|
||||
"unicopia.toast.discoveries.description": "Check your spellbook"
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue