Skip to content

Commit

Permalink
Refactored waila integration and added machine specific info
Browse files Browse the repository at this point in the history
  • Loading branch information
fuj1n committed Jun 4, 2018
1 parent c3fba4e commit 9e1b0a8
Show file tree
Hide file tree
Showing 12 changed files with 197 additions and 94 deletions.
20 changes: 16 additions & 4 deletions resources/assets/tmechworks/lang/en_us.lang
Expand Up @@ -22,11 +22,23 @@ item.tmechworks.nuggets.copper.name=Copper Nugget
# Creative Tabs
itemGroup.TabMechworks=Tinkers' Mechworks

# Integration
option.tmechworks.commons=Common Integration

# Inventory
## Drawbridge
tmechworks.inventory.drawbridge.normal=Drawbridge
tmechworks.inventory.drawbridge.advanced=Advanced Drawbridge
tmechworks.inventory.drawbridge.extended=Extended Drawbridge
tmechworks.inventory.drawbridge.extended=Extended Drawbridge

# Redstone Machine
tmechworks.machine.stats=§l§nStats:
## Drawbridge
tmechworks.drawbridge.stats.length=Max length: %d
tmechworks.drawbridge.stats.delay=Extend Delay: %f

# Waila Integration
tmechworks.hud.behaviour=Behaviour
tmechworks.hud.behaviour.firestarter.extinguish=§9Extinguish
tmechworks.hud.behaviour.firestarter.keep=§6Keep lit
tmechworks.hud.state.drawbridge.extending=Extending
tmechworks.hud.state.drawbridge.extended=Extended
tmechworks.hud.state.drawbridge.retracted=Retracted
tmechworks.hud.state.drawbridge.length=(Length: %d blocks)
27 changes: 18 additions & 9 deletions src/main/java/slimeknights/tmechworks/TMechworks.java
@@ -1,13 +1,19 @@
package slimeknights.tmechworks;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.*;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import slimeknights.mantle.common.GuiHandler;
import slimeknights.mantle.network.NetworkWrapper;
import slimeknights.tmechworks.common.*;
import slimeknights.tmechworks.integration.WailaIntegration;
import slimeknights.mantle.pulsar.config.ForgeCFG;
import slimeknights.mantle.pulsar.control.PulseManager;
import slimeknights.tmechworks.common.CommonProxy;
import slimeknights.tmechworks.common.Config;
import slimeknights.tmechworks.common.MechworksContent;
import slimeknights.tmechworks.integration.waila.Waila;
import slimeknights.tmechworks.networking.PacketUpdatePlaceDirection;

@Mod(modid = TMechworks.modID, name = TMechworks.modName, version = TMechworks.modVersion, dependencies = "required-after:forge@[14.23.4.2705,); required-after:mantle@[1.12-1.3.2,); after:jei@[4.9,); after:waila@[1.8,)", acceptedMinecraftVersions = "[1.12.2, 1.13)")
Expand All @@ -17,6 +23,8 @@ public class TMechworks
public static final String modVersion = "${version}";
public static final String modName = "Tinkers' Mechworks";

public static PulseManager pulseManager = new PulseManager(Config.pulseConfig);

public static MechworksContent content;

public static NetworkWrapper packetPipeline;
Expand All @@ -25,14 +33,15 @@ public class TMechworks

@SidedProxy(modId = modID, clientSide = "slimeknights.tmechworks.client.ClientProxy", serverSide = "slimeknights.tmechworks.common.CommonProxy") public static CommonProxy proxy;

static {
pulseManager.registerPulse(new Waila());
}

@Mod.EventHandler public void preInit (FMLPreInitializationEvent event)
{
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());
Config.load(event);

if (Loader.isModLoaded("Waila"))
{
new WailaIntegration();
}
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());

content = new MechworksContent();
MinecraftForge.EVENT_BUS.register(content);
Expand Down
Expand Up @@ -152,7 +152,7 @@ public void setPlaceDirectionRelativeToBlock(EnumFacing direction) {
}

