Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a name tag modifier to the magic mirror #155

Open
wants to merge 3 commits into
base: 1.20.1
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.client.renderer.block.model.ItemOverrides;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.*;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.Material;
import net.minecraft.client.resources.model.ModelBaker;
import net.minecraft.client.resources.model.ModelState;
import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.BannerMagicMirrorModifier;
import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.CreatureMagicMirrorModifier;
import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.MagicMirrorModifier;
import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.NameTagMagicMirrorModifier;
import com.tomboshoven.minecraft.magicmirror.commands.Commands;
import com.tomboshoven.minecraft.magicmirror.data.DataGenerators;
import com.tomboshoven.minecraft.magicmirror.items.Items;
Expand Down Expand Up @@ -53,5 +54,6 @@ public MagicMirrorMod() {
MagicMirrorModifier.register(new ArmorMagicMirrorModifier());
MagicMirrorModifier.register(new BannerMagicMirrorModifier());
MagicMirrorModifier.register(new CreatureMagicMirrorModifier());
MagicMirrorModifier.register(new NameTagMagicMirrorModifier());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers;

import com.tomboshoven.minecraft.magicmirror.blocks.entities.MagicMirrorCoreBlockEntity;
import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.MagicMirrorModifier;
import com.tomboshoven.minecraft.magicmirror.reflection.Reflection;
import com.tomboshoven.minecraft.magicmirror.reflection.modifiers.NameTagReflectionModifier;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.Containers;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;

import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;

import static com.tomboshoven.minecraft.magicmirror.MagicMirrorMod.LOGGER;

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class NameTagMagicMirrorBlockEntityModifier extends MagicMirrorBlockEntityModifier {
@Nullable
Component nameTag;

/**
* The object that modifies the tag shown in the reflection.
*/
@Nullable
private NameTagReflectionModifier reflectionModifier;

/**
* @param modifier The modifier that applied this object to the block entity.
*/
public NameTagMagicMirrorBlockEntityModifier(MagicMirrorModifier modifier) {
super(modifier);
}

public NameTagMagicMirrorBlockEntityModifier(MagicMirrorModifier modifier, Component nameTag) {
this(modifier);
this.nameTag = nameTag;
}

@Override
public CompoundTag write(CompoundTag nbt) {
CompoundTag tag = super.write(nbt);
if (nameTag != null) {
tag.putString("NameTag", Component.Serializer.toJson(nameTag));
}
return tag;
}

@Override
public void read(CompoundTag nbt) {
super.read(nbt);

if (nbt.contains("NameTag", 8)) {
String name = nbt.getString("NameTag");
try {
nameTag = Component.Serializer.fromJson(name);
} catch (Exception exception) {
LOGGER.warn("Failed to parse item tag {}", name, exception);
}
}
}

@Override
public void remove(Level world, BlockPos pos) {
ItemStack itemStack = new ItemStack(Items.NAME_TAG);
itemStack.setHoverName(nameTag);
Containers.dropItemStack(world, pos.getX(), pos.getY(), pos.getZ(), itemStack);
}

@Override
public void activate(MagicMirrorCoreBlockEntity blockEntity) {
Reflection reflection = blockEntity.getReflection();
if (reflection != null) {
reflectionModifier = createReflectionModifier();
reflection.addModifier(reflectionModifier);
}
}

private NameTagReflectionModifier createReflectionModifier() {
return new NameTagReflectionModifier(nameTag);
}

@Override
public void deactivate(MagicMirrorCoreBlockEntity blockEntity) {
if (reflectionModifier != null) {
Reflection reflection = blockEntity.getReflection();
if (reflection != null) {
reflection.removeModifier(reflectionModifier);
}
}
}

@Override
public boolean tryPlayerActivate(MagicMirrorCoreBlockEntity blockEntity, Player playerIn, InteractionHand hand) {
// No behavior.
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@
import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.ArmorMagicMirrorBlockEntityModifier;
import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.MagicMirrorBlockEntityModifier;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;

import javax.annotation.ParametersAreNonnullByDefault;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@
import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.BannerMagicMirrorBlockEntityModifier;
import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.MagicMirrorBlockEntityModifier;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.BannerItem;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

import javax.annotation.ParametersAreNonnullByDefault;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@
import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.CreatureMagicMirrorBlockEntityModifier;
import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.MagicMirrorBlockEntityModifier;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;

import javax.annotation.ParametersAreNonnullByDefault;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;

import javax.annotation.Nullable;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.tomboshoven.minecraft.magicmirror.blocks.modifiers;

import com.tomboshoven.minecraft.magicmirror.blocks.entities.MagicMirrorCoreBlockEntity;
import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.MagicMirrorBlockEntityModifier;
import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.NameTagMagicMirrorBlockEntityModifier;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;

import javax.annotation.ParametersAreNonnullByDefault;

/**
* A magic mirror modifier that adds a name tag.
*/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class NameTagMagicMirrorModifier extends MagicMirrorModifier {
@Override
public String getName() {
return "name_tag";
}

@Override
public boolean canModify(ItemStack heldItem, MagicMirrorCoreBlockEntity blockEntity) {
// Must be activated using a name tag.
if (heldItem.getItem() != Items.NAME_TAG) {
return false;
}
// Name tag must have a custom name.
if (!heldItem.hasCustomHoverName()) {
return false;
}

// Must not have an armor modifier yet.
return !hasModifierOfType(blockEntity);
}

@Override
MagicMirrorBlockEntityModifier createBlockEntityModifier(CompoundTag nbt) {
MagicMirrorBlockEntityModifier teModifier = new NameTagMagicMirrorBlockEntityModifier(this);
teModifier.read(nbt);
return teModifier;
}

@Override
MagicMirrorBlockEntityModifier createBlockEntityModifier(ItemStack usedItem) {
return new NameTagMagicMirrorBlockEntityModifier(this, usedItem.getHoverName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.tomboshoven.minecraft.magicmirror.MagicMirrorMod;
import com.tomboshoven.minecraft.magicmirror.reflection.modifiers.ReflectionModifier;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.Entity;

import javax.annotation.Nullable;
Expand Down Expand Up @@ -105,6 +106,18 @@ public Entity getReflectedEntity() {
return reflectedEntity;
}

/**
* @return The name tag for the reflection, or null if none.
*/
@Nullable
public Component getNameTag() {
Component nameTag = null;
for (ReflectionModifier modifier : modifiers) {
nameTag = modifier.applyNameTag(nameTag);
}
return nameTag;
}

/**
* Reflect an entity.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;

import java.util.Locale;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.tomboshoven.minecraft.magicmirror.reflection.modifiers;

import net.minecraft.network.chat.Component;
import org.jetbrains.annotations.Nullable;

public class NameTagReflectionModifier extends ReflectionModifier {
Component nameTag;

public NameTagReflectionModifier(Component nameTag) {
this.nameTag = nameTag;
}

@Nullable
@Override
public Component applyNameTag(@Nullable Component nameTag) {
return this.nameTag;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import com.tomboshoven.minecraft.magicmirror.reflection.renderers.ReflectionRendererBase;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.network.chat.Component;

import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;

/**
Expand All @@ -18,5 +20,18 @@ public abstract class ReflectionModifier {
* @param reflectionRenderer The renderer to be changed.
* @return The updated renderer.
*/
public abstract ReflectionRendererBase apply(ReflectionRendererBase reflectionRenderer);
public ReflectionRendererBase apply(ReflectionRendererBase reflectionRenderer) {
return reflectionRenderer;
}

/**
* Apply the modification to the name tag.
*
* @param nameTag The name tag to be changed.
* @return The updated name tag.
*/
@Nullable
public Component applyNameTag(@Nullable Component nameTag) {
return nameTag;
}
}
Loading