Skip to content

Commit cdbc8aa

Browse files
committed
Added tooltip and use message to Orthodimensional Hyperfurnace, added advancements, increased mimimum valid forge version to 34.1.11
1 parent e4d8c99 commit cdbc8aa

File tree

12 files changed

+344
-16
lines changed

12 files changed

+344
-16
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
modid = jumbofurnace
3-
mod_version = 2.1.0.0
3+
mod_version = 2.1.1.0
44
mc_version = 1.16.3
5-
forge_version = 34.1.0
5+
forge_version = 34.1.11
66
mappings_version = 20200916-1.16.2
77
jei_version = 7.3.2.36

src/main/java/commoble/jumbofurnace/JumboFurnace.java

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import com.mojang.datafixers.util.Pair;
99

10+
import commoble.jumbofurnace.advancements.AssembleJumboFurnaceTrigger;
11+
import commoble.jumbofurnace.advancements.UpgradeJumboFurnaceTrigger;
1012
import commoble.jumbofurnace.client.ClientEvents;
1113
import commoble.jumbofurnace.client.OrthodimensionalHyperfurnaceRenderer;
1214
import commoble.jumbofurnace.config.ConfigHelper;
@@ -21,12 +23,14 @@
2123
import commoble.jumbofurnace.recipes.JumboFurnaceRecipeSerializer;
2224
import commoble.jumbofurnace.recipes.RecipeSorter;
2325
import commoble.jumbofurnace.recipes.TagStackIngredient;
26+
import net.minecraft.advancements.CriteriaTriggers;
2427
import net.minecraft.block.Block;
2528
import net.minecraft.block.BlockState;
2629
import net.minecraft.block.Blocks;
2730
import net.minecraft.client.util.ITooltipFlag;
2831
import net.minecraft.entity.Entity;
2932
import net.minecraft.entity.player.PlayerEntity;
33+
import net.minecraft.entity.player.ServerPlayerEntity;
3034
import net.minecraft.inventory.container.ContainerType;
3135
import net.minecraft.item.Item;
3236
import net.minecraft.item.ItemGroup;
@@ -64,6 +68,7 @@
6468
import net.minecraftforge.eventbus.api.IEventBus;
6569
import net.minecraftforge.fml.common.Mod;
6670
import net.minecraftforge.fml.config.ModConfig;
71+
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
6772
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
6873
import net.minecraftforge.fml.loading.FMLEnvironment;
6974
import net.minecraftforge.items.CapabilityItemHandler;
@@ -111,7 +116,7 @@ private void addModListeners(IEventBus modBus)
111116
blocks.register(Names.JUMBO_FURNACE, () -> new JumboFurnaceBlock(Block.Properties.from(Blocks.FURNACE)));
112117

113118
items.register(Names.JUMBO_FURNACE, () -> new JumboFurnaceItem(new Item.Properties().group(ItemGroup.BUILDING_BLOCKS)));
114-
items.register(Names.ORTHODIMENSIONAL_HYPERFURNACE, () -> new Item(new Item.Properties().group(ItemGroup.MISC).setISTER(() -> OrthodimensionalHyperfurnaceRenderer::new)));
119+
items.register(Names.ORTHODIMENSIONAL_HYPERFURNACE, () -> new OrthodimensionalHyperfurnaceItem(new Item.Properties().group(ItemGroup.MISC).setISTER(() -> OrthodimensionalHyperfurnaceRenderer::new)));
115120

