From 19810884447de7c2fd92ec6f0d536d7858b19164 Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Sat, 25 Jul 2020 20:09:03 -0400 Subject: [PATCH] Add Creative Energy Source --- .../energonrelics/EnergonRelics.java | 7 +++- .../block/CreativeEnergySourceBlock.java | 21 ++++++++++ .../CreativeEnergySourceBlockEntity.java | 28 +++++++++++++ .../structure/StructureGeneratorBlock.java | 2 +- .../energy/core/util/EnergyTicker.java | 38 ++++++++++-------- .../energonrelics/mixin/MixinWorld.java | 2 +- .../blockstates/creative_energy_source.json | 7 ++++ .../assets/energonrelics/lang/en_us.json | 3 +- .../models/block/creative_energy_source.json | 6 +++ .../models/item/creative_energy_source.json | 3 ++ .../textures/block/creative_energy_source.png | Bin 0 -> 713 bytes 11 files changed, 97 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/CreativeEnergySourceBlock.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/entity/CreativeEnergySourceBlockEntity.java create mode 100644 src/main/resources/assets/energonrelics/blockstates/creative_energy_source.json create mode 100644 src/main/resources/assets/energonrelics/models/block/creative_energy_source.json create mode 100644 src/main/resources/assets/energonrelics/models/item/creative_energy_source.json create mode 100644 src/main/resources/assets/energonrelics/textures/block/creative_energy_source.png diff --git a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java index 3734454..6a18660 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java +++ b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java @@ -1,6 +1,7 @@ package com.thebrokenrail.energonrelics; import com.thebrokenrail.energonrelics.block.BlockBreakerBlock; +import com.thebrokenrail.energonrelics.block.CreativeEnergySourceBlock; import com.thebrokenrail.energonrelics.block.DefensiveLaserBlock; import com.thebrokenrail.energonrelics.block.LightningRodBlock; import com.thebrokenrail.energonrelics.block.VeridiumBlockBlock; @@ -89,6 +90,8 @@ public class EnergonRelics implements ModInitializer { private static final Identifier BEEP_SOUND_ID = new Identifier(NAMESPACE, "beep"); private static final SoundEvent BEEP_SOUND_EVENT = new SoundEvent(BEEP_SOUND_ID); + public static final CreativeEnergySourceBlock CREATIVE_ENERGY_SOURCE_BLOCK = new CreativeEnergySourceBlock(); + @Override public void onInitialize() { NETWORK_CHIP_ITEM = Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "network_chip"), new NetworkChipItem()); @@ -134,11 +137,13 @@ public class EnergonRelics implements ModInitializer { FORCEFIELD_PROJECTOR_BLOCK.register("forcefield_projector"); Registry.register(Registry.SOUND_EVENT, BEEP_SOUND_ID, BEEP_SOUND_EVENT); + + CREATIVE_ENERGY_SOURCE_BLOCK.register("creative_energy_source"); } public static void playBeep(World world, BlockPos pos) { if (!world.isClient()) { - world.playSound(null, pos, BEEP_SOUND_EVENT, SoundCategory.BLOCKS, 0.5f, 1f); + world.playSound(null, pos, BEEP_SOUND_EVENT, SoundCategory.BLOCKS, 0.3f, 1f); } } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/CreativeEnergySourceBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/CreativeEnergySourceBlock.java new file mode 100644 index 0000000..755a341 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/CreativeEnergySourceBlock.java @@ -0,0 +1,21 @@ +package com.thebrokenrail.energonrelics.block; + +import com.thebrokenrail.energonrelics.block.entity.CreativeEnergySourceBlockEntity; +import com.thebrokenrail.energonrelics.block.util.energy.EnergyProviderBlock; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Blocks; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; + +import java.util.function.Function; + +public class CreativeEnergySourceBlock extends EnergyProviderBlock { + public CreativeEnergySourceBlock() { + super(FabricBlockSettings.copy(Blocks.BEDROCK).dropsNothing()); + } + + @Override + protected Function, BlockEntity> getFactory() { + return CreativeEnergySourceBlockEntity::new; + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/CreativeEnergySourceBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/CreativeEnergySourceBlockEntity.java new file mode 100644 index 0000000..581cbc7 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/CreativeEnergySourceBlockEntity.java @@ -0,0 +1,28 @@ +package com.thebrokenrail.energonrelics.block.entity; + +import com.thebrokenrail.energonrelics.config.HardcodedConfig; +import com.thebrokenrail.energonrelics.energy.core.EnergyProviderBlockEntity; +import com.thebrokenrail.energonrelics.energy.helper.EnergyGeneratorBlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.Direction; +import net.minecraft.world.LightType; + +import java.util.List; +import java.util.Objects; + +public class CreativeEnergySourceBlockEntity extends EnergyGeneratorBlockEntity { + public CreativeEnergySourceBlockEntity(BlockEntityType type) { + super(type); + } + + @Override + public long getDisplayEnergy() { + return Long.MAX_VALUE; + } + + @Override + public List startTick() { + setEnergy(getDisplayEnergy()); + return super.startTick(); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/structure/StructureGeneratorBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/structure/StructureGeneratorBlock.java index 9441a48..162aa11 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/structure/StructureGeneratorBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/structure/StructureGeneratorBlock.java @@ -97,7 +97,7 @@ public class StructureGeneratorBlock extends SimpleBlockWithEntity { } public void schedule(World world, BlockPos pos) { - world.getBlockTickScheduler().schedule(pos, this, 4); + world.getBlockTickScheduler().schedule(pos, this, 0); } @Override diff --git a/src/main/java/com/thebrokenrail/energonrelics/energy/core/util/EnergyTicker.java b/src/main/java/com/thebrokenrail/energonrelics/energy/core/util/EnergyTicker.java index 0a63a42..6818a18 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/energy/core/util/EnergyTicker.java +++ b/src/main/java/com/thebrokenrail/energonrelics/energy/core/util/EnergyTicker.java @@ -1,10 +1,12 @@ package com.thebrokenrail.energonrelics.energy.core.util; import com.thebrokenrail.energonrelics.energy.core.EnergyProviderBlockEntity; +import net.minecraft.world.World; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; public class EnergyTicker { private static final List scheduled = new ArrayList<>(); @@ -13,26 +15,30 @@ public class EnergyTicker { scheduled.add(provider); } - public static void tick() { - List started = new ArrayList<>(); + public static void tick(World world) { + if (Objects.requireNonNull(world.getServer()).getThread() != Thread.currentThread()) { + scheduled.clear(); + } else { + List started = new ArrayList<>(); - List temp = new ArrayList<>(scheduled); - List temp2 = new ArrayList<>(); - while (!temp.isEmpty()) { - for (EnergyProviderBlockEntity provider : temp) { - if (!started.contains(provider)) { - temp2.addAll(provider.startTick()); - started.add(provider); + List temp = new ArrayList<>(scheduled); + List temp2 = new ArrayList<>(); + while (!temp.isEmpty()) { + for (EnergyProviderBlockEntity provider : temp) { + if (!started.contains(provider)) { + temp2.addAll(provider.startTick()); + started.add(provider); + } } + temp.clear(); + temp.addAll(temp2); + temp2.clear(); } - temp.clear(); - temp.addAll(temp2); - temp2.clear(); - } - Collections.shuffle(started); - for (EnergyProviderBlockEntity provider : started) { - provider.logicTick(); + Collections.shuffle(started); + for (EnergyProviderBlockEntity provider : started) { + provider.logicTick(); + } } } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinWorld.java b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinWorld.java index 24b3892..b365e39 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinWorld.java +++ b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinWorld.java @@ -16,7 +16,7 @@ public abstract class MixinWorld { @Inject(at = @At("TAIL"), method = "tickBlockEntities") public void tickBlockEntities(CallbackInfo info) { if (!isClient()) { - EnergyTicker.tick(); + EnergyTicker.tick((World) (Object) this); } } } diff --git a/src/main/resources/assets/energonrelics/blockstates/creative_energy_source.json b/src/main/resources/assets/energonrelics/blockstates/creative_energy_source.json new file mode 100644 index 0000000..d2f28d5 --- /dev/null +++ b/src/main/resources/assets/energonrelics/blockstates/creative_energy_source.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "energonrelics:block/creative_energy_source" + } + } +} diff --git a/src/main/resources/assets/energonrelics/lang/en_us.json b/src/main/resources/assets/energonrelics/lang/en_us.json index b7f4686..deb04dc 100644 --- a/src/main/resources/assets/energonrelics/lang/en_us.json +++ b/src/main/resources/assets/energonrelics/lang/en_us.json @@ -36,5 +36,6 @@ "item.minecraft.tipped_arrow.effect.energonrelics.veridium_poison": "Arrow of Degradation", "block.energonrelics.lightning_rod": "Lightning Rod", "block.energonrelics.forcefield": "Forcefield", - "block.energonrelics.forcefield_projector": "Forcefield Projector" + "block.energonrelics.forcefield_projector": "Forcefield Projector", + "block.energonrelics.creative_energy_source": "Creative Energy Source" } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/block/creative_energy_source.json b/src/main/resources/assets/energonrelics/models/block/creative_energy_source.json new file mode 100644 index 0000000..7124d3c --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/creative_energy_source.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "energonrelics:block/creative_energy_source" + } +} diff --git a/src/main/resources/assets/energonrelics/models/item/creative_energy_source.json b/src/main/resources/assets/energonrelics/models/item/creative_energy_source.json new file mode 100644 index 0000000..01abaa9 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/item/creative_energy_source.json @@ -0,0 +1,3 @@ +{ + "parent": "energonrelics:block/creative_energy_source" +} \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/textures/block/creative_energy_source.png b/src/main/resources/assets/energonrelics/textures/block/creative_energy_source.png new file mode 100644 index 0000000000000000000000000000000000000000..3f51b0203d072d42d01440c0d103805bcb545918 GIT binary patch literal 713 zcmV;)0yh1LP)ukT$KZa1i$cR+l$=5zqE{Q*@B#QX;q0=Z zC3oR`3kDuc&C+U;Tc#_WhSyW*NkHEXcvtFK{jPIz4+|UeMAxvl52Lc*xB3Ip3}^K; z^@ykd000SaNLh0L01sgR01sgSs6VG^00031Nklg^4Sd z9*g5}0Xe(~OW0`5e9NGc$wQ6No3sTz%W=bJyhim&>-3J^@F|(@w veNZcN7reOdaVhtPwep8cWCh