Skip to content

Commit

Permalink
Add Item Toast (+1.20.2)
Browse files Browse the repository at this point in the history
Also fixed the weird issue with older versions.
  • Loading branch information
MoSadie committed Dec 9, 2023
1 parent 6d630d7 commit ee8fc84
Show file tree
Hide file tree
Showing 70 changed files with 4,101 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ public interface EffectExecutor {

boolean showToast(String title, String subtitle);

boolean showItemToast(String itemData, String title, String subtitle);

boolean openBook(JsonObject bookJSON);

boolean narrate(String message, boolean interrupt);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public EffectMCCore(File configFile, File trustFile, EffectExecutor executor) {
effects.add(new ChatVisibilityHandler(this));
effects.add(new SetRenderDistanceHandler(this));
effects.add(new RejoinHandler(this));
effects.add(new ShowItemToastHandler(this));
}

@SuppressWarnings("unused")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.mosadie.effectmc.core.handler;

import com.mosadie.effectmc.core.EffectMCCore;

public class ShowItemToastHandler extends EffectRequestHandler {

public ShowItemToastHandler(EffectMCCore core) {
super(core);
addCommentProperty("You can get item data by holding an item and running /effectmc exportitem");
addStringProperty("item", "", true, "Item Data", "{}");
addCommentProperty("Set color using § color codes.");
addStringProperty("title", "", true, "Title", "Hello");
addStringProperty("subtitle", "", true, "Subtitle", "World!");
addCommentProperty("For a blank subtitle, use a single space.");
}

@Override
public String getEffectName() {
return "Show Item Toast";
}

@Override
public String getEffectTooltip() {
return "Show a toast on screen with a custom message and item.";
}

@Override
EffectResult execute() {
core.getExecutor().log("Showing item toast with data: " + getProperty("item").getAsString() + " title: " + getProperty("title").getAsString() + " Subtitle: " + getProperty("subtitle").getAsString());
if (core.getExecutor().showItemToast(getProperty("item").getAsString(), getProperty("title").getAsString(), getProperty("subtitle").getAsString()))
return new EffectResult("Showing item toast with data: " + getProperty("item").getAsString() + " title: " + getProperty("title").getAsString() + " Subtitle: " + getProperty("subtitle").getAsString(), true);
else
return new EffectResult("Failed to show toast.", false);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,19 @@ public void onInitializeClient() {
LOGGER.info("Exported Book JSON: " + bookStack.getTag());
receiveChatMessage("[EffectMC] Exported the held book to the current log file.");
return 0;
}))).then(ClientCommandManager.literal("exportitem").executes((context -> {
if (MinecraftClient.getInstance().player == null) {
LOGGER.info("Null player running exportitem, this shouldn't happen!");
return 0;
}
CompoundTag tag = new CompoundTag();
MinecraftClient.getInstance().player.getMainHandStack().toTag(tag);
LOGGER.info("Held Item Tag: " + tag);
showItemToast(tag.toString(), "Exported", MinecraftClient.getInstance().player.getMainHandStack().getName().getString());
receiveChatMessage("[EffectMC] Exported held item data to log file!");
return 0;
}))).executes((context -> {
receiveChatMessage("[EffectMC] Available subcommands: exportbook, trust");
receiveChatMessage("[EffectMC] Available subcommands: exportbook, exportitem, trust");
return 0;
})));

Expand Down Expand Up @@ -400,6 +411,13 @@ public boolean showToast(String title, String subtitle) {
return true;
}

@Override
public boolean showItemToast(String itemData, String title, String subtitle) {
MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().getToastManager().add(new ItemToast(itemData, Text.of(title), Text.of(subtitle))));

return true;
}

