Browse Source

new barrier blocks, fixed client side exception

Kajetan Johannes Hammerle 3 years ago
parent
commit
242eaa6699

+ 55 - 12
src/main/java/me/km/Client.java

@@ -2,12 +2,8 @@ package me.km;
 
 import com.mojang.blaze3d.matrix.MatrixStack;
 import java.awt.Color;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
+import java.util.Random;
 import me.km.blocks.ModBlocks;
 import me.km.blocks.cookingpot.TileEntityCookingPot;
 import me.km.items.ItemColoredSoup;
@@ -39,19 +35,23 @@ import net.minecraft.client.renderer.color.IBlockColor;
 import net.minecraft.client.renderer.color.ItemColors;
 import net.minecraft.client.renderer.entity.EntityRenderer;
 import net.minecraft.client.renderer.entity.EntityRendererManager;
+import net.minecraft.client.world.ClientWorld;
 import net.minecraft.entity.Entity;
+import net.minecraft.fluid.IFluidState;
 import net.minecraft.item.Item;
 import net.minecraft.item.ArmorItem;
 import net.minecraft.item.BlockItem;
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.CompoundNBT;
+import net.minecraft.particles.ParticleTypes;
 import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.MathHelper;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.util.text.TextFormatting;
 import net.minecraft.util.text.LanguageMap;
+import net.minecraft.world.GameType;
 import net.minecraft.world.GrassColors;
-import net.minecraft.world.World;
 import net.minecraft.world.biome.BiomeColors;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
@@ -123,9 +123,54 @@ public class Client {
     }
 
     @SubscribeEvent