116121
items.register(Names.JUMBO_FURNACE_JEI, () -> new Item(new Item.Properties())
117122
{
@@ -136,6 +141,7 @@ public void addInformation(ItemStack stack, @Nullable World worldIn, List<ITextC
136141
recipeSerializers.register(Names.JUMBO_SMELTING, () -> new JumboFurnaceRecipeSerializer(JUMBO_SMELTING_RECIPE_TYPE));
137142

138143
modBus.addGenericListener(IRecipeSerializer.class, this::onRegisterRecipeStuff);
144+
modBus.addListener(this::onCommonSetup);
139145
}
140146

141147
private <T extends IForgeRegistryEntry<T>> DeferredRegister<T> makeDeferredRegister(IEventBus modBus, IForgeRegistry<T> registry)
@@ -170,21 +176,28 @@ private void onEntityPlaceBlock(EntityPlaceEvent event)
170176

171177
// returns a non-empty list if we can make furnace
172178
List<Pair<BlockPos, BlockState>> pairs = MultiBlockHelper.getJumboFurnaceStates(((World)world).getDimensionKey(), world, pos, againstState, entity);
173-
for (Pair<BlockPos, BlockState> pair : pairs)
179+
if (pairs.size() > 0)
174180
{
175-
BlockPos newPos = pair.getFirst();
176-
BlockState newState = pair.getSecond();
177-
TileEntity te = world.getTileEntity(newPos);
178-
// attempt to remove items from existing itemhandlers if possible
179-
if (te != null)
181+
for (Pair<BlockPos, BlockState> pair : pairs)
180182
{
181-
for (Direction dir : Direction.values())
183+
BlockPos newPos = pair.getFirst();
184+
BlockState newState = pair.getSecond();
185+
TileEntity te = world.getTileEntity(newPos);
186+
// attempt to remove items from existing itemhandlers if possible
187+
if (te != null)
182188
{
183-
te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir).ifPresent(handler -> addItemsToList(stacks, handler));
189+
for (Direction dir : Direction.values())
190+
{
191+
te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir).ifPresent(handler -> addItemsToList(stacks, handler));
192+
}
193+
te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).ifPresent(handler -> addItemsToList(stacks, handler));
184194
}
185-
te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).ifPresent(handler -> addItemsToList(stacks, handler));
195+
world.setBlockState(newPos, newState, 3);
196+
}
197+
if (entity instanceof ServerPlayerEntity)
198+
{
199+
AssembleJumboFurnaceTrigger.INSTANCE.trigger((ServerPlayerEntity)entity);
186200
}
187-
world.setBlockState(newPos, newState, 3);
188201
}
189202
if (!stacks.isEmpty())
190203
{
@@ -254,6 +267,19 @@ private void onRightClickBlockLow(RightClickBlock event)
254267
}
255268
}
256269