@Override
public boolean openBook(JsonObject bookJSON) {
MinecraftClient.getInstance().send(() -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.mosadie.effectmc;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.minecraft.client.toast.Toast;
import net.minecraft.client.toast.ToastManager;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.StringNbtReader;
import net.minecraft.text.Text;

public class ItemToast implements Toast {
private ItemStack item;
private Text title;
private Text body;

private long lastChanged;
private boolean changed = true;

public ItemToast(String itemData, Text title, Text body) {
try {
this.item = ItemStack.fromTag(StringNbtReader.parse(itemData));
} catch (CommandSyntaxException e) {
EffectMC.LOGGER.error("Invalid Item Data for Item Toast", e);
this.item = new ItemStack(Items.AIR);
}
this.title = title;
this.body = body;
}
@Override
public Visibility draw(MatrixStack matrices, ToastManager manager, long time) {
if (changed) {
lastChanged = time;
changed = false;
}

manager.getGame().getTextureManager().bindTexture(TEXTURE);
RenderSystem.color3f(1.0F, 1.0F, 1.0F);
manager.drawTexture(matrices, 0, 0, 0, 32, this.getWidth(), this.getHeight());
manager.getGame().textRenderer.draw(matrices, title, 30.0F, 7.0F, -16777216);
manager.getGame().textRenderer.draw(matrices, body, 30.0F, 18.0F, -16777216);
manager.getGame().getItemRenderer().renderInGui(item, 8, 8);
return (double)(time - this.lastChanged) >= 5000.0D ? Toast.Visibility.HIDE : Toast.Visibility.SHOW;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,19 @@ public void onInitializeClient() {
LOGGER.info("Exported Book JSON: " + bookStack.getNbt());
receiveChatMessage("[EffectMC] Exported the held book to the current log file.");
return 0;
}))).then(ClientCommandManager.literal("exportitem").executes((context -> {
if (MinecraftClient.getInstance().player == null) {
LOGGER.info("Null player running exportitem, this shouldn't happen!");
return 0;
}
NbtCompound tag = new NbtCompound();
MinecraftClient.getInstance().player.getMainHandStack().writeNbt(tag);
LOGGER.info("Held Item Tag: " + tag);
showItemToast(tag.toString(), "Exported", MinecraftClient.getInstance().player.getMainHandStack().getName().getString());
receiveChatMessage("[EffectMC] Exported held item data to log file!");
return 0;
}))).executes((context -> {
receiveChatMessage("[EffectMC] Available subcommands: exportbook, trust");
receiveChatMessage("[EffectMC] Available subcommands: exportbook, exportitem trust");
return 0;
})));

Expand Down Expand Up @@ -410,6 +421,13 @@ public boolean showToast(String title, String subtitle) {
return true;
}

@Override
public boolean showItemToast(String itemData, String title, String subtitle) {
MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().getToastManager().add(new ItemToast(itemData, Text.of(title), Text.of(subtitle))));

return true;
}

@Override
public boolean openBook(JsonObject bookJSON) {
MinecraftClient.getInstance().send(() -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.mosadie.effectmc;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
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.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.StringNbtReader;
import net.minecraft.text.Text;

public class ItemToast implements Toast {
private ItemStack item;
private Text title;
private Text body;

private long lastChanged;
private boolean changed = true;

public ItemToast(String itemData, Text title, Text body) {
try {
this.item = ItemStack.fromNbt(StringNbtReader.parse(itemData));
} catch (CommandSyntaxException e) {
EffectMC.LOGGER.error("Invalid Item Data for Item Toast", e);
this.item = new ItemStack(Items.AIR);
}
this.title = title;
this.body = body;
}
@Override
public Visibility draw(MatrixStack matrices, ToastManager manager, long time) {
if (changed) {
lastChanged = time;
changed = false;
}

RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, TEXTURE);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
manager.drawTexture(matrices, 0, 0, 0, 32, this.getWidth(), this.getHeight());
manager.getGame().textRenderer.draw(matrices, title, 30.0F, 7.0F, -16777216);
manager.getGame().textRenderer.draw(matrices, body, 30.0F, 18.0F, -16777216);
RenderSystem.applyModelViewMatrix();
manager.getGame().getItemRenderer().renderInGui(item, 8, 8);
return (double)(time - this.lastChanged) >= 5000.0D ? Toast.Visibility.HIDE : Toast.Visibility.SHOW;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,19 @@ public void onInitializeClient() {
LOGGER.info("Exported Book JSON: " + bookStack.getNbt());
receiveChatMessage("[EffectMC] Exported the held book to the current log file.");
return 0;
}))).then(ClientCommandManager.literal("exportitem").executes((context -> {
if (MinecraftClient.getInstance().player == null) {
LOGGER.info("Null player running exportitem, this shouldn't happen!");
return 0;
}
NbtCompound tag = new NbtCompound();
MinecraftClient.getInstance().player.getMainHandStack().writeNbt(tag);
LOGGER.info("Held Item Tag: " + tag);
showItemToast(tag.toString(), "Exported", MinecraftClient.getInstance().player.getMainHandStack().getName().getString());
receiveChatMessage("[EffectMC] Exported held item data to log file!");
return 0;
}))).executes((context -> {
receiveChatMessage("[EffectMC] Available subcommands: exportbook, trust");
receiveChatMessage("[EffectMC] Available subcommands: exportbook, exportitem, trust");
return 0;
})));