@Override
public void setPlaceDirectioni(int direction) {
public void setPlaceDirection(int direction) {
if (direction < EnumFacing.values().length)
setPlaceDirectionRelativeToBlock(EnumFacing.values()[direction]);
else if (direction - EnumFacing.values().length < Angle.values().length)
Expand Down Expand Up @@ -364,7 +364,7 @@ public String getName() {

public abstract String getVariantName();

final class DrawbridgeStats {
public static final class DrawbridgeStats {

public int extendLength = 16;
public float extendDelay = 0.5F;
Expand Down
Expand Up @@ -41,7 +41,8 @@ public void setFire ()
world.playSound(null, loc.getX() + 0.5D, loc.getY() + 0.5D, loc.getZ() + 0.5D, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 1.0F, Util.rand.nextFloat() * 0.4F + 0.8F);
world.setBlockState(position, Blocks.FIRE.getDefaultState(), 11);
}
} else if (shouldExtinguish && state.getBlock() == Blocks.FIRE)
//TODO registry for extinguishable blocks instead of hardcoded
} else if (shouldExtinguish && (state.getBlock() == Blocks.FIRE || state.getBlock() == Blocks.PORTAL))
{
world.playSound(null, loc.getX() + 0.5D, loc.getY() + 0.5D, loc.getZ() + 0.5D, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 1.0F, Util.rand.nextFloat() * 0.4F + 0.8F);
world.setBlockToAir(position);
Expand Down
@@ -1,5 +1,5 @@
package slimeknights.tmechworks.blocks.logic;

public interface IPlaceDirection {
void setPlaceDirectioni(int direction);
void setPlaceDirection(int direction);
}
Expand Up @@ -70,7 +70,7 @@ protected void actionPerformed(GuiButton button) {
GuiArrowSelection selBtn = (GuiArrowSelection) button;

TMechworks.packetPipeline.network.sendToServer(new PacketUpdatePlaceDirection(container.getTile().getPos(), selBtn.getHoveredArrow().ordinal()));
container.getTile().setPlaceDirectioni(selBtn.getHoveredArrow().ordinal());
container.getTile().setPlaceDirection(selBtn.getHoveredArrow().ordinal());
updateSelection(selBtn);
}
}
Expand Down
40 changes: 40 additions & 0 deletions src/main/java/slimeknights/tmechworks/common/Config.java
@@ -0,0 +1,40 @@
package slimeknights.tmechworks.common;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import slimeknights.mantle.pulsar.config.ForgeCFG;
import slimeknights.tmechworks.TMechworks;

public final class Config {
public static ForgeCFG pulseConfig = new ForgeCFG("tmechworksModules", "Modules");
public static Config instance = new Config();

private Config(){}

private static Configuration configFile;

public static void load(FMLPreInitializationEvent event){
configFile = new Configuration(event.getSuggestedConfigurationFile(), "2.0", false);
MinecraftForge.EVENT_BUS.register(instance);
updateConfig();
}

@SubscribeEvent
public void update(ConfigChangedEvent.OnConfigChangedEvent event){
if(event.getModID().equals(TMechworks.modID)) {
updateConfig();
}
}

public static void updateConfig(){
if(configFile.hasChanged()) {
configFile.save();
}
if(pulseConfig.getConfig().hasChanged()) {
pulseConfig.flush();
}
}
}

This file was deleted.

@@ -0,0 +1,66 @@
package slimeknights.tmechworks.integration.waila;

import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.IWailaDataProvider;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import slimeknights.tmechworks.blocks.logic.DrawbridgeLogic;
import slimeknights.tmechworks.blocks.logic.DrawbridgeLogicBase;
import slimeknights.tmechworks.blocks.logic.FirestarterLogic;
import slimeknights.tmechworks.blocks.logic.RedstoneMachineLogicBase;

import java.util.List;

public class RedstoneMachineDataProvider implements IWailaDataProvider
{
@Override public ItemStack getWailaStack (IWailaDataAccessor accessor, IWailaConfigHandler config)
{
return null;
}

@Override public List<String> getWailaHead (ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config)
{
return currenttip;
}

@Override public List<String> getWailaBody (ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config)
{
if (config.getConfig(WailaRegistrar.CONFIG_REDSTONE_MACHINE) && accessor.getTileEntity() instanceof RedstoneMachineLogicBase)
{
RedstoneMachineLogicBase logicBase = (RedstoneMachineLogicBase) accessor.getTileEntity();

currenttip.add(I18n.format("hud.msg.power") + ": " + logicBase.getRedstoneState());

if(logicBase instanceof DrawbridgeLogicBase){
DrawbridgeLogicBase logic = (DrawbridgeLogicBase) logicBase;
DrawbridgeLogicBase.DrawbridgeStats stats = logic.getStats();

currenttip.add(I18n.format("hud.msg.state") + ": " + I18n.format("tmechworks.hud.state.drawbridge." + (logic.getExtending() ? "extending" : logic.getExtended() ? "extended" : "retracted")) + " " + I18n.format("tmechworks.hud.state.drawbridge.length", logic.getExtendState()));
currenttip.add(I18n.format("tmechworks.machine.stats"));
currenttip.add(I18n.format("tmechworks.drawbridge.stats.length", stats.extendLength));
currenttip.add(I18n.format("tmechworks.drawbridge.stats.delay", stats.extendDelay));
} else if(logicBase instanceof FirestarterLogic){
FirestarterLogic logic = (FirestarterLogic) logicBase;
currenttip.add(I18n.format("tmechworks.hud.behaviour") + ": " + I18n.format("tmechworks.hud.behaviour.firestarter." + (logic.getShouldExtinguish() ? "extinguish" : "keep")));
}
}

return currenttip;
}

@Override public List<String> getWailaTail (ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config)
{
return currenttip;
}

@Override public NBTTagCompound getNBTData (EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos)
{
return tag;
}
}
34 changes: 34 additions & 0 deletions src/main/java/slimeknights/tmechworks/integration/waila/Waila.java
@@ -0,0 +1,34 @@
package slimeknights.tmechworks.integration.waila;

import com.google.common.eventbus.Subscribe;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.IWailaDataProvider;
import mcp.mobius.waila.api.IWailaRegistrar;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.event.FMLInterModComms;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import slimeknights.mantle.pulsar.pulse.Pulse;
import slimeknights.tmechworks.TMechworks;
import slimeknights.tmechworks.blocks.logic.DrawbridgeLogicBase;
import slimeknights.tmechworks.blocks.logic.RedstoneMachineLogicBase;
import slimeknights.tmechworks.library.Util;

import java.util.List;

@Pulse(id = "wailaIntegration", modsRequired = Waila.modid, defaultEnable = true)
public class Waila
{
public static final String modid = "waila";

@Subscribe
public void preInit(FMLPreInitializationEvent event) {
FMLInterModComms.sendMessage("waila", "register", "slimeknights.tmechworks.integration.waila.WailaRegistrar.wailaCallback");
}
}
@@ -0,0 +1,16 @@
package slimeknights.tmechworks.integration.waila;

import mcp.mobius.waila.api.IWailaRegistrar;
import slimeknights.tmechworks.TMechworks;
import slimeknights.tmechworks.blocks.logic.RedstoneMachineLogicBase;
import slimeknights.tmechworks.library.Util;

public class WailaRegistrar {
static final String CONFIG_REDSTONE_MACHINE = Util.prefix("redstoneMachine");

public static void wailaCallback(IWailaRegistrar registrar){
registrar.addConfig(TMechworks.modName, CONFIG_REDSTONE_MACHINE, true);

registrar.registerBodyProvider(new RedstoneMachineDataProvider(), RedstoneMachineLogicBase.class);
}
}
Expand Up @@ -39,7 +39,7 @@ public void handlePacket(EntityPlayer player) {
TileEntity te = player.getEntityWorld().getTileEntity(pos);

if (te instanceof IPlaceDirection) {
((IPlaceDirection) te).setPlaceDirectioni(direction);
((IPlaceDirection) te).setPlaceDirection(direction);
}
}

Expand Down

0 comments on commit 9e1b0a8

Please sign in to comment.