270+
private void onCommonSetup(FMLCommonSetupEvent event)
271+
{
272+
event.enqueueWork(this::afterCommonSetup);
273+
}
274+
275+
// runs on main thread after common setup event
276+
// adding things to unsynchronized registries (i.e. most vanilla registries) can be done here
277+
private void afterCommonSetup()
278+
{
279+
CriteriaTriggers.register(AssembleJumboFurnaceTrigger.INSTANCE);
280+
CriteriaTriggers.register(UpgradeJumboFurnaceTrigger.INSTANCE);
281+
}
282+
257283
private void onRegisterRecipeStuff(RegistryEvent.Register<IRecipeSerializer<?>> event)
258284
{
259285
// forge registers ingredient serializers here for some reason, might as well do it here too
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package commoble.jumbofurnace;
2+
3+
import java.util.List;
4+
5+
import net.minecraft.client.util.ITooltipFlag;
6+
import net.minecraft.entity.player.PlayerEntity;
7+
import net.minecraft.item.Item;
8+
import net.minecraft.item.ItemStack;
9+
import net.minecraft.item.ItemUseContext;
10+
import net.minecraft.util.ActionResultType;
11+
import net.minecraft.util.text.ITextComponent;
12+
import net.minecraft.util.text.TextFormatting;
13+
import net.minecraft.util.text.TranslationTextComponent;
14+
import net.minecraft.world.World;
15+
import net.minecraftforge.api.distmarker.Dist;
16+
import net.minecraftforge.api.distmarker.OnlyIn;
17+
18+
public class OrthodimensionalHyperfurnaceItem extends Item
19+
{
20+
public static final ITextComponent USE_MESSAGE = new TranslationTextComponent("item.jumbofurnace.orthodimensional_hyperfurnace.use_message");
21+
public static final ITextComponent TOOLTIP = new TranslationTextComponent("item.jumbofurnace.orthodimensional_hyperfurnace.tooltip").mergeStyle(TextFormatting.GRAY);
22+
23+
public OrthodimensionalHyperfurnaceItem(Properties properties)
24+
{
25+
super(properties);
26+
}
27+
28+
@Override
29+
public ActionResultType onItemUse(ItemUseContext context)
30+
{
31+
PlayerEntity player = context.getPlayer();
32+
if (player != null && player.world.isRemote)
33+
{
34+
player.sendStatusMessage(USE_MESSAGE, true);
35+
}
36+
return super.onItemUse(context);
37+
}
38+
39+
@Override
40+
@OnlyIn(Dist.CLIENT)
41+
public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn)
42+
{
43+
super.addInformation(stack, worldIn, tooltip, flagIn);
44+
tooltip.add(TOOLTIP);
45+
}
46+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package commoble.jumbofurnace.advancements;
2+
3+
import com.google.common.base.Predicates;
4+
import com.google.gson.JsonObject;
5+
6+
import commoble.jumbofurnace.JumboFurnace;
7+
import commoble.jumbofurnace.advancements.AssembleJumboFurnaceTrigger.AssembleJumboFurnaceCriterion;
8+
import net.minecraft.advancements.criterion.AbstractCriterionTrigger;
9+
import net.minecraft.advancements.criterion.CriterionInstance;
10+
import net.minecraft.advancements.criterion.EntityPredicate.AndPredicate;
11+
import net.minecraft.entity.player.ServerPlayerEntity;
12+
import net.minecraft.loot.ConditionArrayParser;
13+
import net.minecraft.util.ResourceLocation;
14+
15+
public class AssembleJumboFurnaceTrigger extends AbstractCriterionTrigger<AssembleJumboFurnaceCriterion>
16+
{
17+
public static final ResourceLocation ID = new ResourceLocation(JumboFurnace.MODID, "assemble_jumbo_furnace");
18+
public static final AssembleJumboFurnaceTrigger INSTANCE = new AssembleJumboFurnaceTrigger();
19+
20+
@Override
21+
public ResourceLocation getId()
22+
{
23+
return ID;
24+
}
25+
26+
@Override
27+
protected AssembleJumboFurnaceCriterion deserializeTrigger(JsonObject json, AndPredicate entityPredicate, ConditionArrayParser conditionsParser)
28+
{
29+
return new AssembleJumboFurnaceCriterion(entityPredicate);
30+
}
31+
32+
public void trigger(ServerPlayerEntity player)
33+
{
34+
this.triggerListeners(player, Predicates.alwaysTrue());
35+
}
36+
37+
public static class AssembleJumboFurnaceCriterion extends CriterionInstance
38+
{
39+
40+
public AssembleJumboFurnaceCriterion( AndPredicate playerCondition)
41+
{
42+
super(ID, playerCondition);
43+
}
44+
45+
}
46+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package commoble.jumbofurnace.advancements;
2+
3+
import com.google.gson.JsonObject;
4+
5+
import commoble.jumbofurnace.JumboFurnace;
6+
import commoble.jumbofurnace.advancements.UpgradeJumboFurnaceTrigger.UpgradeJumboFurnaceCriterion;
7+
import net.minecraft.advancements.criterion.AbstractCriterionTrigger;
8+
import net.minecraft.advancements.criterion.CriterionInstance;
9+
import net.minecraft.advancements.criterion.EntityPredicate.AndPredicate;
10+
import net.minecraft.advancements.criterion.ItemPredicate;
11+
import net.minecraft.entity.player.ServerPlayerEntity;
12+
import net.minecraft.item.ItemStack;
13+
import net.minecraft.loot.ConditionArrayParser;
14+
import net.minecraft.util.ResourceLocation;
15+
16+
public class UpgradeJumboFurnaceTrigger extends AbstractCriterionTrigger<UpgradeJumboFurnaceCriterion>
17+
{
18+
public static final ResourceLocation ID = new ResourceLocation(JumboFurnace.MODID, "upgrade_jumbo_furnace");
19+
public static final UpgradeJumboFurnaceTrigger INSTANCE = new UpgradeJumboFurnaceTrigger();
20+
21+
@Override
22+
public ResourceLocation getId()
23+
{
24+
return ID;
25+
}
26+
27+
@Override
28+
protected UpgradeJumboFurnaceCriterion deserializeTrigger(JsonObject json, AndPredicate entityPredicate, ConditionArrayParser conditionsParser)
29+
{
30+
ItemPredicate itemPredicate = ItemPredicate.deserialize(json.get("item"));
31+
return new UpgradeJumboFurnaceCriterion(entityPredicate, itemPredicate);
32+
}
33+
34+
public void test(ServerPlayerEntity player, ItemStack stack)
35+
{
36+
this.triggerListeners(player, criterion -> criterion.test(stack));
37+
}
38+
39+
public static class UpgradeJumboFurnaceCriterion extends CriterionInstance
40+
{
41+
private final ItemPredicate itemPredicate;
42+
43+
public UpgradeJumboFurnaceCriterion( AndPredicate playerCondition, ItemPredicate itemPredicate)
44+
{
45+
super(ID, playerCondition);
46+
this.itemPredicate = itemPredicate;
47+
}
48+
49+
public boolean test(ItemStack stack)
50+
{
51+
return this.itemPredicate.test(stack);
52+
}
53+
}
54+
}

src/main/java/commoble/jumbofurnace/jumbo_furnace/JumboFurnaceContainer.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import commoble.jumbofurnace.JumboFurnace;
44
import commoble.jumbofurnace.JumboFurnaceObjects;
5+
import commoble.jumbofurnace.advancements.UpgradeJumboFurnaceTrigger;
56
import net.minecraft.entity.player.PlayerEntity;
67
import net.minecraft.entity.player.PlayerInventory;
8+
import net.minecraft.entity.player.ServerPlayerEntity;
79
import net.minecraft.inventory.container.Container;
810
import net.minecraft.inventory.container.IContainerProvider;
911
import net.minecraft.inventory.container.Slot;
@@ -152,6 +154,19 @@ protected JumboFurnaceContainer(int id, PlayerInventory playerInventory, BlockPo
152154
this.trackIntArray(furnaceData);
153155
}
154156

157+
@Override
158+
public void onContainerClosed(PlayerEntity player)
159+
{
160+
if (player instanceof ServerPlayerEntity)
161+
{
162+
ItemStack finalUpgradeStack = this.getSlot(ORTHOFURNACE_SLOT).getStack();
163+
UpgradeJumboFurnaceTrigger.INSTANCE.test((ServerPlayerEntity)player, finalUpgradeStack);
164+
}
165+
166+
167+
super.onContainerClosed(player);
168+
}
169+
155170
@Override
156171
public boolean canInteractWith(PlayerEntity arg0)
157172
{
@@ -217,7 +232,7 @@ public ItemStack transferStackInSlot(PlayerEntity player, int index)
217232

218233
return slotStackCopy;
219234
}
220-
235+
221236
public int getBurnTimeRemaining()
222237
{
223238
return this.furnaceData.get(0);

src/main/resources/META-INF/mods.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Jumbo Furnaces are created when a player places 27 standard furnaces in a 3x3x3
3939
# Does this dependency have to exist - if not, ordering below must be specified
4040
mandatory=true #mandatory
4141
# The version range of the dependency
42-
versionRange="[34,)" #mandatory
42+
versionRange="[34.1.11,)" #mandatory
4343
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
4444
ordering="NONE"
4545
# Side this dependency is applied on - BOTH, CLIENT or SERVER

src/main/resources/assets/jumbofurnace/lang/en_us.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,18 @@
33
"item.jumbofurnace.jumbo_furnace": "Jumbo Furnace",
44
"item.jumbofurnace.jumbo_furnace_jei": "Jumbo Furnace",
55
"item.jumbofurnace.orthodimensional_hyperfurnace": "Orthodimensional Hyperfurnace",
6+
"item.jumbofurnace.orthodimensional_hyperfurnace.use_message": "This construct can't exist in your puny three-dimensional universe!",
7+
"item.jumbofurnace.orthodimensional_hyperfurnace.tooltip": "Put this in a Jumbo Furnace's upgrade slot to smelt more things simultaneously",
68
"container.jumbofurnace.jumbo_furnace": "Jumbo Furnace",
79
"gui.jumbofurnace.category.jumbo_smelting": "Jumbo Smelting",
810
"gui.jumbofurnace.category.multiblock_building": "Multiblock Building",
9-
"jumbofurnace.jumbo_furnace_info_tooltip": "Place 27 furnaces in a 3x3x3 cube to create the Jumbo Furnace"
11+
"jumbofurnace.jumbo_furnace_info_tooltip": "Place 27 furnaces in a 3x3x3 cube to create the Jumbo Furnace",
12+
"jumbofurnace.advancements.story.assemble_jumbo_furnace.title": "Jumbo Furnace",
13+
"jumbofurnace.advancements.story.assemble_jumbo_furnace.description": "Place 27 furnaces in a 3x3x3 cube to create the Jumbo Furnace",
14+
"jumbofurnace.advancements.story.obtain_jumbo_furnace.title": "Smaller on the Outside",
15+
"jumbofurnace.advancements.story.obtain_jumbo_furnace.description": "Create a Jumbo Furnace item (possibly by smelting 27 furnaces in a Jumbo Furnace)",
16+
"jumbofurnace.advancements.story.obtain_orthodimensional_hyperfurnace.title": "Bigger on the Inside",
17+
"jumbofurnace.advancements.story.obtain_orthodimensional_hyperfurnace.description": "Create an Orthodimensional Hyperfurnace (possibly by smelting eight Jumbo Furnaces with an ender pearl)",
18+
"jumbofurnace.advancements.story.fully_upgrade_jumbo_furnace_with_hyperfurnaces.title": "Furnaces All the Way Down",
19+
"jumbofurnace.advancements.story.fully_upgrade_jumbo_furnace_with_hyperfurnaces.description": "Upgrade a Jumbo Furnace with a full stack of 64 Orthodimensional Hyperfurnaces"
1020
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"parent": "minecraft:story/upgrade_tools",
3+
"display":
4+
{
5+
"frame": "goal",
6+
"icon":
7+
{
8+
"item": "jumbofurnace:jumbo_furnace"
9+
},
10+
"title":
11+
{
12+
"translate": "jumbofurnace.advancements.story.assemble_jumbo_furnace.title"
13+
},
14+
"description":
15+
{
16+
"translate": "jumbofurnace.advancements.story.assemble_jumbo_furnace.description"
17+
}
18+
},
19+
"criteria":
20+
{
21+
"assemble_jumbo_furnace":
22+
{
23+
"trigger": "jumbofurnace:assemble_jumbo_furnace"
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)