Skip to content

Commit

Permalink
fix christmas! (#10538)
Browse files Browse the repository at this point in the history
port
  • Loading branch information
Raycoms committed Dec 20, 2024
1 parent 12c5394 commit 27a3a84
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,6 @@ public boolean displayHat(final AbstractEntityCitizen citizen)
{
return false;
}
return citizen.getCitizenDataView() == null || (citizen.getCitizenDataView().getInventory().getArmorInSlot(EquipmentSlot.HEAD).isEmpty() && citizen.getCitizenDataView().getCustomTextureUUID() == null);
return citizen.getCitizenDataView() == null || (citizen.getCitizenDataView().getDisplayArmor(EquipmentSlot.HEAD).isEmpty() && citizen.getCitizenDataView().getCustomTextureUUID() == null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@

import com.minecolonies.api.entity.citizen.AbstractEntityCitizen;
import com.minecolonies.api.util.constant.Constants;
import com.minecolonies.core.MineColonies;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.NotNull;

import java.time.LocalDateTime;
import java.time.Month;

import static com.minecolonies.api.client.render.modeltype.SimpleModelType.cachedHalloweenStyle;
import static com.minecolonies.api.entity.citizen.AbstractEntityCitizen.DATA_STYLE;
import static com.minecolonies.api.entity.citizen.AbstractEntityCitizen.DATA_TEXTURE_SUFFIX;

Expand Down Expand Up @@ -44,10 +49,30 @@ public interface ISimpleModelType extends IModelType
*/
default ResourceLocation getTexture(@NotNull final AbstractEntityCitizen entityCitizen)
{
if (cachedHalloweenStyle == null)
{
if (MineColonies.getConfig().getServer().holidayFeatures.get() &&
((LocalDateTime.now().getDayOfMonth() >= 29 && LocalDateTime.now().getMonth() == Month.OCTOBER)
|| (LocalDateTime.now().getDayOfMonth() <= 2 && LocalDateTime.now().getMonth() == Month.NOVEMBER)))
{
cachedHalloweenStyle = "nether";
}
else
{
cachedHalloweenStyle = "";
}
}

String style = entityCitizen.getEntityData().get(DATA_STYLE);
if (!cachedHalloweenStyle.isEmpty())
{
style = cachedHalloweenStyle;
}

final int moddedTextureId = (entityCitizen.getTextureId() % getNumTextures()) + 1;
final String textureIdentifier =
getName().getPath() + (entityCitizen.isFemale() ? "female" : "male") + moddedTextureId + entityCitizen.getEntityData().get(DATA_TEXTURE_SUFFIX);
final ResourceLocation modified = new ResourceLocation(Constants.MOD_ID, BASE_FOLDER + entityCitizen.getEntityData().get(DATA_STYLE) + "/" + textureIdentifier + ".png");
final ResourceLocation modified = new ResourceLocation(Constants.MOD_ID, BASE_FOLDER + style + "/" + textureIdentifier + ".png");
if (Minecraft.getInstance().getResourceManager().getResource(modified).isPresent())
{
return modified;
Expand All @@ -58,10 +83,16 @@ default ResourceLocation getTexture(@NotNull final AbstractEntityCitizen entityC

default ResourceLocation getTextureIcon(@NotNull final AbstractEntityCitizen entityCitizen)
{
String style = entityCitizen.getEntityData().get(DATA_STYLE);
if (cachedHalloweenStyle != null && !cachedHalloweenStyle.isEmpty())
{
style = cachedHalloweenStyle;
}

final int moddedTextureId = (entityCitizen.getTextureId() % getNumTextures()) + 1;
final String textureIdentifier =
getTextureBase() + (entityCitizen.isFemale() ? "female" : "male") + moddedTextureId + entityCitizen.getEntityData()
.get(DATA_TEXTURE_SUFFIX);
return new ResourceLocation(Constants.MOD_ID, "textures/entity_icon/citizen/" + entityCitizen.getEntityData().get(DATA_STYLE) + "/" + textureIdentifier + ".png");
return new ResourceLocation(Constants.MOD_ID, "textures/entity_icon/citizen/" + style + "/" + textureIdentifier + ".png");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
*/
public class SimpleModelType implements ISimpleModelType
{
/**
* Halloween style string. Null = uninitialized.
*/
static String cachedHalloweenStyle = null;

/**
* String describing the citizen. Used by the renderer. Starts with a capital, and does not contain spaces or other special characters.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -227,4 +229,11 @@ public interface ICitizenDataView extends ICitizen
* @return the uuid.
*/
UUID getCustomTextureUUID();

/**
* Get Armor in slot of citizen data view.
* @param equipmentSlot the equipment slot to get it from.
* @return the armor in the slot.
*/
ItemStack getDisplayArmor(EquipmentSlot equipmentSlot);
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;

@OnlyIn(Dist.CLIENT)
public class CitizenArmorLayer<T extends AbstractEntityCitizen, M extends HumanoidModel<T>, A extends HumanoidModel<T>> extends HumanoidArmorLayer<T, M, A>
Expand Down Expand Up @@ -129,7 +128,7 @@ public void render(

private void renderArmorPiece(PoseStack poseStack, MultiBufferSource bufferSource, T citizen, EquipmentSlot equipmentSlot, int light, A armor, final ICitizenDataView citizenDataView)
{
ItemStack itemstack = citizenDataView.getInventory().getArmorInSlot(equipmentSlot);
ItemStack itemstack = citizenDataView.getDisplayArmor(equipmentSlot);
if (itemstack.isEmpty())
{
itemstack = citizen.getItemBySlot(equipmentSlot);
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/com/minecolonies/core/colony/CitizenDataView.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import com.minecolonies.api.entity.citizen.citizenhandlers.ICitizenHappinessHandler;
import com.minecolonies.api.entity.citizen.citizenhandlers.ICitizenSkillHandler;
import com.minecolonies.api.inventory.InventoryCitizen;
import com.minecolonies.api.items.ModItems;
import com.minecolonies.api.util.Tuple;
import com.minecolonies.api.util.constant.Constants;
import com.minecolonies.api.util.constant.Suppression;
import com.minecolonies.core.MineColonies;
import com.minecolonies.core.colony.interactionhandling.ServerCitizenInteraction;
import com.minecolonies.core.entity.citizen.citizenhandlers.CitizenHappinessHandler;
import com.minecolonies.core.entity.citizen.citizenhandlers.CitizenSkillHandler;
Expand All @@ -28,10 +30,15 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.time.Clock;
import java.time.LocalDate;
import java.time.Month;
import java.util.*;

import static com.minecolonies.api.util.constant.NbtTagConstants.TAG_OFFHAND_HELD_ITEM_SLOT;
Expand All @@ -43,6 +50,11 @@
*/
public class CitizenDataView implements ICitizenDataView
{
/**
* Santa Hat.
*/
private static ItemStack cachedDisplaySantaHat = null;

private static final String TAG_HELD_ITEM_SLOT = "HeldItemSlot";

/**
Expand Down Expand Up @@ -614,4 +626,28 @@ public boolean equals(final Object o)

return id == data.getId();
}

@Override
public ItemStack getDisplayArmor(final EquipmentSlot equipmentSlot)
{
if (cachedDisplaySantaHat == null)
{
if (MineColonies.getConfig().getServer().holidayFeatures.get() && LocalDate.now(Clock.systemDefaultZone()).getMonth() == Month.DECEMBER)
{
cachedDisplaySantaHat = new ItemStack(ModItems.santaHat);
}
else
{
cachedDisplaySantaHat = ItemStack.EMPTY;
}
}

final ItemStack currentHat = getInventory().getArmorInSlot(equipmentSlot);
if (currentHat.isEmpty() && cachedDisplaySantaHat != null && cachedDisplaySantaHat != ItemStack.EMPTY && equipmentSlot == EquipmentSlot.HEAD)
{
return cachedDisplaySantaHat;
}

return currentHat;
}
}
9 changes: 0 additions & 9 deletions src/main/java/com/minecolonies/core/colony/Colony.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,6 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.time.LocalDateTime;
import java.time.Month;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

Expand Down Expand Up @@ -1896,13 +1894,6 @@ public void setTextureStyle(final String style)
@Override
public String getTextureStyleId()
{
if (MineColonies.getConfig().getServer().holidayFeatures.get() &&
((LocalDateTime.now().getDayOfMonth() >= 29 && LocalDateTime.now().getMonth() == Month.OCTOBER)
|| (LocalDateTime.now().getDayOfMonth() <= 2 && LocalDateTime.now().getMonth() == Month.NOVEMBER)))
{
return "nether";
}

return this.textureStyle;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -772,19 +772,6 @@ public int getMaxAirSupply()
*/
private boolean updateVisualData()
{
final ItemStack hat = getItemBySlot(EquipmentSlot.HEAD);
if (LocalDate.now(Clock.systemDefaultZone()).getMonth() == Month.DECEMBER
&& MineColonies.getConfig().getServer().holidayFeatures.get())
{
if (hat.isEmpty())
{
this.setItemSlot(EquipmentSlot.HEAD, new ItemStack(ModItems.santaHat));
}
}
else if (!hat.isEmpty() && hat.getItem() == ModItems.santaHat)
{
this.setItemSlot(EquipmentSlot.HEAD, ItemStackUtils.EMPTY);
}
this.setCustomNameVisible(MineColonies.getConfig().getServer().alwaysRenderNameTag.get());

if (!citizenColonyHandler.getColonyOrRegister().getTextureStyleId().equals(getEntityData().get(DATA_STYLE)))
Expand Down

0 comments on commit 27a3a84

Please sign in to comment.