+    @SuppressWarnings("")
     public void onClientTick(TickEvent.ClientTickEvent e) {
-        if(e.phase == TickEvent.Phase.END) {
-            StatusDisplayGui.INSTANCE.tick();
+        if(e.phase != TickEvent.Phase.END) {
+            return;
+        }
+        StatusDisplayGui.INSTANCE.tick();
+        animateTick(ModBlocks.barrierLight);
+        animateTick(ModBlocks.barrierSolid);
+    }
+
+    @SuppressWarnings("")
+    private void animateTick(Block b) {
+        Minecraft mc = Minecraft.getInstance();
+        if(mc.isGamePaused() || mc.world == null) {
+            return;
+        }
+        int posX = MathHelper.floor(mc.player.getPosX());
+        int posY = MathHelper.floor(mc.player.getPosY());
+        int posZ = MathHelper.floor(mc.player.getPosZ());
+
+        boolean flag = false;
+        if(mc.playerController.getCurrentGameType() == GameType.CREATIVE) {
+            for(ItemStack itemstack : mc.player.getHeldEquipment()) {
+                if(itemstack.getItem() == b.asItem()) {
+                    flag = true;
+                    break;
+                }
+            }
+        }
+        if(!flag) {
+            return;
+        }
+
+        BlockPos.Mutable pos = new BlockPos.Mutable();
+        for(int j = 0; j < 667; ++j) {
+            animateTick(mc.world, b, posX, posY, posZ, 16, pos);
+            animateTick(mc.world, b, posX, posY, posZ, 32, pos);
+        }
+    }
+
+    private void animateTick(ClientWorld w, Block b, int x, int y, int z, int offset, BlockPos.Mutable pos) {
+        x += w.rand.nextInt(offset) - w.rand.nextInt(offset);
+        y += w.rand.nextInt(offset) - w.rand.nextInt(offset);
+        z += w.rand.nextInt(offset) - w.rand.nextInt(offset);
+        pos.setPos(x, y, z);
+        BlockState blockstate = w.getBlockState(pos);
+        if(blockstate.getBlock() == b) {
+            w.addParticle(ParticleTypes.BARRIER, x + 0.5, y + 0.5, z + 0.5, 0.0, 0.0, 0.0);
         }
     }
 
@@ -345,8 +390,7 @@ public class Client {
         logger.info(String.format("blocks: %d", blocks));
         logger.info(String.format("compression rate: %f",  (16 * 16 * 256 * 16) / (cluster * 64.0 + blocks * 24.0)));
     }*/
-    
-    /*@SubscribeEvent
+ /*@SubscribeEvent
     public void test(net.minecraftforge.client.event.ClientChatEvent e) {
         int size;
         try {
@@ -391,8 +435,7 @@ public class Client {
         logger.info("------------------------------------");
         logger.info(String.format("block types: %d", idCounter));
     }*/
-    
-    /*@SubscribeEvent
+ /*@SubscribeEvent
     public void test(net.minecraftforge.client.event.ClientChatEvent e) {
         int size;
         try {

+ 21 - 0
src/main/java/me/km/blocks/BlockInvisible.java

@@ -0,0 +1,21 @@
+package me.km.blocks;
+
+import net.minecraft.block.BarrierBlock;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.shapes.ISelectionContext;
+import net.minecraft.util.math.shapes.VoxelShape;
+import net.minecraft.util.math.shapes.VoxelShapes;
+import net.minecraft.world.IBlockReader;
+
+public class BlockInvisible extends BarrierBlock {
+    public BlockInvisible(Block.Properties properties) {
+        super(properties);
+    }
+
+    @Override
+    public VoxelShape getShape(BlockState state, IBlockReader w, BlockPos pos, ISelectionContext context) {
+        return VoxelShapes.empty();
+    }
+}

+ 34 - 0
src/main/java/me/km/blocks/ModBlocks.java

@@ -1,6 +1,7 @@
 package me.km.blocks;
 
 import me.km.blocks.cookingpot.BlockCookingPot;
+import net.minecraft.block.BarrierBlock;
 import net.minecraft.block.Block;
 import net.minecraft.block.Block.Properties;
 import net.minecraft.block.SoundType;
@@ -77,6 +78,10 @@ public class ModBlocks {
     public static Block bookshelfJungle;
     public static Block bookshelfSpruce;
 
+    // invisible blocks
+    public static Block barrierLight;
+    public static Block barrierSolid;
+
     private static Block create(String registry, Material m, float hardness, float resistance) {
         Block b = new Block(Properties.create(m).hardnessAndResistance(hardness, resistance));
         b.setRegistryName(registry);
@@ -121,6 +126,27 @@ public class ModBlocks {
         return b;
     }
 
+    private static Block createInvisibleLight(String registry) {
+        Block b = new BlockInvisible(Block.Properties.create(
+                new Material.Builder(MaterialColor.AIR).replaceable().build())
+                .hardnessAndResistance(-1.0F, 3600000.8F)
+                .noDrops()
+                .doesNotBlockMovement()
+                .lightValue(15));
+        b.setRegistryName(registry);
+        return b;
+    }
+
+    private static Block createInvisible(String registry) {
+        Block b = new BlockInvisible(Block.Properties.create(
+                new Material.Builder(MaterialColor.AIR).replaceable().build())
+                .hardnessAndResistance(-1.0F, 3600000.8F)
+                .noDrops()
+                .doesNotBlockMovement());
+        b.setRegistryName(registry);
+        return b;
+    }
+
     public static void initBlocks(IForgeRegistry<Block> r) {
         // ores + blocks
         copperOre = register(r, createOre("copper_ore", 1));
@@ -182,6 +208,10 @@ public class ModBlocks {
         bookshelfJungle = register(r, createBookshelf("bookshelf_jungle"));
         bookshelfSpruce = register(r, createBookshelf("bookshelf_spruce"));
 
+        // invisible blocks
+        barrierLight = register(r, createInvisibleLight("barrier_light"));
+        barrierSolid = register(r, createInvisible("barrier_solid"));
+
         FireBlock fireblock = (FireBlock) Blocks.FIRE;
         fireblock.setFireInfo(bookshelfAcacia, 30, 20);
         fireblock.setFireInfo(bookshelfBirch, 30, 20);
@@ -259,6 +289,10 @@ public class ModBlocks {
         register(r, bookshelfDarkOak, getItemBlock(bookshelfDarkOak, ItemGroup.BUILDING_BLOCKS));
         register(r, bookshelfJungle, getItemBlock(bookshelfJungle, ItemGroup.BUILDING_BLOCKS));
         register(r, bookshelfSpruce, getItemBlock(bookshelfSpruce, ItemGroup.BUILDING_BLOCKS));
+
+        // invisible blocks
+        register(r, barrierLight, getItemBlock(barrierLight, ItemGroup.BUILDING_BLOCKS));
+        register(r, barrierSolid, getItemBlock(barrierSolid, ItemGroup.BUILDING_BLOCKS));
     }
 
     private static void register(IForgeRegistry<Item> r, Block block, Item itemBlock) {

+ 0 - 7
src/main/java/me/km/networking/ModPacketHandler.java

@@ -33,10 +33,6 @@ public class ModPacketHandler {
         INSTANCE.send(PacketDistributor.PLAYER.with(() -> p), msg);
     }
 
-    private static void sendToPlayers(Object msg) {
-        INSTANCE.send(PacketDistributor.ALL.noArg(), msg);
-    }
-
     private static void sendToServer(Object msg) {
         INSTANCE.sendToServer(msg);
     }
@@ -77,9 +73,6 @@ public class ModPacketHandler {
         sendToServer(new PlayerLeftClickEmpty());
     }
 
-    //--------------------------------------------------------------------------
-    // item stack display
-    //--------------------------------------------------------------------------
     public static void setItemStackIndex(ServerPlayerEntity p, byte index, int iconIndex, int count) {
         sendToPlayer(p, new ItemStackDisplay(index, iconIndex, count));
     }

+ 12 - 1
src/main/java/me/km/networking/PlayerLeftClickEmpty.java

@@ -2,7 +2,10 @@ package me.km.networking;
 
 import java.util.function.Supplier;
 import me.km.Server;
+import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.network.PacketBuffer;
+import net.minecraftforge.api.distmarker.Dist;
+import net.minecraftforge.api.distmarker.OnlyIn;
 import net.minecraftforge.fml.network.NetworkEvent;
 
 public class PlayerLeftClickEmpty {
@@ -15,8 +18,16 @@ public class PlayerLeftClickEmpty {
 
     public static void handle(PlayerLeftClickEmpty pd, Supplier<NetworkEvent.Context> context) {
         context.get().enqueueWork(() -> {
-            Server.scriptEvents.onEmptyLeftClick(context.get().getSender());
+            ServerPlayerEntity p = context.get().getSender();
+            if(p.getServer() != null && p.getServer().isDedicatedServer()) {
+                handle(p);
+            }
         });
         context.get().setPacketHandled(true);
     }
+
+    @OnlyIn(Dist.DEDICATED_SERVER)
+    private static void handle(ServerPlayerEntity p) {
+        Server.scriptEvents.onEmptyLeftClick(p);
+    }
 }

+ 2 - 0
src/main/java/me/km/scheduler/SnuviScheduler.java

@@ -54,6 +54,7 @@ public class SnuviScheduler implements ISnuviScheduler {
     }
 
     private void tick(int ticks) {
+        System.out.println("Ticking scheduler");
         Iterator<SnuviTask> iter = tasks.iterator();
         long endTime = System.currentTimeMillis() + 25;
         while(iter.hasNext()) {
@@ -71,6 +72,7 @@ public class SnuviScheduler implements ISnuviScheduler {
                 iter.remove();
             }
         }
+        System.out.println("Finished ticking scheduler");
     }
 
     public void scheduleAsyncTask(Runnable r) {

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

@@ -2,7 +2,7 @@ modLoader="javafml"
 loaderVersion="[31,)"
 [[mods]]
 modId="km"
-version="0.0.44"
+version="0.0.45"
 displayName="Kajetans Mod"
 credits="kajetanjohannes"
 authors="kajetanjohannes"

+ 5 - 0
src/main/resources/assets/km/blockstates/barrier_light.json

@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "": { "model": "km:block/barrier_light" }
+    }
+}

+ 5 - 0
src/main/resources/assets/km/blockstates/barrier_solid.json

@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "": { "model": "km:block/barrier_solid" }
+    }
+}

+ 3 - 0
src/main/resources/assets/km/lang/en_us.json

@@ -83,6 +83,9 @@
     "block.km.bookshelf_dark_oak": "Dark Oak Bookshelf", 
     "block.km.bookshelf_jungle": "Jungle Bookshelf", 
     "block.km.bookshelf_spruce": "Spruce Bookshelf", 
+    
+    "block.km.barrier_light": "Light Barrier", 
+    "block.km.barrier_solid": "Solid Barrier", 
 
     "item.km.wooden_stick": "Wooden Stick", 
     "item.km.stone_stick": "Stone Stick", 

+ 5 - 0
src/main/resources/assets/km/models/block/barrier_light.json

@@ -0,0 +1,5 @@
+{
+    "textures": {
+        "particle": "km:item/barrier_light"
+    }
+}

+ 5 - 0
src/main/resources/assets/km/models/block/barrier_solid.json

@@ -0,0 +1,5 @@
+{
+    "textures": {
+        "particle": "km:item/barrier_solid"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/item/barrier_light.json

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:item/barrier_light"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/item/barrier_solid.json

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:item/barrier_solid"
+    }
+}

BIN
src/main/resources/assets/km/textures/item/barrier_light.png


BIN
src/main/resources/assets/km/textures/item/barrier_solid.png