From 74e3baa05c7e1d003b0e37f6aace2536a0aace46 Mon Sep 17 00:00:00 2001 From: Giovanni Harting <539@idlegandalf.com> Date: Tue, 19 Jul 2016 13:18:41 +0200 Subject: [PATCH] first implementaion of a custom TickHandler --- src/main/java/com/sosnitzka/taiga/Blocks.java | 5 +-- src/main/java/com/sosnitzka/taiga/Items.java | 2 +- .../sosnitzka/taiga/traits/TraitCascade.java | 5 +-- .../com/sosnitzka/taiga/util/TickTask.java | 28 +++++++++++++ .../sosnitzka/taiga/util/TickTaskHandler.java | 39 +++++++++++++++++++ 5 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/sosnitzka/taiga/util/TickTask.java create mode 100644 src/main/java/com/sosnitzka/taiga/util/TickTaskHandler.java diff --git a/src/main/java/com/sosnitzka/taiga/Blocks.java b/src/main/java/com/sosnitzka/taiga/Blocks.java index 9773e4b..37dbd49 100644 --- a/src/main/java/com/sosnitzka/taiga/Blocks.java +++ b/src/main/java/com/sosnitzka/taiga/Blocks.java @@ -15,7 +15,8 @@ import java.lang.reflect.Field; import java.util.Arrays; import static com.sosnitzka.taiga.MaterialTraits.*; -import static com.sosnitzka.taiga.util.Utils.*; +import static com.sosnitzka.taiga.util.Utils.PREFIX_BLOCK; +import static com.sosnitzka.taiga.util.Utils.PREFIX_ORE; import static slimeknights.tconstruct.library.utils.HarvestLevels.*; public class Blocks { @@ -90,8 +91,6 @@ public class Blocks { public static Block proxideumBlock = new BasicBlock("proxideum_block", Material.ROCK, 25.0f, 25.0f, 4, PREFIX_BLOCK); public static Block astriumBlock = new BasicBlock("astrium_block", Material.ROCK, 55.0f, 400.0f, 7, PREFIX_BLOCK); - //public static Block fluidBlock = new BlockMolten(Fluids.astriumFluid); - public static void register() { Field[] declaredFields = Blocks.class.getDeclaredFields(); diff --git a/src/main/java/com/sosnitzka/taiga/Items.java b/src/main/java/com/sosnitzka/taiga/Items.java index 2f91b35..99e4e45 100644 --- a/src/main/java/com/sosnitzka/taiga/Items.java +++ b/src/main/java/com/sosnitzka/taiga/Items.java @@ -102,10 +102,10 @@ public class Items { } } } + OreDictionary.registerOre("nuggetIron", iron_nugget); OreDictionary.registerOre("ingotIron", slagironIngot); OreDictionary.registerOre("ingotGold", slaggoldIngot); - } } diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitCascade.java b/src/main/java/com/sosnitzka/taiga/traits/TraitCascade.java index c49de62..618d249 100644 --- a/src/main/java/com/sosnitzka/taiga/traits/TraitCascade.java +++ b/src/main/java/com/sosnitzka/taiga/traits/TraitCascade.java @@ -19,11 +19,13 @@ public class TraitCascade extends AbstractTrait { public void afterBlockBreak(ItemStack tool, World world, IBlockState state, BlockPos pos, EntityLivingBase player, boolean wasEffective) { float f = random.nextFloat(); float b = 0.99F * calcBonus(tool); + if (!world.isRemote && tool.canHarvestBlock(state) && f <= b) { double x, y, z, sx, sy, sz; sx = x = pos.getX(); sy = y = pos.getY(); sz = z = pos.getZ(); + for (int i = random.nextInt(ToolHelper.getCurrentDurability(tool)); i > 0; i--) { int r = random.nextInt(3); int d = random.nextBoolean() ? 1 : -1; @@ -42,11 +44,8 @@ public class TraitCascade extends AbstractTrait { y = sy; z = sz; } - } - } - } private float calcBonus(ItemStack tool) { diff --git a/src/main/java/com/sosnitzka/taiga/util/TickTask.java b/src/main/java/com/sosnitzka/taiga/util/TickTask.java new file mode 100644 index 0000000..a928c68 --- /dev/null +++ b/src/main/java/com/sosnitzka/taiga/util/TickTask.java @@ -0,0 +1,28 @@ +package com.sosnitzka.taiga.util; + + +public class TickTask { + private Runnable task; + private int targetTicks = 0; + private int ticks; + + public TickTask(int targetTicks, Runnable runnable) { + this.task = runnable; + this.targetTicks = targetTicks; + } + + public TickTask(Runnable runnable) { + this.task = runnable; + this.targetTicks = 1; + } + + public boolean tickRun() { + ticks++; + + if (ticks >= targetTicks) { + this.task.run(); + return true; + } + return false; + } +} diff --git a/src/main/java/com/sosnitzka/taiga/util/TickTaskHandler.java b/src/main/java/com/sosnitzka/taiga/util/TickTaskHandler.java new file mode 100644 index 0000000..c11921e --- /dev/null +++ b/src/main/java/com/sosnitzka/taiga/util/TickTaskHandler.java @@ -0,0 +1,39 @@ +package com.sosnitzka.taiga.util; + + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class TickTaskHandler { + private List tickTasks = new ArrayList(); + + + private TickTaskHandler() { + } + + public static TickTaskHandler getInstance() { + return InstanceHolder.INSTANCE; + } + + @SubscribeEvent + public void onTick(TickEvent.ServerTickEvent e) { + for (Iterator iterator = tickTasks.iterator(); iterator.hasNext(); ) { + TickTask task = iterator.next(); + if (task.tickRun()) { + iterator.remove(); + } + } + } + + public void addTask(TickTask tickTask) { + tickTasks.add(tickTask); + } + + private static final class InstanceHolder { + static final TickTaskHandler INSTANCE = new TickTaskHandler(); + } +}