Expand Down Expand Up @@ -406,6 +417,13 @@ public boolean showToast(String title, String subtitle) {
return true;
}

@Override
public boolean showItemToast(String itemData, String title, String subtitle) {
MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().getToastManager().add(new ItemToast(itemData, Text.of(title), Text.of(subtitle))));

return true;
}

@Override
public boolean openBook(JsonObject bookJSON) {
MinecraftClient.getInstance().send(() -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.mosadie.effectmc;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
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.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.StringNbtReader;
import net.minecraft.text.Text;

public class ItemToast implements Toast {
private ItemStack item;
private Text title;
private Text body;

private long lastChanged;
private boolean changed = true;

public ItemToast(String itemData, Text title, Text body) {
try {
this.item = ItemStack.fromNbt(StringNbtReader.parse(itemData));
} catch (CommandSyntaxException e) {
EffectMC.LOGGER.error("Invalid Item Data for Item Toast", e);
this.item = new ItemStack(Items.AIR);
}
this.title = title;
this.body = body;
}
@Override
public Visibility draw(MatrixStack matrices, ToastManager manager, long time) {
if (changed) {
lastChanged = time;
changed = false;
}

RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, TEXTURE);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
manager.drawTexture(matrices, 0, 0, 0, 32, this.getWidth(), this.getHeight());
manager.getClient().textRenderer.draw(matrices, title, 30.0F, 7.0F, -16777216);
manager.getClient().textRenderer.draw(matrices, body, 30.0F, 18.0F, -16777216);
RenderSystem.applyModelViewMatrix();
manager.getClient().getItemRenderer().renderInGui(item, 8, 8);
return (double)(time - this.lastChanged) >= 5000.0D ? Visibility.HIDE : Visibility.SHOW;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,19 @@ public void onInitializeClient() {
LOGGER.info("Exported Book JSON: " + bookStack.getNbt());
receiveChatMessage("[EffectMC] Exported the held book to the current log file.");
return 0;
}))).then(ClientCommandManager.literal("exportitem").executes((context -> {
if (MinecraftClient.getInstance().player == null) {
LOGGER.info("Null player running exportitem, this shouldn't happen!");
return 0;
}
NbtCompound tag = new NbtCompound();
MinecraftClient.getInstance().player.getMainHandStack().writeNbt(tag);
LOGGER.info("Held Item Tag: " + tag);
showItemToast(tag.toString(), "Exported", MinecraftClient.getInstance().player.getMainHandStack().getName().getString());
receiveChatMessage("[EffectMC] Exported held item data to log file!");
return 0;
}))).executes((context -> {
receiveChatMessage("[EffectMC] Available subcommands: exportbook, trust");
receiveChatMessage("[EffectMC] Available subcommands: exportbook, exportitem, trust");
return 0;
})));

Expand Down Expand Up @@ -406,6 +417,13 @@ public boolean showToast(String title, String subtitle) {
return true;
}

@Override
public boolean showItemToast(String itemData, String title, String subtitle) {
MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().getToastManager().add(new ItemToast(itemData, Text.of(title), Text.of(subtitle))));

return true;
}

@Override
public boolean openBook(JsonObject bookJSON) {
MinecraftClient.getInstance().send(() -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.mosadie.effectmc;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
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.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.StringNbtReader;
import net.minecraft.text.Text;

public class ItemToast implements Toast {
private ItemStack item;
private Text title;
private Text body;

private long lastChanged;
private boolean changed = true;

public ItemToast(String itemData, Text title, Text body) {
try {
this.item = ItemStack.fromNbt(StringNbtReader.parse(itemData));
} catch (CommandSyntaxException e) {
EffectMC.LOGGER.error("Invalid Item Data for Item Toast", e);
this.item = new ItemStack(Items.AIR);
}
this.title = title;
this.body = body;
}
@Override
public Visibility draw(MatrixStack matrices, ToastManager manager, long time) {
if (changed) {
lastChanged = time;
changed = false;
}

RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, TEXTURE);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
manager.drawTexture(matrices, 0, 0, 0, 32, this.getWidth(), this.getHeight());
manager.getClient().textRenderer.draw(matrices, title, 30.0F, 7.0F, -16777216);
manager.getClient().textRenderer.draw(matrices, body, 30.0F, 18.0F, -16777216);
RenderSystem.applyModelViewMatrix();
manager.getClient().getItemRenderer().renderInGui(item, 8, 8);
return (double)(time - this.lastChanged) >= 5000.0D ? Visibility.HIDE : Visibility.SHOW;
}
}
Loading

0 comments on commit ee8fc84

Please sign in to comment.