Update furnace fuels to not recreate it's list every query, and update when tags are reloaded. Add Tag update events. (#6140)
This commit is contained in:
parent
bb83e11a7c
commit
79ce18ac3e
8 changed files with 138 additions and 18 deletions
|
@ -64,7 +64,7 @@
|
|||
clientrecipebook.func_199644_c();
|
||||
clientrecipebook.func_199642_d().forEach(imutablesearchtree::func_217872_a);
|
||||
imutablesearchtree.func_194040_a();
|
||||
+ net.minecraftforge.client.ForgeHooksClient.onRecipesUpdated();
|
||||
+ net.minecraftforge.client.ForgeHooksClient.onRecipesUpdated(this.field_199528_o);
|
||||
}
|
||||
|
||||
public void func_200232_a(SPlayerLookPacket p_200232_1_) {
|
||||
|
@ -77,7 +77,15 @@
|
|||
if (effect != null) {
|
||||
EffectInstance effectinstance = new EffectInstance(effect, p_147260_1_.func_180755_e(), p_147260_1_.func_149428_f(), p_147260_1_.func_186984_g(), p_147260_1_.func_179707_f(), p_147260_1_.func_205527_h());
|
||||
effectinstance.func_100012_b(p_147260_1_.func_149429_c());
|
||||
@@ -1766,10 +1779,12 @@
|
||||
@@ -1353,6 +1366,7 @@
|
||||
}
|
||||
|
||||
this.field_147299_f.func_213253_a(SearchTreeManager.field_215360_b).func_194040_a();
|
||||
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.TagsUpdatedEvent(this.field_199725_m));
|
||||
}
|
||||
|
||||
public void func_175098_a(SCombatPacket p_175098_1_) {
|
||||
@@ -1766,10 +1780,12 @@
|
||||
|
||||
this.field_147299_f.field_184132_p.field_217741_m.func_217692_a(pointofinterestdebugrenderer$braininfo);
|
||||
} else {
|
||||
|
@ -91,7 +99,7 @@
|
|||
packetbuffer.release();
|
||||
}
|
||||
|
||||
@@ -1909,7 +1924,7 @@
|
||||
@@ -1909,7 +1925,7 @@
|
||||
for(SEntityPropertiesPacket.Snapshot sentitypropertiespacket$snapshot : p_147290_1_.func_149441_d()) {
|
||||
IAttributeInstance iattributeinstance = abstractattributemap.func_111152_a(sentitypropertiespacket$snapshot.func_151409_a());
|
||||
if (iattributeinstance == null) {
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
--- a/net/minecraft/tags/NetworkTagManager.java
|
||||
+++ b/net/minecraft/tags/NetworkTagManager.java
|
||||
@@ -69,6 +69,7 @@
|
||||
ItemTags.func_199902_a(this.field_199720_b);
|
||||
FluidTags.func_206953_a(this.field_205705_c);
|
||||
EntityTypeTags.func_219759_a(this.field_215299_d);
|
||||
+ net.minecraftforge.fml.DeferredWorkQueue.runLater(() -> net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.TagsUpdatedEvent(this)));
|
||||
}, p_215226_6_);
|
||||
}
|
||||
|
|
@ -1,6 +1,14 @@
|
|||
--- a/net/minecraft/tileentity/AbstractFurnaceTileEntity.java
|
||||
+++ b/net/minecraft/tileentity/AbstractFurnaceTileEntity.java
|
||||
@@ -169,9 +169,9 @@
|
||||
@@ -85,6 +85,7 @@
|
||||
this.field_214014_c = p_i49964_2_;
|
||||
}
|
||||
|
||||
+ @Deprecated //Forge - get burn times by calling ForgeHooks#getBurnTime(ItemStack)
|
||||
public static Map<Item, Integer> func_214001_f() {
|
||||
Map<Item, Integer> map = Maps.newLinkedHashMap();
|
||||
func_213996_a(map, Items.field_151129_at, 20000);
|
||||
@@ -169,9 +170,9 @@
|
||||
super.func_145839_a(p_145839_1_);
|
||||
this.field_214012_a = NonNullList.func_191197_a(this.func_70302_i_(), ItemStack.field_190927_a);
|
||||
ItemStackHelper.func_191283_b(p_145839_1_, this.field_214012_a);
|
||||
|
@ -13,7 +21,7 @@
|
|||
this.field_214019_k = this.func_213997_a(this.field_214012_a.get(1));
|
||||
int i = p_145839_1_.func_74765_d("RecipesUsedSize");
|
||||
|
||||
@@ -185,9 +185,9 @@
|
||||
@@ -185,9 +186,9 @@
|
||||
|
||||
public CompoundNBT func_189515_b(CompoundNBT p_189515_1_) {
|
||||
super.func_189515_b(p_189515_1_);
|
||||
|
@ -26,7 +34,7 @@
|
|||
ItemStackHelper.func_191282_a(p_189515_1_, this.field_214012_a);
|
||||
p_189515_1_.func_74777_a("RecipesUsedSize", (short)this.field_214022_n.size());
|
||||
int i = 0;
|
||||
@@ -217,12 +217,14 @@
|
||||
@@ -217,12 +218,14 @@
|
||||
this.field_214019_k = this.field_214018_j;
|
||||
if (this.func_214006_r()) {
|
||||
flag1 = true;
|
||||
|
@ -43,7 +51,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
@@ -266,10 +268,10 @@
|
||||
@@ -266,10 +269,10 @@
|
||||
return true;
|
||||
} else if (!itemstack1.func_77969_a(itemstack)) {
|
||||
return false;
|
||||
|
@ -56,7 +64,7 @@
|
|||
}
|
||||
}
|
||||
} else {
|
||||
@@ -285,7 +287,7 @@
|
||||
@@ -285,7 +288,7 @@
|
||||
if (itemstack2.func_190926_b()) {
|
||||
this.field_214012_a.set(2, itemstack1.func_77946_l());
|
||||
} else if (itemstack2.func_77973_b() == itemstack1.func_77973_b()) {
|
||||
|
@ -65,27 +73,25 @@
|
|||
}
|
||||
|
||||
if (!this.field_145850_b.field_72995_K) {
|
||||
@@ -305,7 +307,8 @@
|
||||
@@ -305,7 +308,7 @@
|
||||
return 0;
|
||||
} else {
|
||||
Item item = p_213997_1_.func_77973_b();
|
||||
- return func_214001_f().getOrDefault(item, 0);
|
||||
+ int ret = p_213997_1_.getBurnTime();
|
||||
+ return net.minecraftforge.event.ForgeEventFactory.getItemBurnTime(p_213997_1_, ret == -1 ? func_214001_f().getOrDefault(item, 0) : ret);
|
||||
+ return net.minecraftforge.common.ForgeHooks.getBurnTime(p_213997_1_);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -314,7 +317,8 @@
|
||||
@@ -314,7 +317,7 @@
|
||||
}
|
||||
|
||||
public static boolean func_213991_b(ItemStack p_213991_0_) {
|
||||
- return func_214001_f().containsKey(p_213991_0_.func_77973_b());
|
||||
+ int ret = p_213991_0_.getBurnTime();
|
||||
+ return net.minecraftforge.event.ForgeEventFactory.getItemBurnTime(p_213991_0_, ret == -1 ? func_214001_f().getOrDefault(p_213991_0_.func_77973_b(), 0) : ret) > 0;
|
||||
+ return net.minecraftforge.common.ForgeHooks.getBurnTime(p_213991_0_) > 0;
|
||||
}
|
||||
|
||||
public int[] func_180463_a(Direction p_180463_1_) {
|
||||
@@ -462,4 +466,27 @@
|
||||
@@ -462,4 +465,27 @@
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -64,6 +64,7 @@ import net.minecraft.entity.player.PlayerEntity;
|
|||
import net.minecraft.fluid.IFluidState;
|
||||
import net.minecraft.inventory.EquipmentSlotType;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.RecipeManager;
|
||||
import net.minecraft.util.BlockRenderLayer;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Hand;
|
||||
|
@ -997,9 +998,9 @@ public class ForgeHooksClient
|
|||
return MinecraftForge.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onRecipesUpdated()
|
||||
public static void onRecipesUpdated(RecipeManager mgr)
|
||||
{
|
||||
Event event = new RecipesUpdatedEvent();
|
||||
Event event = new RecipesUpdatedEvent(mgr);
|
||||
MinecraftForge.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,19 @@ import net.minecraftforge.eventbus.api.Event;
|
|||
*/
|
||||
public class RecipesUpdatedEvent extends Event
|
||||
{
|
||||
public RecipesUpdatedEvent()
|
||||
|
||||
private final RecipeManager mgr;
|
||||
|
||||
public RecipesUpdatedEvent(RecipeManager mgr)
|
||||
{
|
||||
this.mgr = mgr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The newly-updated recipe manager that now contains all the recipes that were just received.
|
||||
*/
|
||||
public RecipeManager getRecipeManager()
|
||||
{
|
||||
return mgr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ import java.net.URISyntaxException;
|
|||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Deque;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -85,6 +86,7 @@ import net.minecraft.potion.PotionUtils;
|
|||
import net.minecraft.stats.Stats;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.world.spawner.AbstractSpawner;
|
||||
import net.minecraft.tileentity.FurnaceTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
|
@ -145,6 +147,8 @@ import net.minecraftforge.registries.DataSerializerEntry;
|
|||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.ForgeRegistry;
|
||||
import net.minecraftforge.registries.GameData;
|
||||
import net.minecraftforge.registries.IRegistryDelegate;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.Marker;
|
||||
|
@ -1178,4 +1182,30 @@ public class ForgeHooks
|
|||
BlockState state = world.getBlockState(pos);
|
||||
return ForgeEventFactory.getMobGriefingEvent(world, entity) && state.canEntityDestroy(world, pos, entity) && ForgeEventFactory.onEntityDestroyBlock(entity, pos, state);
|
||||
}
|
||||
|
||||
private static final Map<IRegistryDelegate<Item>, Integer> VANILLA_BURNS = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Gets the burn time of this itemstack.
|
||||
*/
|
||||
public static int getBurnTime(ItemStack stack)
|
||||
{
|
||||
if (stack.isEmpty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Item item = stack.getItem();
|
||||
int ret = stack.getBurnTime();
|
||||
return ForgeEventFactory.getItemBurnTime(stack, ret == -1 ? VANILLA_BURNS.getOrDefault(item.delegate, 0) : ret);
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void updateBurns()
|
||||
{
|
||||
VANILLA_BURNS.clear();
|
||||
FurnaceTileEntity.getBurnTimes().entrySet().forEach(e -> VANILLA_BURNS.put(e.getKey().delegate, e.getValue()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ import net.minecraftforge.event.world.ChunkEvent;
|
|||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import net.minecraftforge.eventbus.api.EventPriority;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.event.TagsUpdatedEvent;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.event.TickEvent.ClientTickEvent;
|
||||
import net.minecraftforge.event.TickEvent.Phase;
|
||||
|
@ -101,5 +102,11 @@ public class ForgeInternalHandler
|
|||
{
|
||||
UsernameCache.setUsername(event.getPlayer().getUniqueID(), event.getPlayer().getGameProfile().getName());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void tagsUpdated(TagsUpdatedEvent event)
|
||||
{
|
||||
ForgeHooks.updateBurns();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
46
src/main/java/net/minecraftforge/event/TagsUpdatedEvent.java
Normal file
46
src/main/java/net/minecraftforge/event/TagsUpdatedEvent.java
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Minecraft Forge
|
||||
* Copyright (c) 2016-2019.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation version 2.1
|
||||
* of the License.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
package net.minecraftforge.event;
|
||||
|
||||
import net.minecraft.tags.NetworkTagManager;
|
||||
import net.minecraftforge.eventbus.api.Event;
|
||||
|
||||
/**
|
||||
* Fired on the client when {@link NetworkTagManager} has all of its tags synced from the server to the client (just after a client has connected).
|
||||
* Fired on the server when {@link NetworkTagManager} has read all tags from disk (during a data reload).
|
||||
*/
|
||||
public class TagsUpdatedEvent extends Event
|
||||
{
|
||||
|
||||
private final NetworkTagManager manager;
|
||||
|
||||
public TagsUpdatedEvent(NetworkTagManager manager)
|
||||
{
|
||||
this.manager = manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The network tag manager that has been updated with newly received tags.
|
||||
*/
|
||||
public NetworkTagManager getTagManager()
|
||||
{
|
||||
return manager;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue