upgrade to 1.21.3

This commit is contained in:
Jottyfan 2024-11-30 18:50:09 +01:00
parent 0079c721cc
commit 4c5dea1756
219 changed files with 1848 additions and 3815 deletions

View File

@ -1,5 +1,5 @@
plugins { plugins {
id 'fabric-loom' version '1.6-SNAPSHOT' id 'fabric-loom' version '1.8-SNAPSHOT'
id 'maven-publish' id 'maven-publish'
} }

View File

@ -4,14 +4,14 @@ org.gradle.parallel=true
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/develop # check these on https://fabricmc.net/develop
minecraft_version=1.21.1 minecraft_version=1.21.3
yarn_mappings=1.21.1+build.3 yarn_mappings=1.21.3+build.2
loader_version=0.15.11 loader_version=0.16.9
# Mod Properties # Mod Properties
mod_version=1.21.1.0 mod_version=1.21.3.1
maven_group=de.jottyfan.quickiemod maven_group=de.jottyfan.quickiemod
archives_base_name=quickiemod archives_base_name=quickiemod
# Dependencies # Dependencies
fabric_version=0.102.1+1.21.1 fabric_version=0.108.0+1.21.3

View File

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME

7
gradlew vendored
View File

@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# #
# SPDX-License-Identifier: Apache-2.0
#
############################################################################## ##############################################################################
# #
@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum

2
gradlew.bat vendored
View File

@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and @rem See the License for the specific language governing permissions and
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @rem ##########################################################################

View File

@ -1,31 +0,0 @@
package de.jottyfan.quickiemod;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.jottyfan.quickiemod.init.RegistryManager;
import net.fabricmc.api.ModInitializer;
/**
*
* @author jotty
*
*/
public class QuickieMod implements ModInitializer {
public static final String MODID = "quickiemod";
public static final Logger LOGGER = LoggerFactory.getLogger(MODID);
@Override
public void onInitialize() {
LOGGER.info("loading {}", MODID);
RegistryManager.registerBlockEntityTypes();
RegistryManager.registerScreenHandlerTypes();
RegistryManager.registerItems();
RegistryManager.registerEvents();
RegistryManager.registerBlocks();
RegistryManager.registerFeatures();
RegistryManager.registerItemGroup();
}
}

View File

@ -1,26 +0,0 @@
package de.jottyfan.quickiemod;
import de.jottyfan.quickiemod.blocks.QuickieBlocks;
import de.jottyfan.quickiemod.container.BlockStackerScreen;
import de.jottyfan.quickiemod.container.ScreenHandlerTypes;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.client.gui.screen.ingame.HandledScreens;
import net.minecraft.client.render.RenderLayer;
/**
*
* @author jotty
*
*/
@Environment(EnvType.CLIENT)
public class QuickieModClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
// HandledScreens.register(ScreenHandlerTypes.BLOCKSTACKER_SCREEN_HANDLER, BlockStackerScreen::new);
BlockRenderLayerMap.INSTANCE.putBlock(QuickieBlocks.COTTONPLANT.getBlock(), RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(QuickieBlocks.CANOLAPLANT.getBlock(), RenderLayer.getCutout());
}
}

View File

@ -0,0 +1,73 @@
package de.jottyfan.quickiemod;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.jottyfan.quickiemod.block.ModBlocks;
import de.jottyfan.quickiemod.blockentity.ModBlockentity;
import de.jottyfan.quickiemod.event.EventBlockBreak;
import de.jottyfan.quickiemod.feature.ModFeatures;
import de.jottyfan.quickiemod.item.ModItems;
import de.jottyfan.quickiemod.itemgroup.ModItemGroup;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
import net.fabricmc.fabric.api.loot.v3.LootTableEvents;
import net.fabricmc.fabric.api.registry.CompostingChanceRegistry;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.condition.SurvivesExplosionLootCondition;
import net.minecraft.loot.entry.ItemEntry;
/**
*
* @author jotty
*
*/
public class Quickiemod implements ModInitializer {
public static final String MOD_ID = "quickiemod";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
private void registerComposterItems() {
CompostingChanceRegistry.INSTANCE.add(ModItems.ITEM_COTTONSEED, 0.5f);
CompostingChanceRegistry.INSTANCE.add(ModItems.ITEM_COTTON, 0.75f);
CompostingChanceRegistry.INSTANCE.add(ModItems.ITEM_CANOLASEED, 0.5f);
CompostingChanceRegistry.INSTANCE.add(ModItems.ITEM_CANOLA, 0.75f);
}
private void registerLootTableChanges() {
LootTableEvents.MODIFY.register((key, tableBuilder, source, registries) -> {
if (source.isBuiltin()) {
if ("minecraft:blocks/short_grass".equals(key.getValue().toString())) {
tableBuilder.pool(LootPool.builder()
.with(ItemEntry.builder(ModItems.ITEM_COTTONSEED).weight(1))
.with(ItemEntry.builder(Items.AIR).weight(4))
.conditionally(SurvivesExplosionLootCondition.builder()));
} else if ("minecraft:blocks/tall_grass".equals(key.getValue().toString())) {
tableBuilder.pool(LootPool.builder()
.with(ItemEntry.builder(ModItems.ITEM_CANOLASEED).weight(1))
.with(ItemEntry.builder(Items.AIR).weight(7))
.conditionally(SurvivesExplosionLootCondition.builder()));
}
}
});
}
@Override
public void onInitialize() {
ModBlockentity.registerModBlockentities();
List<Item> items = ModItems.registerModItems();
List<Block> blocks = ModBlocks.registerModBlocks();
ModFeatures.registerFeatures();
registerComposterItems();
registerLootTableChanges();
ModItemGroup.registerItemGroup(items, blocks);
PlayerBlockBreakEvents.AFTER.register((world, player, pos, state, blockEntity) -> {
Block oldBlock = state.getBlock();
new EventBlockBreak().doBreakBlock(world, pos, state, player, oldBlock);
});
}
}

View File

@ -0,0 +1,20 @@
package de.jottyfan.quickiemod;
import de.jottyfan.quickiemod.block.ModBlocks;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.client.render.RenderLayer;
/**
*
* @author jotty
*
*/
public class QuickiemodClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
BlockRenderLayerMap.INSTANCE.putBlock(ModBlocks.BLOCK_COTTONPLANT, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(ModBlocks.BLOCK_CANOLAPLANT, RenderLayer.getCutout());
}
}

View File

@ -1,8 +1,5 @@
package de.jottyfan.quickiemod; package de.jottyfan.quickiemod;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
@ -11,13 +8,10 @@ import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
* @author jotty * @author jotty
* *
*/ */
public class QuickieModDataGenerator implements DataGeneratorEntrypoint { public class QuickiemodDataGenerator implements DataGeneratorEntrypoint {
private static final Logger LOGGER = LoggerFactory.getLogger(QuickieMod.MODID);
@Override @Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
// TODO: implement
LOGGER.debug("initializing data generator");
} }
} }

View File

@ -1,84 +0,0 @@
package de.jottyfan.quickiemod.api;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.function.BiFunction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class Neighborhood {
/**
* find the same blocks that is next to the current position pos
*
* @param world the world to look for the blocks
* @param pos the starting position
* @param seekLimit the limit of seek operations
* @param checkLambda check functionality
* @return a set of found block positions
*/
public static final Set<BlockPos> findEqualBlock(World world, BlockPos pos, int seekLimit,
BiFunction<World, BlockPos, Boolean> checkLambda) {
Set<NeighborhoodBean> found = new HashSet<>();
found.add(new NeighborhoodBean(pos, true));
while (pos != null && found.size() < seekLimit) {
findNewNeihgbor(world, pos.east(), found, checkLambda);
findNewNeihgbor(world, pos.south(), found, checkLambda);
findNewNeihgbor(world, pos.west(), found, checkLambda);
findNewNeihgbor(world, pos.north(), found, checkLambda);
pos = findNextUncheckedField(found);
}
Set<BlockPos> finals = new HashSet<>();
for (NeighborhoodBean bean : found) {
finals.add(bean.getPos());
}
return finals;
}
private static final BlockPos findNextUncheckedField(Set<NeighborhoodBean> found) {
Iterator<NeighborhoodBean> i = found.iterator();
while (i.hasNext()) {
NeighborhoodBean bean = i.next();
if (!bean.isChecked()) {
bean.setChecked(true);
return bean.getPos();
}
}
return null;
}
/**
* find new neighbor at pos
*
* @param world the world
* @param pos the position
* @param found the set with all already found positions
* @return true or false
*/
private static final boolean findNewNeihgbor(World world, BlockPos pos, Set<NeighborhoodBean> found,
BiFunction<World, BlockPos, Boolean> checkLambda) {
NeighborhoodBean bean = new NeighborhoodBean(pos);
if (found.contains(bean) || found.contains(bean.over()) || found.contains(bean.below())) {
return false;
} else if (checkLambda.apply(world, pos).booleanValue()) {
found.add(bean);
return true;
} else if (checkLambda.apply(world, pos.up()).booleanValue()) {
found.add(new NeighborhoodBean(pos.up()));
return true;
} else if (checkLambda.apply(world, pos.down()).booleanValue()) {
found.add(new NeighborhoodBean(pos.down()));
return true;
}
return false;
}
}

View File

@ -1,77 +0,0 @@
package de.jottyfan.quickiemod.api;
import java.util.Objects;
import net.minecraft.util.math.BlockPos;
/**
*
* @author jotty
*
*/
public class NeighborhoodBean {
private final BlockPos pos;
private boolean checked;
public NeighborhoodBean(BlockPos pos, boolean checked) {
super();
this.pos = pos;
this.checked = checked;
}
public NeighborhoodBean(BlockPos pos) {
super();
this.pos = pos;
this.checked = false;
}
public NeighborhoodBean over() {
return new NeighborhoodBean(pos.up(), checked);
}
public NeighborhoodBean below() {
return new NeighborhoodBean(pos.down(), checked);
}
@Override
public int hashCode() {
return Objects.hash(pos);
}
@Override
public boolean equals(Object obj) {
Boolean result = null;
if (this == obj) {
result = true;
} else if (obj == null) {
result = false;
} else if (getClass() != obj.getClass()) {
result = false;
} else {
NeighborhoodBean other = (NeighborhoodBean) obj;
result = Objects.equals(pos, other.pos);
}
return result;
}
/**
* @return the checked
*/
public boolean isChecked() {
return checked;
}
/**
* @param checked the checked to set
*/
public void setChecked(boolean checked) {
this.checked = checked;
}
/**
* @return the pos
*/
public BlockPos getPos() {
return pos;
}
}

View File

@ -0,0 +1,25 @@
package de.jottyfan.quickiemod.block;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public abstract class AbstractIdentifiedBlock extends Block {
public AbstractIdentifiedBlock(Identifier identifier) {
super(AbstractBlock.Settings.create().registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
public AbstractIdentifiedBlock(Identifier identifier, float strength, float hardness) {
super(AbstractBlock.Settings.create().strength(strength).hardness(hardness).requiresTool()
.registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
}

View File

@ -1,16 +1,15 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock; import net.minecraft.block.FallingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.util.Identifier;
import net.minecraft.world.explosion.Explosion; import net.minecraft.world.explosion.Explosion;
/** /**
@ -18,15 +17,19 @@ import net.minecraft.world.explosion.Explosion;
* @author jotty * @author jotty
* *
*/ */
public class BlockSpeedpowder extends FallingBlock { public class BlockBreakByTool extends AbstractIdentifiedBlock {
public BlockSpeedpowder() { private final ItemStack[] drops;
super(AbstractBlock.Settings.create().luminance(state -> 12));
public BlockBreakByTool(Identifier identifier, float strength, float hardness, ItemStack[] drops) {
super(identifier, strength, hardness);
this.drops = drops;
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SPEEDPOWDER.getItem(), 9) }); return Arrays.asList(drops);
} }
@Override @Override

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -6,14 +6,17 @@ import java.util.Random;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.AbstractBlock; import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.FallingBlock; import net.minecraft.block.FallingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier;
/** /**
* *
@ -22,8 +25,8 @@ import net.minecraft.loot.context.LootContextParameterSet.Builder;
*/ */
public class BlockDirtSalpeter extends FallingBlock { public class BlockDirtSalpeter extends FallingBlock {
public BlockDirtSalpeter() { public BlockDirtSalpeter(Identifier identifier) {
super(AbstractBlock.Settings.create().hardness(3.1f)); super(AbstractBlock.Settings.create().hardness(3.1f).registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
} }
@Override @Override
@ -31,7 +34,7 @@ public class BlockDirtSalpeter extends FallingBlock {
Integer count = (Double.valueOf(new Random().nextDouble() * 10).intValue() / 4) + 1; Integer count = (Double.valueOf(new Random().nextDouble() * 10).intValue() / 4) + 1;
boolean spawnBoneMeal = new Random().nextDouble() > 0.5f; boolean spawnBoneMeal = new Random().nextDouble() > 0.5f;
ItemStack boneMealStack = new ItemStack(Items.BONE_MEAL); ItemStack boneMealStack = new ItemStack(Items.BONE_MEAL);
ItemStack salpeterStack = new ItemStack(QuickieItems.SALPETER.getItem(), count); ItemStack salpeterStack = new ItemStack(ModItems.ITEM_SALPETER, count);
ItemStack dirtStack = new ItemStack(Blocks.DIRT); ItemStack dirtStack = new ItemStack(Blocks.DIRT);
ItemStack[] spawnies = spawnBoneMeal ? new ItemStack[] { boneMealStack, salpeterStack, dirtStack } ItemStack[] spawnies = spawnBoneMeal ? new ItemStack[] { boneMealStack, salpeterStack, dirtStack }
: new ItemStack[] { salpeterStack, dirtStack }; : new ItemStack[] { salpeterStack, dirtStack };
@ -40,7 +43,6 @@ public class BlockDirtSalpeter extends FallingBlock {
@Override @Override
protected MapCodec<? extends FallingBlock> getCodec() { protected MapCodec<? extends FallingBlock> getCodec() {
// TODO Auto-generated method stub
return null; return null;
} }
} }

View File

@ -0,0 +1,112 @@
package de.jottyfan.quickiemod.block;
import java.util.HashMap;
import java.util.Map;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.DrillBlockEntity;
import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.state.StateManager.Builder;
import net.minecraft.state.property.EnumProperty;
import net.minecraft.state.property.IntProperty;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockDrill extends FallingBlock implements BlockEntityProvider {
private static final Integer MAX_FUEL = 255;
public static final IntProperty FUEL = IntProperty.of("fuel", 0, MAX_FUEL);
public static final EnumProperty<Direction> DIRECTION = EnumProperty.of("direction", Direction.class, Direction.values());
public BlockDrill(Identifier identifier, Direction direction) {
super(AbstractBlock.Settings.create().hardness(2.5f).registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
setDefaultState(getDefaultState().with(FUEL, 0).with(DIRECTION, direction));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new DrillBlockEntity(pos, blockState);
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return (world1, pos, state1, be) -> DrillBlockEntity.tick(world1, pos, state1, be);
}
@Override
protected MapCodec<? extends FallingBlock> getCodec() {
// TODO Auto-generated method stub
return null;
}
@Override
public BlockState onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) {
Integer fuelLeft = state.get(FUEL);
world.spawnEntity(
new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(ModItems.ITEM_CANOLABOTTLE, fuelLeft)));
return super.onBreak(world, pos, state, player);
}
@Override
protected void appendProperties(Builder<Block, BlockState> builder) {
builder.add(FUEL).add(DIRECTION);
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
Map<Item, Integer> loadings = new HashMap<>();
loadings.put(ModItems.ITEM_CANOLABOTTLE, 8);
loadings.put(ModItems.ITEM_CANOLABOTTLESTACK, 72);
ItemStack stack = player.getStackInHand(player.getActiveHand());
Item item = stack.getItem();
if (stack.isEmpty() || !loadings.containsKey(item)) {
if (world.isClient()) {
player.sendMessage(Text.translatable("msg.drill.fuelinfo", state.get(FUEL)), false);
}
} else {
Integer fuelWeight = loadings.get(item);
if (fuelWeight != null) {
Integer load = MAX_FUEL - state.get(FUEL);
if (load < fuelWeight) {
fuelWeight = load;
}
world.setBlockState(pos, state.with(FUEL, state.get(FUEL) + fuelWeight));
if (item.equals(ModItems.ITEM_CANOLABOTTLE)) {
world.spawnEntity(
new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.GLASS_BOTTLE, 1)));
} else if (item.equals(ModItems.ITEM_CANOLABOTTLESTACK)) {
world.spawnEntity(
new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.GLASS_BOTTLE, 9)));
}
stack.decrement(1);
}
}
return ActionResult.PASS;
}
}

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
@ -6,50 +6,57 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import de.jottyfan.quickiemod.blockentity.EmptyLavaHoarderBlockEntity;
import net.minecraft.block.AbstractBlock; import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.ExperienceOrbEntity; import net.minecraft.entity.ExperienceOrbEntity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.tick.OrderedTick;
/** /**
* *
* @author jotty * @author jotty
* *
*/ */
public class BlockEmptyLavahoarder extends Block implements BlockEntityProvider { public class BlockEmptyLavahoarder extends Block {
public BlockEmptyLavahoarder() { public BlockEmptyLavahoarder(Identifier identifier) {
super(AbstractBlock.Settings.create().hardness(2.5f)); super(AbstractBlock.Settings.create().hardness(2.5f).registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new EmptyLavaHoarderBlockEntity(pos, blockState);
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type){
return (world1, pos, state1, be) -> EmptyLavaHoarderBlockEntity.tick(world1, pos, state1, be);
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>(); List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.EMPTYLAVAHOARDER.getBlock())); list.add(new ItemStack(ModBlocks.BLOCK_EMPTYLAVAHOARDER));
return list; return list;
} }
@Override
protected void scheduledTick(BlockState state, ServerWorld world, BlockPos pos,
net.minecraft.util.math.random.Random random) {
boolean found = BlockLavahoarder.suckLava(world, pos.north());
found = found || BlockLavahoarder.suckLava(world, pos.south());
found = found || BlockLavahoarder.suckLava(world, pos.east());
found = found || BlockLavahoarder.suckLava(world, pos.west());
found = found || BlockLavahoarder.suckLava(world, pos.up());
found = found || BlockLavahoarder.suckLava(world, pos.down());
if (found) {
world.setBlockState(pos, ModBlocks.BLOCK_LAVAHOARDER.getDefaultState());
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(ModBlocks.BLOCK_LAVAHOARDER, pos));
} else {
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(this, pos));
}
}
private static final String stringOf(BlockPos pos) { private static final String stringOf(BlockPos pos) {
StringBuilder buf = new StringBuilder(); StringBuilder buf = new StringBuilder();
buf.append(pos.getX()).append(":"); buf.append(pos.getX()).append(":");
@ -106,7 +113,8 @@ public class BlockEmptyLavahoarder extends Block implements BlockEntityProvider
world.setBlockState(blockPosOf(p), Blocks.AIR.getDefaultState()); world.setBlockState(blockPosOf(p), Blocks.AIR.getDefaultState());
} }
if (amount > 0) { if (amount > 0) {
world.setBlockState(pos, QuickieBlocks.LAVAHOARDER.getBlock().getDefaultState()); world.setBlockState(pos, ModBlocks.BLOCK_LAVAHOARDER.getDefaultState());
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(ModBlocks.BLOCK_LAVAHOARDER, pos));
int count = 0; int count = 0;
Random random = new Random(); Random random = new Random();
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
@ -116,9 +124,12 @@ public class BlockEmptyLavahoarder extends Block implements BlockEntityProvider
} }
BlockPos up = pos.up(); BlockPos up = pos.up();
if (count > 0) { if (count > 0) {
EmptyLavaHoarderBlockEntity.spawnRandomItems(world, up, count); BlockLavahoarder.spawnRandomItems(world, up, count);
world.spawnEntity(new ExperienceOrbEntity(world, (double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, count)); world.spawnEntity(new ExperienceOrbEntity(world, (double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D,
(double) pos.getZ() + 0.5D, count));
} }
} else {
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(this, pos));
} }
} }
} }

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -16,11 +16,14 @@ import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.text.Style; import net.minecraft.text.Style;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier;
import net.minecraft.util.ItemScatterer; import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -33,8 +36,8 @@ import net.minecraft.world.World;
*/ */
public class BlockItemhoarder extends Block implements BlockEntityProvider { public class BlockItemhoarder extends Block implements BlockEntityProvider {
public BlockItemhoarder() { public BlockItemhoarder(Identifier identifier) {
super(AbstractBlock.Settings.create().hardness(2.5f)); super(AbstractBlock.Settings.create().hardness(2.5f).registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
} }
@Override @Override
@ -56,7 +59,7 @@ public class BlockItemhoarder extends Block implements BlockEntityProvider {
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>(); List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.ITEMHOARDER.getBlock())); list.add(new ItemStack(ModBlocks.BLOCK_ITEMHOARDER));
return list; return list;
} }

View File

@ -0,0 +1,135 @@
package de.jottyfan.quickiemod.block;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.tick.OrderedTick;
/**
*
* @author jotty
*
*/
public class BlockLavahoarder extends Block {
public BlockLavahoarder(Identifier identifier) {
super(AbstractBlock.Settings.create().hardness(2.5f).luminance(state -> 15)
.registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(ModBlocks.BLOCK_LAVAHOARDER));
return list;
}
public static final void spawnRandomItems(World world, BlockPos pos, Integer count) {
Integer which = new Random().nextInt(10);
if (which < 1) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(),
new ItemStack(Items.DIAMOND, new Random().nextInt(count + 2))));
} else if (which < 2) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(),
new ItemStack(Items.EMERALD, new Random().nextInt(count + 1))));
} else if (which < 3) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(),
new ItemStack(Items.RAW_GOLD, new Random().nextInt(count))));
} else if (which < 4) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(),
new ItemStack(Items.RAW_IRON, new Random().nextInt(count + 1))));
} else if (which < 5) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(),
new ItemStack(Items.RAW_COPPER, new Random().nextInt(count + 2))));
} else if (which < 6) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.OBSIDIAN)));
} else if (which < 7) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.LAPIS_LAZULI)));
} else if (which < 8) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(ModItems.ITEM_SULFOR)));
}
}
/**
* sucks the lava that touches the block
*
* @param world the world
* @param pos the pos
* @return true if lava was found
*/
public static final boolean suckLava(World world, BlockPos pos) {
if (world == null) {
return false;
} else if (Blocks.LAVA.equals(world.getBlockState(pos).getBlock())) {
world.setBlockState(pos, Blocks.AIR.getDefaultState());
BlockPos up = pos.up();
Random random = new Random();
if (random.nextFloat() > 0.9f) {
spawnRandomItems(world, up, 2);
}
return true;
}
return false;
}
@Override
protected void scheduledTick(BlockState state, ServerWorld world, BlockPos pos,
net.minecraft.util.math.random.Random random) {
suckLava(world, pos.north());
suckLava(world, pos.south());
suckLava(world, pos.east());
suckLava(world, pos.west());
suckLava(world, pos.up());
suckLava(world, pos.down());
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(this, pos));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
Hand hand = player.getActiveHand();
ItemStack handStack = player.getStackInHand(hand);
if (handStack != null && Items.BUCKET.equals(handStack.getItem())) {
Integer amount = handStack.getCount();
ItemStack lavaBucketStack = new ItemStack(Items.LAVA_BUCKET, 1);
ItemStack emptyBucketStack = new ItemStack(Items.BUCKET, amount - 1);
if (emptyBucketStack.getCount() < 1) {
player.setStackInHand(hand, lavaBucketStack);
} else {
player.setStackInHand(hand, emptyBucketStack);
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), lavaBucketStack));
}
spawnRandomItems(world, pos, 2);
world.setBlockState(pos, ModBlocks.BLOCK_EMPTYLAVAHOARDER.getDefaultState());
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(ModBlocks.BLOCK_EMPTYLAVAHOARDER, pos));
}
}
return ActionResult.SUCCESS; // forbid to empty the just filled lava bucket
}
@Override
public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(this, pos));
}
}

View File

@ -0,0 +1,89 @@
package de.jottyfan.quickiemod.block;
import java.util.List;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.mob.HostileEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.state.StateManager.Builder;
import net.minecraft.state.property.IntProperty;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.World;
import net.minecraft.world.tick.OrderedTick;
/**
*
* @author jotty
*
*/
public class BlockMonsterhoarder extends Block {
private static final IntProperty SUCKRADIUS = IntProperty.of("suckradius", 1, 15);
public BlockMonsterhoarder(Identifier identifier) {
super(AbstractBlock.Settings.create().hardness(2.5f).luminance(state -> state.get(BlockMonsterhoarder.SUCKRADIUS))
.registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
setDefaultState(getDefaultState().with(SUCKRADIUS, 8));
}
@Override
protected void appendProperties(Builder<Block, BlockState> builder) {
builder.add(SUCKRADIUS);
super.appendProperties(builder);
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient()) {
world.setBlockState(pos, state.cycle(SUCKRADIUS));
} else {
player.sendMessage(Text.translatable("msg.monsterhoarder.size", state.get(SUCKRADIUS)), false);
}
return ActionResult.SUCCESS;
}
@Override
protected void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
if (!world.isClient) {
Box box = new Box(pos).expand(Double.valueOf(state.get(SUCKRADIUS)));
List<Entity> entities = world.getOtherEntities(null, box);
for (Entity entity : entities) {
if (entity instanceof HostileEntity hostile) {
if (hostile.isFireImmune()) {
if (world instanceof ServerWorld serverWorld) {
hostile.kill(serverWorld);
}
} else {
hostile.setOnFireFor(90);
}
}
}
}
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(this, pos));
}
@Override
public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
if (!world.isClient) {
world.getBlockTickScheduler().scheduleTick(OrderedTick.create(this, pos));
world.playSound(null, pos, SoundEvents.UI_TOAST_CHALLENGE_COMPLETE, SoundCategory.PLAYERS, 1f, 1f);
}
super.onPlaced(world, pos, state, placer, itemStack);
}
}

View File

@ -0,0 +1,33 @@
package de.jottyfan.quickiemod.block;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.block.help.IntProviderHelper;
import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class BlockOreDeepslateSulphor extends ExperienceDroppingBlock {
public BlockOreDeepslateSulphor(Identifier identifier) {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(1.9f).sounds(BlockSoundGroup.SOUL_SAND)
.requiresTool().registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(ModItems.ITEM_SULFOR, 4) });
}
}

View File

@ -0,0 +1,33 @@
package de.jottyfan.quickiemod.block;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.block.help.IntProviderHelper;
import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class BlockOreNetherSulphor extends ExperienceDroppingBlock {
public BlockOreNetherSulphor(Identifier identifier) {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(2.1f).sounds(BlockSoundGroup.SOUL_SAND)
.requiresTool().registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(ModItems.ITEM_SULFOR) });
}
}

View File

@ -0,0 +1,34 @@
package de.jottyfan.quickiemod.block;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.block.help.IntProviderHelper;
import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.random.Random;
/**
*
* @author jotty
*
*/
public class BlockOreSalpeter extends ExperienceDroppingBlock {
public BlockOreSalpeter(Identifier identifier) {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(3.1f).sounds(BlockSoundGroup.SOUL_SAND)
.requiresTool().registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(ModItems.ITEM_SALPETER, 2 + Random.create().nextInt(3)) });
}
}

View File

@ -1,16 +1,19 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper; import de.jottyfan.quickiemod.block.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.ExperienceDroppingBlock; import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
/** /**
@ -20,12 +23,12 @@ import net.minecraft.util.math.random.Random;
*/ */
public class BlockOreSandSalpeter extends ExperienceDroppingBlock { public class BlockOreSandSalpeter extends ExperienceDroppingBlock {
public BlockOreSandSalpeter() { public BlockOreSandSalpeter(Identifier identifier) {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(2.9f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool()); super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(2.9f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool().registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER.getItem(), 7 + Random.create().nextInt(4)), new ItemStack(Blocks.SAND) }); return Arrays.asList(new ItemStack[] { new ItemStack(ModItems.ITEM_SALPETER, 7 + Random.create().nextInt(4)), new ItemStack(Blocks.SAND) });
} }
} }

View File

@ -0,0 +1,33 @@
package de.jottyfan.quickiemod.block;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.block.help.IntProviderHelper;
import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class BlockOreSulphor extends ExperienceDroppingBlock {
public BlockOreSulphor(Identifier identifier) {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(1.9f).sounds(BlockSoundGroup.SOUL_SAND)
.requiresTool().registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(ModItems.ITEM_SULFOR) });
}
}

View File

@ -1,28 +1,41 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock; import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.CropBlock; import net.minecraft.block.CropBlock;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemConvertible;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
import net.minecraft.util.ItemScatterer; import net.minecraft.util.ItemScatterer;
import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.collection.DefaultedList;
import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
public class BlockCottonplant extends CropBlock { /**
*
* @author jotty
*
*/
public class BlockPlant extends CropBlock {
public BlockCottonplant() { private Item seed;
super(AbstractBlock.Settings.copy(Blocks.WHEAT)); private Item fruit;
public BlockPlant(Identifier identifier, Item seed, Item fruit) {
super(AbstractBlock.Settings.copy(Blocks.WHEAT).registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
this.seed = seed;
this.fruit = fruit;
} }
@Override @Override
@ -31,7 +44,7 @@ public class BlockCottonplant extends CropBlock {
list.add(new ItemStack(getSeedsItem())); // the one from the seed list.add(new ItemStack(getSeedsItem())); // the one from the seed
if (isMature(state)) { if (isMature(state)) {
list.add(new ItemStack(getSeedsItem(), new Random().nextInt(2))); list.add(new ItemStack(getSeedsItem(), new Random().nextInt(2)));
list.add(new ItemStack(QuickieItems.COTTON.getItem(), new Random().nextFloat() > 0.9f ? 2 : 1)); list.add(new ItemStack(fruit, new Random().nextFloat() > 0.9f ? 2 : 1));
} }
return list; return list;
} }
@ -52,7 +65,7 @@ public class BlockCottonplant extends CropBlock {
@Override @Override
protected ItemConvertible getSeedsItem() { protected ItemConvertible getSeedsItem() {
return QuickieItems.COTTONSEED.getItem(); return seed;
} }
@Override @Override

View File

@ -1,16 +1,18 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock; import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock; import net.minecraft.block.FallingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier;
import net.minecraft.world.explosion.Explosion; import net.minecraft.world.explosion.Explosion;
/** /**
@ -18,15 +20,18 @@ import net.minecraft.world.explosion.Explosion;
* @author jotty * @author jotty
* *
*/ */
public class BlockQuickiepowder extends FallingBlock { public class BlockPowder extends FallingBlock {
public BlockQuickiepowder() { private final ItemStack[] drops;
super(AbstractBlock.Settings.create().luminance(state -> 12));
public BlockPowder(Identifier identifier, ItemStack[] drops) {
super(AbstractBlock.Settings.create().luminance(state -> 12).registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
this.drops = drops;
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.QUICKIEPOWDER.getItem(), 9) }); return Arrays.asList(drops);
} }
@Override @Override

View File

@ -1,17 +1,20 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.FallingBlock; import net.minecraft.block.FallingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootWorldContext.Builder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
/** /**
@ -21,13 +24,15 @@ import net.minecraft.util.math.random.Random;
*/ */
public class BlockSandSalpeter extends FallingBlock { public class BlockSandSalpeter extends FallingBlock {
public BlockSandSalpeter() { public BlockSandSalpeter(Identifier identifier) {
super(Settings.create().strength(2.5f).hardness(3.1f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool()); super(Settings.create().strength(2.5f).hardness(3.1f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool()
.registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER.getItem(), 3 + Random.create().nextInt(2)), new ItemStack(Blocks.SAND) }); return Arrays.asList(new ItemStack[] { new ItemStack(ModItems.ITEM_SALPETER, 3 + Random.create().nextInt(2)),
new ItemStack(Blocks.SAND) });
} }
@Override @Override

View File

@ -0,0 +1,22 @@
package de.jottyfan.quickiemod.block;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class BlockSlippery extends Block {
public BlockSlippery(Identifier identifier, float hardness, float slipperiness, BlockSoundGroup soundGroup) {
super(AbstractBlock.Settings.create().hardness(hardness).slipperiness(slipperiness).breakInstantly()
.sounds(soundGroup).registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
}
}

View File

@ -1,13 +1,11 @@
package de.jottyfan.quickiemod.blocks; package de.jottyfan.quickiemod.block;
import java.util.List;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity; import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker; import de.jottyfan.quickiemod.blockentity.ModBlockentity;
import net.minecraft.block.AbstractBlock; import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity; import net.minecraft.block.BlockWithEntity;
@ -15,11 +13,11 @@ import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker; import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.registry.RegistryKey;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.registry.RegistryKeys;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
import net.minecraft.util.ItemScatterer; import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -31,20 +29,38 @@ import net.minecraft.world.World;
* @author jotty * @author jotty
* *
*/ */
public class BlockStackerDown extends BlockWithEntity implements BlockStacker { public class BlockStacker extends BlockWithEntity implements BlockEntityProvider {
public BlockStackerDown() { private final Direction source;
super(AbstractBlock.Settings.create().hardness(2.5f)); private final Direction dest;
public BlockStacker(Identifier identifier, Direction source, Direction dest) {
super(AbstractBlock.Settings.create().hardness(2.5f).registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
this.source = source;
this.dest = dest;
} }
@Override @Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
/**
* define the source offset
*
* @return the direction of the source offset (1 block beside)
*/
public Direction getSourceOffset() { public Direction getSourceOffset() {
return Direction.UP; return source;
} }
@Override /**
* define the dest offset
*
* @return the direction of the dest offset (1 block beside)
*/
public Direction getDestOffset() { public Direction getDestOffset() {
return Direction.DOWN; return dest;
} }
@Override @Override
@ -53,19 +69,15 @@ public class BlockStackerDown extends BlockWithEntity implements BlockStacker {
} }
@Override @Override
public BlockRenderType getRenderType(BlockState state) { protected MapCodec<? extends BlockWithEntity> getCodec() {
return BlockRenderType.MODEL; // TODO Auto-generated method stub
} return null;
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERDOWN.getBlock()));
} }
@Override @Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) { BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY, return validateTicker(type, ModBlockentity.BLOCKSTACKER_BLOCKENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be)); (world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
} }
@ -102,10 +114,4 @@ public class BlockStackerDown extends BlockWithEntity implements BlockStacker {
public int getComparatorOutput(BlockState state, World world, BlockPos pos) { public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos)); return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
} }
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
} }

View File

@ -0,0 +1,132 @@
package de.jottyfan.quickiemod.block;
import java.util.ArrayList;
import java.util.List;
import de.jottyfan.quickiemod.Quickiemod;
import de.jottyfan.quickiemod.identifier.ModIdentifiers;
import de.jottyfan.quickiemod.item.ModItems;
import net.minecraft.block.Block;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Direction;
/**
*
* @author jotty
*
*/
public class ModBlocks {
public static final Block BLOCK_QUICKIEPOWDER = registerBlock(ModIdentifiers.BLOCK_QUICKIEPOWDER, new BlockPowder(
ModIdentifiers.BLOCK_QUICKIEPOWDER, new ItemStack[] { new ItemStack(ModItems.ITEM_QUICKIEPOWDER, 9) }));
public static final Block BLOCK_SPEEDPOWDER = registerBlock(ModIdentifiers.BLOCK_SPEEDPOWDER, new BlockPowder(
ModIdentifiers.BLOCK_SPEEDPOWDER, new ItemStack[] { new ItemStack(ModItems.ITEM_SPEEDPOWDER, 9) }));
public static final Block BLOCK_SALPETER = registerBlock(ModIdentifiers.BLOCK_SALPETER, new BlockBreakByTool(
ModIdentifiers.BLOCK_SALPETER, 1.5f, 1.5f, new ItemStack[] { new ItemStack(ModItems.ITEM_SALPETER, 9) }));
public static final Block BLOCK_SULFOR = registerBlock(ModIdentifiers.BLOCK_SULFOR, new BlockBreakByTool(
ModIdentifiers.BLOCK_SULFOR, 1.5f, 1.5f, new ItemStack[] { new ItemStack(ModItems.ITEM_SULFOR, 9) }));
public static final Block BLOCK_MONSTERHOARDER = registerBlock(ModIdentifiers.BLOCK_MONSTERHOARDER,
new BlockMonsterhoarder(ModIdentifiers.BLOCK_MONSTERHOARDER));
public static final Block BLOCK_LAVAHOARDER = registerBlock(ModIdentifiers.BLOCK_LAVAHOARDER,
new BlockLavahoarder(ModIdentifiers.BLOCK_LAVAHOARDER));
public static final Block BLOCK_EMPTYLAVAHOARDER = registerBlock(ModIdentifiers.BLOCK_EMPTYLAVAHOARDER,
new BlockEmptyLavahoarder(ModIdentifiers.BLOCK_EMPTYLAVAHOARDER));
public static final Block BLOCK_ITEMHOARDER = registerBlock(ModIdentifiers.BLOCK_ITEMHOARDER,
new BlockItemhoarder(ModIdentifiers.BLOCK_ITEMHOARDER));
public static final Block BLOCK_DIRTSALPETER = registerBlock(ModIdentifiers.BLOCK_DIRTSALPETER,
new BlockDirtSalpeter(ModIdentifiers.BLOCK_DIRTSALPETER));
public static final Block BLOCK_OREDEEPSLATESULFOR = registerBlock(ModIdentifiers.BLOCK_OREDEEPSLATESULFOR,
new BlockOreDeepslateSulphor(ModIdentifiers.BLOCK_OREDEEPSLATESULFOR));
public static final Block BLOCK_ORENETHERSULFOR = registerBlock(ModIdentifiers.BLOCK_ORENETHERSULFOR,
new BlockOreNetherSulphor(ModIdentifiers.BLOCK_ORENETHERSULFOR));
public static final Block BLOCK_ORESALPETER = registerBlock(ModIdentifiers.BLOCK_ORESALPETER,
new BlockOreSalpeter(ModIdentifiers.BLOCK_ORESALPETER));
public static final Block BLOCK_ORESANDSALPETER = registerBlock(ModIdentifiers.BLOCK_ORESANDSALPETER,
new BlockOreSandSalpeter(ModIdentifiers.BLOCK_ORESANDSALPETER));
public static final Block BLOCK_ORESULFOR = registerBlock(ModIdentifiers.BLOCK_ORESULFOR,
new BlockOreSulphor(ModIdentifiers.BLOCK_ORESULFOR));
public static final Block BLOCK_SANDSALPETER = registerBlock(ModIdentifiers.BLOCK_SANDSALPETER,
new BlockSandSalpeter(ModIdentifiers.BLOCK_SANDSALPETER));
public static final Block BLOCK_KELPSTACK = registerBlock(ModIdentifiers.BLOCK_KELPSTACK,
new BlockSlippery(ModIdentifiers.BLOCK_KELPSTACK, 0.1f, 1.0f, BlockSoundGroup.WET_GRASS));
public static final Block BLOCK_COTTONPLANT = registerBlock(ModIdentifiers.BLOCK_COTTONPLANT,
new BlockPlant(ModIdentifiers.BLOCK_COTTONPLANT, ModItems.ITEM_COTTONSEED, ModItems.ITEM_COTTON), false);
public static final Block BLOCK_CANOLAPLANT = registerBlock(ModIdentifiers.BLOCK_CANOLAPLANT,
new BlockPlant(ModIdentifiers.BLOCK_CANOLAPLANT, ModItems.ITEM_CANOLASEED, ModItems.ITEM_CANOLA), false);
public static final Block BLOCK_DRILL_DOWN = registerBlock(ModIdentifiers.BLOCK_DRILLDOWN,
new BlockDrill(ModIdentifiers.BLOCK_DRILLDOWN, Direction.DOWN));
public static final Block BLOCK_DRILL_EAST = registerBlock(ModIdentifiers.BLOCK_DRILLEAST,
new BlockDrill(ModIdentifiers.BLOCK_DRILLEAST, Direction.EAST));
public static final Block BLOCK_DRILL_SOUTH = registerBlock(ModIdentifiers.BLOCK_DRILLSOUTH,
new BlockDrill(ModIdentifiers.BLOCK_DRILLSOUTH, Direction.SOUTH));
public static final Block BLOCK_DRILL_WEST = registerBlock(ModIdentifiers.BLOCK_DRILLWEST,
new BlockDrill(ModIdentifiers.BLOCK_DRILLWEST, Direction.WEST));
public static final Block BLOCK_DRILL_NORTH = registerBlock(ModIdentifiers.BLOCK_DRILLNORTH,
new BlockDrill(ModIdentifiers.BLOCK_DRILLNORTH, Direction.NORTH));
public static final Block BLOCK_STACKER_DOWN = registerBlock(ModIdentifiers.BLOCK_STACKERDOWN,
new BlockStacker(ModIdentifiers.BLOCK_STACKERDOWN, Direction.UP, Direction.DOWN));
public static final Block BLOCK_STACKER_EAST = registerBlock(ModIdentifiers.BLOCK_STACKEREAST,
new BlockStacker(ModIdentifiers.BLOCK_STACKEREAST, Direction.WEST, Direction.EAST));
public static final Block BLOCK_STACKER_SOUTH = registerBlock(ModIdentifiers.BLOCK_STACKERSOUTH,
new BlockStacker(ModIdentifiers.BLOCK_STACKERSOUTH, Direction.NORTH, Direction.SOUTH));
public static final Block BLOCK_STACKER_WEST = registerBlock(ModIdentifiers.BLOCK_STACKERWEST,
new BlockStacker(ModIdentifiers.BLOCK_STACKERWEST, Direction.EAST, Direction.WEST));
public static final Block BLOCK_STACKER_NORTH = registerBlock(ModIdentifiers.BLOCK_STACKERNORTH,
new BlockStacker(ModIdentifiers.BLOCK_STACKERNORTH, Direction.SOUTH, Direction.NORTH));
public static final Block BLOCK_STACKER_UP = registerBlock(ModIdentifiers.BLOCK_STACKERUP,
new BlockStacker(ModIdentifiers.BLOCK_STACKERUP, Direction.DOWN, Direction.UP));
private static final Block registerBlock(Identifier identifier, Block block) {
return registerBlock(identifier, block, true);
}
private static final Block registerBlock(Identifier identifier, Block block, boolean registerAsItem) {
if (registerAsItem) {
Registry.register(Registries.ITEM, identifier, new BlockItem(block, new Item.Settings()
.registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)).useBlockPrefixedTranslationKey()));
}
return Registry.register(Registries.BLOCK, identifier, block);
}
public static final List<Block> registerModBlocks() {
Quickiemod.LOGGER.info(String.format("registering blocks for %s", Quickiemod.MOD_ID));
List<Block> blocks = new ArrayList<>();
blocks.add(BLOCK_QUICKIEPOWDER);
blocks.add(BLOCK_SPEEDPOWDER);
blocks.add(BLOCK_SALPETER);
blocks.add(BLOCK_SULFOR);
blocks.add(BLOCK_MONSTERHOARDER);
blocks.add(BLOCK_EMPTYLAVAHOARDER);
blocks.add(BLOCK_LAVAHOARDER);
blocks.add(BLOCK_ITEMHOARDER);
blocks.add(BLOCK_DIRTSALPETER);
blocks.add(BLOCK_OREDEEPSLATESULFOR);
blocks.add(BLOCK_ORENETHERSULFOR);
blocks.add(BLOCK_ORESALPETER);
blocks.add(BLOCK_ORESANDSALPETER);
blocks.add(BLOCK_ORESULFOR);
blocks.add(BLOCK_SANDSALPETER);
blocks.add(BLOCK_KELPSTACK);
blocks.add(BLOCK_DRILL_DOWN);
blocks.add(BLOCK_DRILL_EAST);
blocks.add(BLOCK_DRILL_SOUTH);
blocks.add(BLOCK_DRILL_WEST);
blocks.add(BLOCK_DRILL_NORTH);
blocks.add(BLOCK_STACKER_DOWN);
blocks.add(BLOCK_STACKER_EAST);
blocks.add(BLOCK_STACKER_SOUTH);
blocks.add(BLOCK_STACKER_WEST);
blocks.add(BLOCK_STACKER_NORTH);
blocks.add(BLOCK_STACKER_UP);
return blocks;
}
}

View File

@ -0,0 +1,16 @@
package de.jottyfan.quickiemod.block;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class StandardBlock extends AbstractIdentifiedBlock {
public StandardBlock(Identifier identifier) {
super(identifier);
}
}

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.blocks.help; package de.jottyfan.quickiemod.block.help;
import net.minecraft.util.math.intprovider.IntProvider; import net.minecraft.util.math.intprovider.IntProvider;
import net.minecraft.util.math.intprovider.IntProviderType; import net.minecraft.util.math.intprovider.IntProviderType;

View File

@ -1,37 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import de.jottyfan.quickiemod.blocks.QuickieBlocks;
import de.jottyfan.quickiemod.init.BlockEntityIdentity;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
/**
*
* @author jotty
*
*/
public class BlockEntityTypes {
public static final BlockEntityType<EmptyLavaHoarderBlockEntity> EMPTYLAVAHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE,
BlockEntityIdentity.EMPTYLAVALHOARDER, BlockEntityType.Builder
.create(EmptyLavaHoarderBlockEntity::new, QuickieBlocks.EMPTYLAVAHOARDER.getBlock(), QuickieBlocks.LAVAHOARDER.getBlock()).build(null));
public static final BlockEntityType<ItemHoarderBlockEntity> ITEMHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.ITEMHOARDER,
BlockEntityType.Builder.create(ItemHoarderBlockEntity::new, QuickieBlocks.ITEMHOARDER.getBlock()).build(null));
public static final BlockEntityType<MonsterHoarderBlockEntity> MONSTERHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE,
BlockEntityIdentity.MONSTERHOARDER, BlockEntityType.Builder.create(MonsterHoarderBlockEntity::new, QuickieBlocks.MONSTERHOARDER.getBlock()).build(null));
public static final BlockEntityType<DrillBlockDownEntity> DRILL_DOWN = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_DOWN,
BlockEntityType.Builder.create(DrillBlockDownEntity::new, QuickieBlocks.DRILL_DOWN.getBlock()).build(null));
public static final BlockEntityType<DrillBlockEastEntity> DRILL_EAST = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_EAST,
BlockEntityType.Builder.create(DrillBlockEastEntity::new, QuickieBlocks.DRILL_EAST.getBlock()).build(null));
public static final BlockEntityType<DrillBlockSouthEntity> DRILL_SOUTH = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_SOUTH,
BlockEntityType.Builder.create(DrillBlockSouthEntity::new, QuickieBlocks.DRILL_SOUTH.getBlock()).build(null));
public static final BlockEntityType<DrillBlockWestEntity> DRILL_WEST = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_WEST,
BlockEntityType.Builder.create(DrillBlockWestEntity::new, QuickieBlocks.DRILL_WEST.getBlock()).build(null));
public static final BlockEntityType<DrillBlockNorthEntity> DRILL_NORTH = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_NORTH,
BlockEntityType.Builder.create(DrillBlockNorthEntity::new, QuickieBlocks.DRILL_NORTH.getBlock()).build(null));
public static final BlockEntityType<BlockStackerEntity> BLOCKSTACKER_ENTITY = Registry.register(Registries.BLOCK_ENTITY_TYPE,
BlockEntityIdentity.BLOCKSTACKERUP,
BlockEntityType.Builder.create(BlockStackerEntity::new, QuickieBlocks.BLOCKSTACKERUP.getBlock(), QuickieBlocks.BLOCKSTACKERDOWN.getBlock(),
QuickieBlocks.BLOCKSTACKEREAST.getBlock(), QuickieBlocks.BLOCKSTACKERWEST.getBlock(), QuickieBlocks.BLOCKSTACKERNORTH.getBlock(),
QuickieBlocks.BLOCKSTACKERSOUTH.getBlock()).build(null));
}

View File

@ -1,64 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList;
import java.util.List;
import de.jottyfan.quickiemod.blocks.QuickieBlocks;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockMonsterhoarder extends Block implements BlockEntityProvider {
public BlockMonsterhoarder() {
super(AbstractBlock.Settings.create().hardness(2.5f).luminance(state -> 15));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new MonsterHoarderBlockEntity(pos, blockState);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type){
return (world1, pos, state1, be) -> MonsterHoarderBlockEntity.tick(world1, pos, state1, be);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.MONSTERHOARDER.getBlock()));
return list;
}
@Override
public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
if (!world.isClient) {
world.playSound(null, pos, SoundEvents.UI_TOAST_CHALLENGE_COMPLETE, SoundCategory.PLAYERS, 1f, 1f);
}
super.onPlaced(world, pos, state, placer, itemStack);
}
}

View File

@ -3,11 +3,8 @@ package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.slf4j.Logger; import de.jottyfan.quickiemod.Quickiemod;
import org.slf4j.LoggerFactory; import de.jottyfan.quickiemod.block.BlockStacker;
import de.jottyfan.quickiemod.QuickieMod;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import de.jottyfan.quickiemod.container.BlockStackerScreenHandler; import de.jottyfan.quickiemod.container.BlockStackerScreenHandler;
import de.jottyfan.quickiemod.container.ImplementedInventory; import de.jottyfan.quickiemod.container.ImplementedInventory;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -34,12 +31,11 @@ import net.minecraft.world.World;
* *
*/ */
public class BlockStackerEntity extends BlockEntity implements NamedScreenHandlerFactory, ImplementedInventory { public class BlockStackerEntity extends BlockEntity implements NamedScreenHandlerFactory, ImplementedInventory {
private static final Logger LOGGER = LoggerFactory.getLogger(QuickieMod.MODID);
private final DefaultedList<ItemStack> inventory = DefaultedList.ofSize(BlockStackerScreenHandler.SLOTSIZE, ItemStack.EMPTY); private final DefaultedList<ItemStack> inventory = DefaultedList.ofSize(BlockStackerScreenHandler.SLOTSIZE, ItemStack.EMPTY);
public BlockStackerEntity(BlockPos blockPos, BlockState blockState) { public BlockStackerEntity(BlockPos blockPos, BlockState blockState) {
super(BlockEntityTypes.BLOCKSTACKER_ENTITY, blockPos, blockState); super(ModBlockentity.BLOCKSTACKER_BLOCKENTITY, blockPos, blockState);
} }
@Override @Override
@ -165,7 +161,7 @@ public class BlockStackerEntity extends BlockEntity implements NamedScreenHandle
Integer candidates = source.getStack(sourceSlot).getCount(); Integer candidates = source.getStack(sourceSlot).getCount();
Integer travellers = candidates > free ? free : candidates; Integer travellers = candidates > free ? free : candidates;
if (travellers > 0) { if (travellers > 0) {
LOGGER.debug("transfer {}/{} of {} from slot {} to slot {} on top of {} ones", travellers, candidates, Quickiemod.LOGGER.debug("transfer {}/{} of {} from slot {} to slot {} on top of {} ones", travellers, candidates,
source.getStack(sourceSlot).getItem().toString(), sourceSlot, destSlot, occupied); source.getStack(sourceSlot).getItem().toString(), sourceSlot, destSlot, occupied);
source.getStack(sourceSlot).decrement(travellers); source.getStack(sourceSlot).decrement(travellers);
if (source.getStack(sourceSlot).getCount() < 1) { if (source.getStack(sourceSlot).getCount() < 1) {
@ -177,7 +173,7 @@ public class BlockStackerEntity extends BlockEntity implements NamedScreenHandle
} else { } else {
Integer destFreeSlot = findItemStackPos(dest, true); Integer destFreeSlot = findItemStackPos(dest, true);
if (destFreeSlot != null) { if (destFreeSlot != null) {
LOGGER.debug("transfer all of {} from slot {} to slot {}", source.getStack(sourceSlot).getItem().toString(), Quickiemod.LOGGER.debug("transfer all of {} from slot {} to slot {}", source.getStack(sourceSlot).getItem().toString(),
sourceSlot, destSlot); sourceSlot, destSlot);
dest.setStack(destFreeSlot, source.removeStack(sourceSlot)); dest.setStack(destFreeSlot, source.removeStack(sourceSlot));
result = true; result = true;
@ -236,7 +232,7 @@ public class BlockStackerEntity extends BlockEntity implements NamedScreenHandle
private static final Integer findItemStackPos(LootableContainerBlockEntity lcbe, List<Item> filterItems, Boolean whitelist) { private static final Integer findItemStackPos(LootableContainerBlockEntity lcbe, List<Item> filterItems, Boolean whitelist) {
if (whitelist == null) { if (whitelist == null) {
whitelist = true; whitelist = true;
LOGGER.error("whitelist is null"); Quickiemod.LOGGER.error("whitelist is null");
} }
if (filterItems == null || filterItems.size() < 1) { if (filterItems == null || filterItems.size() < 1) {
if (whitelist) { if (whitelist) {

View File

@ -1,62 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class DrillBlockDownEntity extends DrillBlockEntity {
private static final Integer MAXDRILLSTEP = 20;
public DrillBlockDownEntity(BlockPos pos, BlockState state) {
super(BlockEntityTypes.DRILL_DOWN, pos, state, MAXDRILLSTEP);
}
public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) {
if (be instanceof DrillBlockDownEntity) {
DrillBlockDownEntity dbe = (DrillBlockDownEntity) be;
DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, generateBlockPos(pos));
}
}
public static final List<BlockPos> generateBlockPos(BlockPos pos) {
List<BlockPos> list = new ArrayList<>();
Integer tracesMod = pos.getY() % 8;
tracesMod = tracesMod < 0 ? tracesMod * -1 : tracesMod; // lower that 0 makes it negative
if (tracesMod != 0) {
list.add(pos.north());
}
if (tracesMod != 1) {
list.add(pos.north().west());
}
if (tracesMod != 2) {
list.add(pos.west());
}
if (tracesMod != 3) {
list.add(pos.south().west());
}
if (tracesMod != 4) {
list.add(pos.south());
}
if (tracesMod != 5) {
list.add(pos.south().east());
}
if (tracesMod != 6) {
list.add(pos.east());
}
if (tracesMod != 7) {
list.add(pos.north().east());
}
list.add(pos.down()); // must be last position
return list;
}
}

View File

@ -1,36 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class DrillBlockEastEntity extends DrillBlockEntity {
private static final Integer MAXDRILLSTEP = 24;
public DrillBlockEastEntity(BlockPos pos, BlockState state) {
super(BlockEntityTypes.DRILL_EAST, pos, state, MAXDRILLSTEP);
}
public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) {
if (be instanceof DrillBlockEastEntity) {
DrillBlockEastEntity dbe = (DrillBlockEastEntity) be;
List<BlockPos> list = new ArrayList<>();
list.add(pos.east());
list.add(pos.east().up());
list.add(pos.east().up().up());
list.add(pos.east().up().up().up());
list.add(pos.east().down()); // must be last position
DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list);
}
}
}

View File

@ -1,23 +1,94 @@
package de.jottyfan.quickiemod.blockentity; package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import de.jottyfan.quickiemod.blocks.QuickieBlocks; import de.jottyfan.quickiemod.block.BlockDrill;
import de.jottyfan.quickiemod.blocks.help.DrillBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World; import net.minecraft.world.World;
public abstract class DrillBlockEntity extends BlockEntity { /**
*
* @author jotty
*
*/
public class DrillBlockEntity extends BlockEntity {
private static final Integer MAXDRILLSTEP = 20;
private Integer drillstep; private Integer drillstep;
private final Integer maxDrillStep; private final Integer maxDrillStep;
public DrillBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state, Integer maxDrillStep) { public DrillBlockEntity(BlockPos pos, BlockState state) {
super(type, pos, state); super(ModBlockentity.DRILL_BLOCKENTITY, pos, state);
this.maxDrillStep = maxDrillStep; this.maxDrillStep = MAXDRILLSTEP;
}
public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) {
if (be instanceof DrillBlockEntity dbe) {
Direction dir = state.get(BlockDrill.DIRECTION);
List<BlockPos> list = new ArrayList<>();
if (Direction.DOWN.equals(dir)) {
list = downFrom(pos);
} else if (Direction.EAST.equals(dir)) {
list = directedFrom(pos.east());
} else if (Direction.SOUTH.equals(dir)) {
list = directedFrom(pos.south());
} else if (Direction.WEST.equals(dir)) {
list = directedFrom(pos.west());
} else if (Direction.NORTH.equals(dir)) {
list = directedFrom(pos.north());
}
DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list);
}
}
public static final List<BlockPos> directedFrom(BlockPos pos) {
// Quickiemod.LOGGER.info("directed");
List<BlockPos> list = new ArrayList<>();
list.add(pos);
list.add(pos.up());
list.add(pos.up().up());
list.add(pos.up().up().up());
list.add(pos.down()); // must be last position
return list;
}
public static final List<BlockPos> downFrom(BlockPos pos) {
// Quickiemod.LOGGER.info("down");
List<BlockPos> list = new ArrayList<>();
Integer tracesMod = pos.getY() % 8;
tracesMod = tracesMod < 0 ? tracesMod * -1 : tracesMod; // lower that 0 makes it negative
if (tracesMod != 0) {
list.add(pos.north());
}
if (tracesMod != 1) {
list.add(pos.north().west());
}
if (tracesMod != 2) {
list.add(pos.west());
}
if (tracesMod != 3) {
list.add(pos.south().west());
}
if (tracesMod != 4) {
list.add(pos.south());
}
if (tracesMod != 5) {
list.add(pos.south().east());
}
if (tracesMod != 6) {
list.add(pos.east());
}
if (tracesMod != 7) {
list.add(pos.north().east());
}
list.add(pos.down()); // must be last position
return list;
} }
protected static final void moveBlockWithEntity(BlockPos from, BlockPos to, World world) { protected static final void moveBlockWithEntity(BlockPos from, BlockPos to, World world) {
@ -25,9 +96,8 @@ public abstract class DrillBlockEntity extends BlockEntity {
BlockState bs = world.getBlockState(from); BlockState bs = world.getBlockState(from);
if (be != null) { if (be != null) {
world.setBlockState(from, Blocks.AIR.getDefaultState()); world.setBlockState(from, Blocks.AIR.getDefaultState());
Integer newFuel = bs.get(DrillBlock.FUEL) - 1; Integer newFuel = bs.get(BlockDrill.FUEL) - 1;
world.setBlockState(to, bs.with(DrillBlock.FUEL, newFuel)); world.setBlockState(to, bs.with(BlockDrill.FUEL, newFuel));
world.addBlockEntity(be);
world.removeBlockEntity(from); world.removeBlockEntity(from);
} }
} }
@ -35,11 +105,11 @@ public abstract class DrillBlockEntity extends BlockEntity {
protected static final Boolean drill(BlockPos pos, List<BlockPos> toList, World world) { protected static final Boolean drill(BlockPos pos, List<BlockPos> toList, World world) {
Boolean lastSuccess = false; Boolean lastSuccess = false;
for (BlockPos to : toList) { for (BlockPos to : toList) {
if (!world.getBlockState(to).isOf(Blocks.BEDROCK) && !world.getBlockState(to).isOf(QuickieBlocks.DRILLSTOP.getBlock())) { if (!world.getBlockState(to).isOf(Blocks.BEDROCK)) {
world.breakBlock(to, true); world.breakBlock(to, true);
lastSuccess = pos.down() != to; // no need for the falling one lastSuccess = pos.down() != to; // no need for the falling one
} else { } else {
lastSuccess = false; // in case that the last one is a bedrock or a drillstop lastSuccess = false; // in case that the last one is a bedrock
} }
} }
return lastSuccess; return lastSuccess;
@ -47,7 +117,7 @@ public abstract class DrillBlockEntity extends BlockEntity {
public static void tick(World world, BlockPos pos, BlockState state, DrillBlockEntity be, Integer maxDrillStep, public static void tick(World world, BlockPos pos, BlockState state, DrillBlockEntity be, Integer maxDrillStep,
List<BlockPos> drillPosition) { List<BlockPos> drillPosition) {
if (state.get(DrillBlock.FUEL) > 0) { if (state.get(BlockDrill.FUEL) > 0) {
if (be.getDrillstep() < 1) { if (be.getDrillstep() < 1) {
be.setDrillstep(maxDrillStep); be.setDrillstep(maxDrillStep);
if (drill(pos, drillPosition, world)) { if (drill(pos, drillPosition, world)) {

View File

@ -1,36 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class DrillBlockNorthEntity extends DrillBlockEntity {
private static final Integer MAXDRILLSTEP = 24;
public DrillBlockNorthEntity(BlockPos pos, BlockState state) {
super(BlockEntityTypes.DRILL_NORTH, pos, state, MAXDRILLSTEP);
}
public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) {
if (be instanceof DrillBlockNorthEntity) {
DrillBlockNorthEntity dbe = (DrillBlockNorthEntity) be;
List<BlockPos> list = new ArrayList<>();
list.add(pos.north());
list.add(pos.north().up());
list.add(pos.north().up().up());
list.add(pos.north().up().up().up());
list.add(pos.north().down()); // must be last position
DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list);
}
}
}

View File

@ -1,35 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class DrillBlockSouthEntity extends DrillBlockEntity {
private static final Integer MAXDRILLSTEP = 24;
public DrillBlockSouthEntity(BlockPos pos, BlockState state) {
super(BlockEntityTypes.DRILL_SOUTH, pos, state, MAXDRILLSTEP);
}
public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) {
if (be instanceof DrillBlockSouthEntity) {
DrillBlockSouthEntity dbe = (DrillBlockSouthEntity) be;
List<BlockPos> list = new ArrayList<>();
list.add(pos.south());
list.add(pos.south().up());
list.add(pos.south().up().up());
list.add(pos.south().up().up().up());
list.add(pos.south().down()); // must be last position
DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list);
}
}
}

View File

@ -1,36 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class DrillBlockWestEntity extends DrillBlockEntity {
private static final Integer MAXDRILLSTEP = 24;
public DrillBlockWestEntity(BlockPos pos, BlockState state) {
super(BlockEntityTypes.DRILL_WEST, pos, state, MAXDRILLSTEP);
}
public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) {
if (be instanceof DrillBlockWestEntity) {
DrillBlockWestEntity dbe = (DrillBlockWestEntity) be;
List<BlockPos> list = new ArrayList<>();
list.add(pos.west());
list.add(pos.west().up());
list.add(pos.west().up().up());
list.add(pos.west().up().up().up());
list.add(pos.west().down()); // must be last position
DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list);
}
}
}

View File

@ -1,84 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.Random;
import de.jottyfan.quickiemod.blocks.QuickieBlocks;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class EmptyLavaHoarderBlockEntity extends BlockEntity {
public EmptyLavaHoarderBlockEntity(BlockPos pos, BlockState state) {
super(BlockEntityTypes.EMPTYLAVAHOARDER, pos, state);
}
public static final void spawnRandomItems(World world, BlockPos pos, Integer count) {
Integer which = new Random().nextInt(10);
if (which < 1) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.DIAMOND, new Random().nextInt(count + 2))));
} else if (which < 2) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.EMERALD, new Random().nextInt(count + 1))));
} else if (which < 3) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.RAW_GOLD, new Random().nextInt(count))));
} else if (which < 4) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.RAW_IRON, new Random().nextInt(count + 1))));
} else if (which < 5) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.RAW_COPPER, new Random().nextInt(count + 2))));
} else if (which < 6) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.OBSIDIAN)));
} else if (which < 7) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.LAPIS_LAZULI)));
} else if (which < 8) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(QuickieItems.SULPHOR.getItem())));
}
}
/**
* sucks the lava that touches the block
*
* @param world the world
* @param pos the pos
* @return true if lava was found
*/
private boolean suckLava(World world, BlockPos pos) {
if (world == null) {
return false;
} else if (Blocks.LAVA.equals(world.getBlockState(pos).getBlock())) {
world.setBlockState(pos, Blocks.AIR.getDefaultState());
BlockPos up = pos.up();
Random random = new Random();
if (random.nextFloat() > 0.9f) {
spawnRandomItems(world, up, 2);
}
return true;
}
return false;
}
public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) {
if (be instanceof EmptyLavaHoarderBlockEntity) {
EmptyLavaHoarderBlockEntity elhbe = (EmptyLavaHoarderBlockEntity) be;
boolean found = elhbe.suckLava(world, pos.north());
found = found || elhbe.suckLava(world, pos.south());
found = found || elhbe.suckLava(world, pos.east());
found = found || elhbe.suckLava(world, pos.west());
found = found || elhbe.suckLava(world, pos.up());
found = found || elhbe.suckLava(world, pos.down());
if (found) {
world.setBlockState(pos, QuickieBlocks.LAVAHOARDER.getBlock().getDefaultState());
}
}
}
}

View File

@ -3,7 +3,6 @@ package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import de.jottyfan.quickiemod.text.PrefixedText;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.LootableContainerBlockEntity;
@ -30,13 +29,15 @@ import net.minecraft.world.World;
* *
*/ */
public class ItemHoarderBlockEntity extends LootableContainerBlockEntity { public class ItemHoarderBlockEntity extends LootableContainerBlockEntity {
private DefaultedList<ItemStack> stacks; private DefaultedList<ItemStack> stacks;
private float suckradius; private float suckradius;
public ItemHoarderBlockEntity(BlockPos pos, BlockState state) { public ItemHoarderBlockEntity(BlockPos pos, BlockState state) {
super(BlockEntityTypes.ITEMHOARDER, pos, state); super(ModBlockentity.ITEM_HOARDER_BLOCKENTITY, pos, state);
stacks = DefaultedList.ofSize(54, ItemStack.EMPTY); stacks = DefaultedList.ofSize(54, ItemStack.EMPTY);
setSuckradius(4f); // TODO: make it level up - able and start with 2 setSuckradius(4f);
} }
// TODO: see https://fabricmc.net/wiki/tutorial:containers for a real chest // TODO: see https://fabricmc.net/wiki/tutorial:containers for a real chest
@ -136,8 +137,7 @@ public class ItemHoarderBlockEntity extends LootableContainerBlockEntity {
for (ItemStack stack : stacks) { for (ItemStack stack : stacks) {
Item item = stack.getItem(); Item item = stack.getItem();
if (item != Items.AIR) { if (item != Items.AIR) {
Text text = PrefixedText.instance(String.format("%dx ", stack.getCount()).concat("%s"), Text text = Text.of(String.format("%dx %s", stack.getCount(), Text.translatable(stack.getItem().getTranslationKey())));
Text.translatable(stack.getTranslationKey()));
list.add(text); list.add(text);
} }
} }

View File

@ -0,0 +1,31 @@
package de.jottyfan.quickiemod.blockentity;
import de.jottyfan.quickiemod.block.ModBlocks;
import de.jottyfan.quickiemod.identifier.ModIdentifiers;
import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
/**
*
* @author jotty
*
*/
public class ModBlockentity {
public static final BlockEntityType<ItemHoarderBlockEntity> ITEM_HOARDER_BLOCKENTITY = Registry.register(
Registries.BLOCK_ENTITY_TYPE, ModIdentifiers.BLOCKENTITY_ITEMHOARDER,
FabricBlockEntityTypeBuilder.create(ItemHoarderBlockEntity::new, ModBlocks.BLOCK_ITEMHOARDER).build());
public static final BlockEntityType<DrillBlockEntity> DRILL_BLOCKENTITY = Registry.register(
Registries.BLOCK_ENTITY_TYPE, ModIdentifiers.BLOCKENTITY_DRILL,
FabricBlockEntityTypeBuilder.create(DrillBlockEntity::new, ModBlocks.BLOCK_DRILL_DOWN, ModBlocks.BLOCK_DRILL_EAST,
ModBlocks.BLOCK_DRILL_SOUTH, ModBlocks.BLOCK_DRILL_WEST, ModBlocks.BLOCK_DRILL_NORTH).build());
public static final BlockEntityType<BlockStackerEntity> BLOCKSTACKER_BLOCKENTITY = Registry.register(
Registries.BLOCK_ENTITY_TYPE, ModIdentifiers.BLOCKENTITY_BLOCKSTACKER,
FabricBlockEntityTypeBuilder.create(BlockStackerEntity::new, ModBlocks.BLOCK_STACKER_DOWN,
ModBlocks.BLOCK_STACKER_EAST, ModBlocks.BLOCK_STACKER_SOUTH, ModBlocks.BLOCK_STACKER_WEST,
ModBlocks.BLOCK_STACKER_NORTH, ModBlocks.BLOCK_STACKER_UP).build());
public static final void registerModBlockentities() {
};
}

View File

@ -1,51 +0,0 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.List;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.mob.HostileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class MonsterHoarderBlockEntity extends BlockEntity {
private float suckradius;
public MonsterHoarderBlockEntity(BlockPos pos, BlockState state) {
super(BlockEntityTypes.MONSTERHOARDER, pos, state);
setSuckradius(8f); // TODO: make it level up - able and start with 2
}
public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) {
if (be instanceof MonsterHoarderBlockEntity) {
MonsterHoarderBlockEntity mhbe = (MonsterHoarderBlockEntity) be;
Box box = new Box(pos).expand(mhbe.getSuckradius());
List<Entity> entities = world.getOtherEntities(null, box);
for (Entity entity : entities) {
if (entity instanceof HostileEntity) {
if (entity.isFireImmune()) {
entity.kill();
} else {
entity.setOnFireFor(90);
}
}
}
}
}
public float getSuckradius() {
return suckradius;
}
public void setSuckradius(float suckradius) {
this.suckradius = suckradius;
}
}

View File

@ -1,66 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import java.util.Random;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.CropBlock;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemConvertible;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class BlockCanolaplant extends CropBlock {
public BlockCanolaplant() {
super(AbstractBlock.Settings.copy(Blocks.WHEAT));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
DefaultedList<ItemStack> list = DefaultedList.of();
list.add(new ItemStack(getSeedsItem())); // the one from the seed
if (isMature(state)) {
list.add(new ItemStack(getSeedsItem(), new Random().nextInt(2)));
list.add(new ItemStack(QuickieItems.CANOLA.getItem(), new Random().nextFloat() > 0.9f ? 2 : 1));
}
return list;
}
private void spawnHarvested(World world, BlockPos pos, BlockState state) {
DefaultedList<ItemStack> list = DefaultedList.of();
getDroppedStacks(state, null).forEach(itemStack -> {
list.add(itemStack);
});
ItemScatterer.spawn(world, pos, list);
}
@Override
public BlockState onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) {
spawnHarvested(world, pos, state);
return super.onBreak(world, pos, state, player);
}
@Override
protected ItemConvertible getSeedsItem() {
return QuickieItems.CANOLASEED.getItem();
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient && isMature(state)) {
spawnHarvested(world, pos, state);
world.setBlockState(pos, state.with(AGE, 0));
}
return ActionResult.PASS;
}
}

View File

@ -1,61 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.ArrayList;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.DrillBlockDownEntity;
import de.jottyfan.quickiemod.blocks.help.DrillBlock;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockDrillDown extends DrillBlock implements BlockEntityProvider {
public BlockDrillDown() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new DrillBlockDownEntity(pos, blockState);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.DRILL_DOWN.getBlock()));
return list;
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return (world1, pos, state1, be) -> DrillBlockDownEntity.tick(world1, pos, state1, be);
}
@Override
protected MapCodec<? extends FallingBlock> getCodec() {
return null; // TODO: what to return here?
}
}

View File

@ -1,61 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.ArrayList;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.DrillBlockEastEntity;
import de.jottyfan.quickiemod.blocks.help.DrillBlock;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockDrillEast extends DrillBlock implements BlockEntityProvider {
public BlockDrillEast() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new DrillBlockEastEntity(pos, blockState);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.DRILL_EAST.getBlock()));
return list;
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type){
return (world1, pos, state1, be) -> DrillBlockEastEntity.tick(world1, pos, state1, be);
}
@Override
protected MapCodec<? extends FallingBlock> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,61 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.ArrayList;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.DrillBlockNorthEntity;
import de.jottyfan.quickiemod.blocks.help.DrillBlock;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockDrillNorth extends DrillBlock implements BlockEntityProvider {
public BlockDrillNorth() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new DrillBlockNorthEntity(pos, blockState);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.DRILL_NORTH.getBlock()));
return list;
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type){
return (world1, pos, state1, be) -> DrillBlockNorthEntity.tick(world1, pos, state1, be);
}
@Override
protected MapCodec<? extends FallingBlock> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,61 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.ArrayList;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.DrillBlockSouthEntity;
import de.jottyfan.quickiemod.blocks.help.DrillBlock;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockDrillSouth extends DrillBlock implements BlockEntityProvider {
public BlockDrillSouth() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new DrillBlockSouthEntity(pos, blockState);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.DRILL_SOUTH.getBlock()));
return list;
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type){
return (world1, pos, state1, be) -> DrillBlockSouthEntity.tick(world1, pos, state1, be);
}
@Override
protected MapCodec<? extends FallingBlock> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,61 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.ArrayList;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.DrillBlockWestEntity;
import de.jottyfan.quickiemod.blocks.help.DrillBlock;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockDrillWest extends DrillBlock implements BlockEntityProvider {
public BlockDrillWest() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new DrillBlockWestEntity(pos, blockState);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.DRILL_WEST.getBlock()));
return list;
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type){
return (world1, pos, state1, be) -> DrillBlockWestEntity.tick(world1, pos, state1, be);
}
@Override
protected MapCodec<? extends FallingBlock> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,30 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
/**
*
* @author jotty
*
*/
public class BlockDrillstop extends Block {
public BlockDrillstop() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.DRILLSTOP.getBlock()));
return list;
}
}

View File

@ -1,38 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.Arrays;
import java.util.List;
import com.mojang.serialization.MapCodec;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/**
*
* @author jotty
*
*/
public class BlockKelpstack extends FallingBlock {
public BlockKelpstack() {
super(AbstractBlock.Settings.create().hardness(0.1f).slipperiness(1.0f)
.breakInstantly().sounds(BlockSoundGroup.WET_GRASS));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState blockState, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(Items.KELP, 9) });
}
@Override
protected MapCodec<? extends FallingBlock> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,81 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.ArrayList;
import java.util.List;
import de.jottyfan.quickiemod.blockentity.EmptyLavaHoarderBlockEntity;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockLavahoarder extends Block implements BlockEntityProvider {
public BlockLavahoarder() {
super(AbstractBlock.Settings.create().hardness(2.5f).luminance(state -> 15));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new EmptyLavaHoarderBlockEntity(pos, blockState);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return (world1, pos, state1, be) -> EmptyLavaHoarderBlockEntity.tick(world1, pos, state1, be);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.LAVAHOARDER.getBlock()));
return list;
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
Hand hand = player.getActiveHand();
ItemStack handStack = player.getStackInHand(hand);
if (handStack != null && Items.BUCKET.equals(handStack.getItem())) {
Integer amount = handStack.getCount();
ItemStack lavaBucketStack = new ItemStack(Items.LAVA_BUCKET, 1);
ItemStack emptyBucketStack = new ItemStack(Items.BUCKET, amount - 1);
if (emptyBucketStack.getCount() < 1) {
player.setStackInHand(hand, lavaBucketStack);
} else {
player.setStackInHand(hand, emptyBucketStack);
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), lavaBucketStack));
}
EmptyLavaHoarderBlockEntity.spawnRandomItems(world, pos, 2);
world.setBlockState(pos, QuickieBlocks.EMPTYLAVAHOARDER.getBlock().getDefaultState());
}
}
return ActionResult.SUCCESS; // forbid to empty the just filled lava bucket
}
}

View File

@ -1,64 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.ArrayList;
import java.util.List;
import de.jottyfan.quickiemod.blockentity.MonsterHoarderBlockEntity;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockMonsterhoarder extends Block implements BlockEntityProvider {
public BlockMonsterhoarder() {
super(AbstractBlock.Settings.create().hardness(2.5f).luminance(state -> 15));
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) {
return new MonsterHoarderBlockEntity(pos, blockState);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type){
return (world1, pos, state1, be) -> MonsterHoarderBlockEntity.tick(world1, pos, state1, be);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>();
list.add(new ItemStack(QuickieBlocks.MONSTERHOARDER.getBlock()));
return list;
}
@Override
public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
if (!world.isClient) {
world.playSound(null, pos, SoundEvents.UI_TOAST_CHALLENGE_COMPLETE, SoundCategory.PLAYERS, 1f, 1f);
}
super.onPlaced(world, pos, state, placer, itemStack);
}
}

View File

@ -1,30 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/**
*
* @author jotty
*
*/
public class BlockOreDeepslateSulphor extends ExperienceDroppingBlock {
public BlockOreDeepslateSulphor() {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(1.9f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR.getItem(), 4) });
}
}

View File

@ -1,29 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/**
*
* @author jotty
*
*/
public class BlockOreNetherSulphor extends ExperienceDroppingBlock {
public BlockOreNetherSulphor() {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(2.1f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR.getItem()) });
}
}

View File

@ -1,30 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.math.random.Random;
/**
*
* @author jotty
*
*/
public class BlockOreSalpeter extends ExperienceDroppingBlock {
public BlockOreSalpeter() {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(3.1f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER.getItem(), 2 + Random.create().nextInt(3)) });
}
}

View File

@ -1,30 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/**
*
* @author jotty
*
*/
public class BlockOreSulphor extends ExperienceDroppingBlock {
public BlockOreSulphor() {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(1.9f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR.getItem()) });
}
}

View File

@ -1,29 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/**
*
* @author jotty
*
*/
public class BlockSalpeter extends ExperienceDroppingBlock {
public BlockSalpeter() {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(0.5f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER.getItem(), 9) });
}
}

View File

@ -1,111 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerEast extends BlockWithEntity implements BlockStacker {
public BlockStackerEast() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.WEST;
}
@Override
public Direction getDestOffset() {
return Direction.EAST;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKEREAST.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,111 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerNorth extends BlockWithEntity implements BlockStacker {
public BlockStackerNorth() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.SOUTH;
}
@Override
public Direction getDestOffset() {
return Direction.NORTH;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERNORTH.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,111 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerSouth extends BlockWithEntity implements BlockStacker {
public BlockStackerSouth() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.NORTH;
}
@Override
public Direction getDestOffset() {
return Direction.SOUTH;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERSOUTH.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,111 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerUp extends BlockWithEntity implements BlockStacker {
public BlockStackerUp() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.DOWN;
}
@Override
public Direction getDestOffset() {
return Direction.UP;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERUP.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,111 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerWest extends BlockWithEntity implements BlockStacker {
public BlockStackerWest() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERWEST.getBlock()));
}
@Override
public Direction getSourceOffset() {
return Direction.EAST;
}
@Override
public Direction getDestOffset() {
return Direction.WEST;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,29 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import java.util.Arrays;
import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/**
*
* @author jotty
*
*/
public class BlockSulphor extends ExperienceDroppingBlock {
public BlockSulphor() {
super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(0.5f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR.getItem(), 9) });
}
}

View File

@ -1,69 +0,0 @@
package de.jottyfan.quickiemod.blocks;
import net.minecraft.block.Block;
/**
*
* @author jotty
*
*/
public enum QuickieBlocks {
// @formatter:off
BLOCKSTACKERUP(new BlockStackerUp(), "blockstackerup"),
BLOCKSTACKERDOWN(new BlockStackerDown(), "blockstackerdown"),
BLOCKSTACKEREAST(new BlockStackerEast(), "blockstackereast"),
BLOCKSTACKERWEST(new BlockStackerWest(), "blockstackerwest"),
BLOCKSTACKERNORTH(new BlockStackerNorth(), "blockstackernorth"),
BLOCKSTACKERSOUTH(new BlockStackerSouth(), "blockstackersouth"),
DRILL_DOWN(new BlockDrillDown(), "drill"),
DRILL_EAST(new BlockDrillEast(), "drilleast"),
DRILL_SOUTH(new BlockDrillSouth(), "drillsouth"),
DRILL_WEST(new BlockDrillWest(), "drillwest"),
DRILL_NORTH(new BlockDrillNorth(), "drillnorth"),
DRILLSTOP(new BlockDrillstop(), "drillstop"),
MONSTERHOARDER(new BlockMonsterhoarder(), "monsterhoarder"),
ITEMHOARDER(new BlockItemhoarder(), "itemhoarder"),
LAVAHOARDER(new BlockLavahoarder(), "lavahoarder", false),
EMPTYLAVAHOARDER(new BlockEmptyLavahoarder(), "emptylavahoarder"),
KELPSTACK(new BlockKelpstack(), "kelpstack"),
COTTONPLANT(new BlockCottonplant(), "cottonplant", false),
CANOLAPLANT(new BlockCanolaplant(), "canolaplant", false),
DIRTSALPETER(new BlockDirtSalpeter(), "dirtsalpeter"),
ORE_NETHER_SULPHOR(new BlockOreNetherSulphor(), "orenethersulphor"),
ORE_SALPETER(new BlockOreSalpeter(), "oresalpeter"),
ORE_SAND_SALPETER(new BlockSandSalpeter(), "oresandsalpeter"),
ORE_SULPHOR(new BlockOreSulphor(), "oresulphor"),
ORE_DEEPSLATESULPHOR(new BlockOreDeepslateSulphor(), "oredeepslatesulphor"),
SANDSALPETER(new BlockSandSalpeter(), "sandsalpeter"),
BLOCKSULPHOR(new BlockSulphor(), "blocksulphor"),
BLOCKSALPETER(new BlockSalpeter(), "blocksalpeter"),
BLOCKSPEEDPOWDER(new BlockSpeedpowder(), "blockspeedpowder"),
BLOCKQUICKIEPOWDER(new BlockQuickiepowder(), "blockquickiepowder");
// @formatter:on
private final Block block;
private final String name;
private final Boolean add2BlockPanel;
private QuickieBlocks(Block block, String name) {
this(block, name, true);
}
private QuickieBlocks(Block block, String name, Boolean add2BlockPanel) {
this.block = block;
this.name = name;
this.add2BlockPanel = add2BlockPanel;
}
public final Block getBlock() {
return block;
}
public final String getName() {
return name;
}
public final Boolean getAdd2BlockPanel() {
return add2BlockPanel;
}
}

View File

@ -1,25 +0,0 @@
package de.jottyfan.quickiemod.blocks.help;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.util.math.Direction;
/**
*
* @author jotty
*
*/
public interface BlockStacker extends BlockEntityProvider {
/**
* define the source offset
*
* @return the direction of the source offset (1 block beside)
*/
public Direction getSourceOffset();
/**
* define the dest offset
*
* @return the direction of the dest offset (1 block beside)
*/
public Direction getDestOffset();
}

View File

@ -1,78 +0,0 @@
package de.jottyfan.quickiemod.blocks.help;
import java.util.HashMap;
import java.util.Map;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.FallingBlock;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.state.property.IntProperty;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public abstract class DrillBlock extends FallingBlock {
private static final Integer MAX_FUEL = 255;
public static final IntProperty FUEL = IntProperty.of("fuel", 0, MAX_FUEL);
public DrillBlock(Settings settings) {
super(settings);
setDefaultState(getDefaultState().with(FUEL, 0));
}
@Override
public BlockState onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) {
Integer fuelLeft = state.get(FUEL);
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(QuickieItems.CANOLABOTTLE.getItem(), fuelLeft)));
return super.onBreak(world, pos, state, player);
}
@Override
protected void appendProperties(net.minecraft.state.StateManager.Builder<Block, BlockState> builder) {
builder.add(FUEL);
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
Map<Item, Integer> loadings = new HashMap<>();
loadings.put(QuickieItems.CANOLABOTTLE.getItem(), 8);
loadings.put(QuickieItems.CANOLABOTTLESTACK.getItem(), 72);
ItemStack stack = player.getStackInHand(player.getActiveHand());
Item item = stack.getItem();
if (stack.isEmpty() || !loadings.containsKey(item) ) {
if (world.isClient()) {
player.sendMessage(Text.translatable("msg.drill.fuelinfo", state.get(FUEL)));
}
} else {
Integer fuelWeight = loadings.get(item);
if (fuelWeight != null) {
Integer load = MAX_FUEL - state.get(FUEL);
if (load < fuelWeight) {
// Integer numberOfTooMuchLoad = fuelWeight - load;
fuelWeight = load;
}
world.setBlockState(pos, state.with(FUEL, state.get(FUEL) + fuelWeight));
if (item.equals(QuickieItems.CANOLABOTTLE.getItem())) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.GLASS_BOTTLE, 1)));
} else if (item.equals(QuickieItems.CANOLABOTTLESTACK.getItem())) {
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.GLASS_BOTTLE, 9)));
}
stack.decrement(1);
}
}
return ActionResult.PASS;
}
}

View File

@ -1,6 +1,6 @@
package de.jottyfan.quickiemod.container; package de.jottyfan.quickiemod.container;
import de.jottyfan.quickiemod.QuickieMod; import de.jottyfan.quickiemod.Quickiemod;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
@ -18,7 +18,7 @@ import net.minecraft.util.Identifier;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class BlockStackerScreen extends HandledScreen<BlockStackerScreenHandler> public class BlockStackerScreen extends HandledScreen<BlockStackerScreenHandler>
implements ScreenHandlerProvider<BlockStackerScreenHandler> { implements ScreenHandlerProvider<BlockStackerScreenHandler> {
private final static Identifier TEXTURE = Identifier.of(QuickieMod.MODID, "textures/gui/blockstacker.png"); private final static Identifier TEXTURE = Identifier.of(Quickiemod.MOD_ID, "textures/gui/blockstacker.png");
private final Integer containerHeight = 222; private final Integer containerHeight = 222;
private final Integer containerWidth = 176; private final Integer containerWidth = 176;
@ -39,6 +39,6 @@ public class BlockStackerScreen extends HandledScreen<BlockStackerScreenHandler>
int guiX = (this.width - this.containerWidth) / 2; int guiX = (this.width - this.containerWidth) / 2;
int guiY = (this.height - this.containerHeight) / 2; int guiY = (this.height - this.containerHeight) / 2;
super.renderInGameBackground(context); super.renderInGameBackground(context);
context.drawTexture(TEXTURE, guiX, guiY, 0, 0, containerWidth, containerHeight); // context.drawTexture(TEXTURE, guiX, guiY, 0f, 0f, containerWidth, containerHeight, 0, 0);
} }
} }

View File

@ -1,29 +0,0 @@
package de.jottyfan.quickiemod.event;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.ActionResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public interface BreakBlockCallback {
Event<BreakBlockCallback> EVENT = EventFactory.createArrayBacked(BreakBlockCallback.class,
(listeners) -> (world, blockPos, blockState, playerEntity) -> {
for (BreakBlockCallback listener : listeners) {
ActionResult result = listener.injectBlockBreakCallback(world, blockPos, blockState, playerEntity);
if (result != ActionResult.PASS) {
return result;
}
}
return ActionResult.PASS;
});
ActionResult injectBlockBreakCallback(World world, BlockPos blockPos, BlockState blockState, PlayerEntity playerEntity);
}

View File

@ -3,13 +3,10 @@ package de.jottyfan.quickiemod.event;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.apache.logging.log4j.LogManager; import de.jottyfan.quickiemod.item.HarvestRange;
import org.apache.logging.log4j.Logger; import de.jottyfan.quickiemod.item.ModItems;
import de.jottyfan.quickiemod.item.ToolRangeable;
import de.jottyfan.quickiemod.QuickieMod; import de.jottyfan.quickiemod.item.ToolSpeedpowderAxe;
import de.jottyfan.quickiemod.items.HarvestRange;
import de.jottyfan.quickiemod.items.QuickieItems;
import de.jottyfan.quickiemod.items.ToolRangeable;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
@ -27,20 +24,21 @@ import net.minecraft.world.World;
* *
*/ */
public class EventBlockBreak { public class EventBlockBreak {
private static final Logger LOGGER = LogManager.getLogger(QuickieMod.MODID);
private enum BlockBreakDirection { private enum BlockBreakDirection {
UPWARDS, ALL; UPWARDS, ALL;
} }
public void doBreakBlock(World world, BlockPos blockPos, BlockState blockState, PlayerEntity playerEntity) { public void doBreakBlock(World world, BlockPos blockPos, BlockState blockState, PlayerEntity playerEntity, Block oldBlock) {
ItemStack mainHandItemStack = playerEntity.getEquippedStack(EquipmentSlot.MAINHAND); ItemStack mainHandItemStack = playerEntity.getEquippedStack(EquipmentSlot.MAINHAND);
if (mainHandItemStack != null) { if (mainHandItemStack != null) {
Item item = mainHandItemStack.getItem(); Item item = mainHandItemStack.getItem();
if (item instanceof ToolRangeable) { if (item instanceof ToolRangeable) {
ToolRangeable tool = (ToolRangeable) item; ToolRangeable tool = (ToolRangeable) item;
Block block = blockState.getBlock(); if (!world.getBlockState(blockPos).getBlock().equals(oldBlock)) {
int handled = handleRangeableTools(tool, mainHandItemStack, world, block, blockPos, playerEntity); // recreate old block to make it breakable; otherwise, the recursive algorithm stops directly
world.setBlockState(blockPos, oldBlock.getDefaultState());
}
int handled = handleRangeableTools(tool, mainHandItemStack, world, oldBlock, blockPos, playerEntity);
if (handled >= 255) { if (handled >= 255) {
// reward for using rangeable tool very successful // reward for using rangeable tool very successful
world.spawnEntity( world.spawnEntity(
@ -65,32 +63,30 @@ public class EventBlockBreak {
BlockPos pos, PlayerEntity player) { BlockPos pos, PlayerEntity player) {
List<Block> validBlocks = tool.getBlockList(currentBlock); List<Block> validBlocks = tool.getBlockList(currentBlock);
HarvestRange range = tool.getRange(itemStack); HarvestRange range = tool.getRange(itemStack);
List<String> visitedBlocks = new ArrayList<>();
LOGGER.debug("current tool: {}", tool); if (tool instanceof ToolSpeedpowderAxe) {
return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS,
if (QuickieItems.SPEEDPOWDERAXE.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS,
player, true); player, true);
} else if (QuickieItems.SPEEDPOWDERPICKAXE.getItem().equals(tool)) { } else if (ModItems.TOOL_SPEEDPOWDERPICKAXE.getName().equals(tool.getName())) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL, return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false); player, false);
} else if (QuickieItems.SPEEDPOWDERSHOVEL.getItem().equals(tool)) { } else if (ModItems.TOOL_SPEEDPOWDERSHOVEL.getName().equals(tool.getName())) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL, return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false); player, false);
} else if (QuickieItems.SPEEDPOWDERHOE.getItem().equals(tool)) { } else if (ModItems.TOOL_SPEEDPOWDERHOE.getName().equals(tool.getName())) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL, return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false); player, false);
} else if (QuickieItems.QUICKIEPOWDERAXE.getItem().equals(tool)) { } else if (ModItems.TOOL_QUICKIEPOWDERAXE.getName().equals(tool.getName())) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS, return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS,
player, true); player, true);
} else if (QuickieItems.QUICKIEPOWDERPICKAXE.getItem().equals(tool)) { } else if (ModItems.TOOL_QUICKIEPOWDERPICKAXE.getName().equals(tool.getName())) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL, return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false); player, false);
} else if (QuickieItems.QUICKIEPOWDERSHOVEL.getItem().equals(tool)) { } else if (ModItems.TOOL_QUICKIEPOWDERSHOVEL.getName().equals(tool.getName())) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL, return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false); player, false);
} else if (QuickieItems.QUICKIEPOWDERHOE.getItem().equals(tool)) { } else if (ModItems.TOOL_QUICKIEPOWDERHOE.getName().equals(tool.getName())) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL, return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false); player, false);
} else { } else {
return 0; return 0;
@ -113,6 +109,7 @@ public class EventBlockBreak {
private int breakBlockRecursive(List<String> visitedBlocks, World world, List<Block> validBlocks, BlockPos pos, private int breakBlockRecursive(List<String> visitedBlocks, World world, List<Block> validBlocks, BlockPos pos,
ToolRangeable tool, HarvestRange range, BlockBreakDirection blockBreakDirection, PlayerEntity player, ToolRangeable tool, HarvestRange range, BlockBreakDirection blockBreakDirection, PlayerEntity player,
boolean breakLeaves) { boolean breakLeaves) {
boolean ignoreSpawn = visitedBlocks.size() < 1; // with this, the already broken block can be omitted to spawn
if (visitedBlocks.contains(pos.toString())) { if (visitedBlocks.contains(pos.toString())) {
return 0; return 0;
} else if (validBlocks == null) { } else if (validBlocks == null) {
@ -125,7 +122,9 @@ public class EventBlockBreak {
if (tool.canBreakNeighbors(blockState)) { if (tool.canBreakNeighbors(blockState)) {
Block currentBlock = blockState.getBlock(); Block currentBlock = blockState.getBlock();
if (validBlocks.contains(currentBlock)) { if (validBlocks.contains(currentBlock)) {
Block.dropStacks(blockState, world, pos); // includes xorbs if (!ignoreSpawn) {
Block.dropStacks(blockState, world, pos); // includes xorbs
}
affected += 1; affected += 1;
world.setBlockState(pos, Blocks.AIR.getDefaultState()); world.setBlockState(pos, Blocks.AIR.getDefaultState());
if (range == null || range.getxRange() > 1 || range.getyRange() > 1 || range.getzRange() > 1) { if (range == null || range.getxRange() > 1 || range.getyRange() > 1 || range.getzRange() > 1) {

View File

@ -0,0 +1,66 @@
package de.jottyfan.quickiemod.feature;
import de.jottyfan.quickiemod.Quickiemod;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
import net.fabricmc.fabric.api.biome.v1.ModificationPhase;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.PlacedFeature;
/**
*
* @author jotty
*
*/
public class ModFeatures {
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_ORESULFUR = genCf("oresulphor");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_OREDEEPSLATESULFUR = genCf("oredepslatesulphor");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_ORESALPETER = genCf("oresalpeter");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_ORENETHERSULPHOR = genCf("orenethersulphore");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_BLOCKSULPHOR = genCf("blocksulphor");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_DIRTSALPETER = genCf("dirtsalpeter");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_SANDSALPETER = genCf("sandsalpeter");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_ORESANDSALPETER = genCf("oresandsalpeter");
public static final RegistryKey<PlacedFeature> PF_ORESULPHOR = genPf("oresulphor");
public static final RegistryKey<PlacedFeature> PF_OREDEEPSLATESULPHOR = genPf("oredeepslatesulphor");
public static final RegistryKey<PlacedFeature> PF_ORESALPETER = genPf("oresalpeter");
public static final RegistryKey<PlacedFeature> PF_ORENETHERSULPHOR = genPf("orenethersulphor");
public static final RegistryKey<PlacedFeature> PF_BLOCKSULPHOR = genPf("blocksulphor");
public static final RegistryKey<PlacedFeature> PF_DIRTSALPETER = genPf("dirtsalpeter");
public static final RegistryKey<PlacedFeature> PF_SANDSALPETER = genPf("sandsalpeter");
public static final RegistryKey<PlacedFeature> PF_ORESANDSALPETER = genPf("oresandsalpeter");
private static final RegistryKey<ConfiguredFeature<?, ?>> genCf(String name) {
return RegistryKey.of(RegistryKeys.CONFIGURED_FEATURE, Identifier.of(Quickiemod.MOD_ID, name));
}
private static final RegistryKey<PlacedFeature> genPf(String name) {
return RegistryKey.of(RegistryKeys.PLACED_FEATURE, Identifier.of(Quickiemod.MOD_ID, name));
}
public static final void registerFeatures() {
// Overworld features
BiomeModifications.create(Identifier.of(Quickiemod.MOD_ID, "features")).add(ModificationPhase.ADDITIONS,
BiomeSelectors.foundInOverworld(), (bsc, bmc) -> {
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESULPHOR);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESALPETER);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_DIRTSALPETER);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_SANDSALPETER);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESANDSALPETER);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_OREDEEPSLATESULPHOR);
});
// Nether features
BiomeModifications.create(Identifier.of(Quickiemod.MOD_ID, "nether_features")).add(ModificationPhase.ADDITIONS,
BiomeSelectors.foundInTheNether(), (bsc, bmc) -> {
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORENETHERSULPHOR);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_BLOCKSULPHOR);
});
}
}

View File

@ -0,0 +1,77 @@
package de.jottyfan.quickiemod.identifier;
import de.jottyfan.quickiemod.Quickiemod;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class ModIdentifiers {
public static final Identifier ITEM_STUB = Identifier.of(Quickiemod.MOD_ID, "stub");
public static final Identifier ITEM_SPEEDPOWDER = Identifier.of(Quickiemod.MOD_ID, "speedpowder");
public static final Identifier ITEM_QUICKIEPOWDER = Identifier.of(Quickiemod.MOD_ID, "quickiepowder");
public static final Identifier ITEM_SALPETER = Identifier.of(Quickiemod.MOD_ID, "salpeter");
public static final Identifier ITEM_SULFOR = Identifier.of(Quickiemod.MOD_ID, "sulphor");
public static final Identifier ITEM_OXIDIZEDCOPPERPOWDER = Identifier.of(Quickiemod.MOD_ID, "oxidizedcopperpowder");
public static final Identifier ITEM_SPEEDINGOT = Identifier.of(Quickiemod.MOD_ID, "speedingot");
public static final Identifier ITEM_QUICKIEINGOT = Identifier.of(Quickiemod.MOD_ID, "quickieingot");
public static final Identifier ITEM_CARROTSTACK = Identifier.of(Quickiemod.MOD_ID, "carrotstack");
public static final Identifier ITEM_ROTTENFLESHSTRIPES = Identifier.of(Quickiemod.MOD_ID, "rotten_flesh_stripes");
public static final Identifier ITEM_COTTON = Identifier.of(Quickiemod.MOD_ID, "cotton");
public static final Identifier ITEM_COTTONPLANT = Identifier.of(Quickiemod.MOD_ID, "cottonplant");
public static final Identifier ITEM_COTTONSEED = Identifier.of(Quickiemod.MOD_ID, "cottonseed");
public static final Identifier ITEM_CANOLA = Identifier.of(Quickiemod.MOD_ID, "canola");
public static final Identifier ITEM_CANOLAPLANT = Identifier.of(Quickiemod.MOD_ID, "canolaplant");
public static final Identifier ITEM_CANOLASEED = Identifier.of(Quickiemod.MOD_ID, "canolaseed");
public static final Identifier ITEM_CANOLABOTTLE = Identifier.of(Quickiemod.MOD_ID, "canolabottle");
public static final Identifier ITEM_CANOLABOTTLESTACK = Identifier.of(Quickiemod.MOD_ID, "canolabottlestack");
public static final Identifier TOOL_SPEEDPOWDERAXE = Identifier.of(Quickiemod.MOD_ID, "speedpowderaxe");
public static final Identifier TOOL_SPEEDPOWDERHOE = Identifier.of(Quickiemod.MOD_ID, "speedpowderhoe");
public static final Identifier TOOL_SPEEDPOWDERPICKAXE = Identifier.of(Quickiemod.MOD_ID, "speedpowderpickaxe");
public static final Identifier TOOL_SPEEDPOWDERSHEARS = Identifier.of(Quickiemod.MOD_ID, "speedpowdershears");
public static final Identifier TOOL_SPEEDPOWDERSHOVEL = Identifier.of(Quickiemod.MOD_ID, "speedpowdershovel");
public static final Identifier TOOL_SPEEDPOWDERWATERHOE = Identifier.of(Quickiemod.MOD_ID, "speedpowderwaterhoe");
public static final Identifier TOOL_QUICKIEPOWDERAXE = Identifier.of(Quickiemod.MOD_ID, "quickiepowderaxe");
public static final Identifier TOOL_QUICKIEPOWDERHOE = Identifier.of(Quickiemod.MOD_ID, "quickiepowderhoe");
public static final Identifier TOOL_QUICKIEPOWDERPICKAXE = Identifier.of(Quickiemod.MOD_ID, "quickiepowderpickaxe");
public static final Identifier TOOL_QUICKIEPOWDERSHOVEL = Identifier.of(Quickiemod.MOD_ID, "quickiepowdershovel");
public static final Identifier TOOL_QUICKIEPOWDERWATERHOE = Identifier.of(Quickiemod.MOD_ID, "quickiepowderwaterhoe");
public static final Identifier BLOCK_QUICKIEPOWDER = Identifier.of(Quickiemod.MOD_ID, "blockquickiepowder");
public static final Identifier BLOCK_SPEEDPOWDER = Identifier.of(Quickiemod.MOD_ID, "blockspeedpowder");
public static final Identifier BLOCK_SALPETER = Identifier.of(Quickiemod.MOD_ID, "blocksalpeter");
public static final Identifier BLOCK_SULFOR = Identifier.of(Quickiemod.MOD_ID, "blocksulphor");
public static final Identifier BLOCK_MONSTERHOARDER = Identifier.of(Quickiemod.MOD_ID, "monsterhoarder");
public static final Identifier BLOCK_LAVAHOARDER = Identifier.of(Quickiemod.MOD_ID, "lavahoarder");
public static final Identifier BLOCK_EMPTYLAVAHOARDER = Identifier.of(Quickiemod.MOD_ID, "emptylavahoarder");
public static final Identifier BLOCK_ITEMHOARDER = Identifier.of(Quickiemod.MOD_ID, "itemhoarder");
public static final Identifier BLOCK_DIRTSALPETER = Identifier.of(Quickiemod.MOD_ID, "dirtsalpeter");
public static final Identifier BLOCK_OREDEEPSLATESULFOR = Identifier.of(Quickiemod.MOD_ID, "oredeepslatesulphor");
public static final Identifier BLOCK_ORENETHERSULFOR = Identifier.of(Quickiemod.MOD_ID, "orenethersulphor");
public static final Identifier BLOCK_ORESALPETER = Identifier.of(Quickiemod.MOD_ID, "oresalpeter");
public static final Identifier BLOCK_ORESANDSALPETER = Identifier.of(Quickiemod.MOD_ID, "oresandsalpeter");
public static final Identifier BLOCK_ORESULFOR = Identifier.of(Quickiemod.MOD_ID, "oresulphor");
public static final Identifier BLOCK_SANDSALPETER = Identifier.of(Quickiemod.MOD_ID, "sandsalpeter");
public static final Identifier BLOCK_KELPSTACK = Identifier.of(Quickiemod.MOD_ID, "kelpstack");
public static final Identifier BLOCK_COTTONPLANT = Identifier.of(Quickiemod.MOD_ID, "blockcottonplant");
public static final Identifier BLOCK_CANOLAPLANT = Identifier.of(Quickiemod.MOD_ID, "blockcanolaplant");
public static final Identifier BLOCK_DRILLDOWN = Identifier.of(Quickiemod.MOD_ID, "drill");
public static final Identifier BLOCK_DRILLEAST = Identifier.of(Quickiemod.MOD_ID, "drilleast");
public static final Identifier BLOCK_DRILLSOUTH = Identifier.of(Quickiemod.MOD_ID, "drillsouth");
public static final Identifier BLOCK_DRILLWEST = Identifier.of(Quickiemod.MOD_ID, "drillwest");
public static final Identifier BLOCK_DRILLNORTH = Identifier.of(Quickiemod.MOD_ID, "drillnorth");
public static final Identifier BLOCK_STACKERDOWN = Identifier.of(Quickiemod.MOD_ID, "blockstackerdown");
public static final Identifier BLOCK_STACKEREAST = Identifier.of(Quickiemod.MOD_ID, "blockstackereast");
public static final Identifier BLOCK_STACKERSOUTH = Identifier.of(Quickiemod.MOD_ID, "blockstackersouth");
public static final Identifier BLOCK_STACKERWEST = Identifier.of(Quickiemod.MOD_ID, "blockstackerwest");
public static final Identifier BLOCK_STACKERNORTH = Identifier.of(Quickiemod.MOD_ID, "blockstackernorth");
public static final Identifier BLOCK_STACKERUP = Identifier.of(Quickiemod.MOD_ID, "blockstackerup");
public static final Identifier BLOCKENTITY_ITEMHOARDER = Identifier.of(Quickiemod.MOD_ID, "itemhoarderblockentity");
public static final Identifier BLOCKENTITY_BLOCKSTACKER = Identifier.of(Quickiemod.MOD_ID, "blockstackerblockentity");
public static final Identifier BLOCKENTITY_DRILL = Identifier.of(Quickiemod.MOD_ID, "drillblockentity");
public static final Identifier BLOCKSTACKERUP = Identifier.of(Quickiemod.MOD_ID, "blockstackerblockentity");
}

View File

@ -1,22 +0,0 @@
package de.jottyfan.quickiemod.init;
import de.jottyfan.quickiemod.QuickieMod;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class BlockEntityIdentity {
public static final Identifier ITEMHOARDER = Identifier.of(QuickieMod.MODID, "itemhoarderblockentity");
public static final Identifier BLOCKSPREADER = Identifier.of(QuickieMod.MODID, "blockspreaderblockentity");
public static final Identifier BLOCKSTACKERUP = Identifier.of(QuickieMod.MODID, "blockstackerblockentity");
public static final Identifier MONSTERHOARDER = Identifier.of(QuickieMod.MODID, "monsterhoarderblockentity");
public static final Identifier EMPTYLAVALHOARDER = Identifier.of(QuickieMod.MODID, "emptylavahoarderblockentity");
public static final Identifier DRILL_DOWN = Identifier.of(QuickieMod.MODID, "drillblockdownblockentity");
public static final Identifier DRILL_EAST = Identifier.of(QuickieMod.MODID, "drillblockeastblockentity");
public static final Identifier DRILL_SOUTH = Identifier.of(QuickieMod.MODID, "drillblocksouthblockentity");
public static final Identifier DRILL_WEST = Identifier.of(QuickieMod.MODID, "drillblockwestblockentity");
public static final Identifier DRILL_NORTH = Identifier.of(QuickieMod.MODID, "drillblocknorthblockentity");
}

View File

@ -1,66 +0,0 @@
package de.jottyfan.quickiemod.init;
import java.util.function.BiConsumer;
import de.jottyfan.quickiemod.QuickieMod;
import net.fabricmc.fabric.api.biome.v1.BiomeModificationContext;
import net.fabricmc.fabric.api.biome.v1.BiomeSelectionContext;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.PlacedFeature;
/**
*
* @author jotty
*
*/
public class FeaturesManager {
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_ORESULFUR = genCf("oresulphor");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_OREDEEPSLATESULFUR = genCf("oredepslatesulphor");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_ORESALPETER = genCf("oresalpeter");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_ORENETHERSULPHOR = genCf("orenethersulphore");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_BLOCKSULPHOR = genCf("blocksulphor");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_DIRTSALPETER = genCf("dirtsalpeter");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_SANDSALPETER = genCf("sandsalpeter");
public static final RegistryKey<ConfiguredFeature<?, ?>> CF_ORESANDSALPETER = genCf("oresandsalpeter");
public static final RegistryKey<PlacedFeature> PF_ORESULPHOR = genPf("oresulphor");
public static final RegistryKey<PlacedFeature> PF_OREDEEPSLATESULPHOR = genPf("oredeepslatesulphor");
public static final RegistryKey<PlacedFeature> PF_ORESALPETER = genPf("oresalpeter");
public static final RegistryKey<PlacedFeature> PF_ORENETHERSULPHOR = genPf("orenethersulphor");
public static final RegistryKey<PlacedFeature> PF_BLOCKSULPHOR = genPf("blocksulphor");
public static final RegistryKey<PlacedFeature> PF_DIRTSALPETER = genPf("dirtsalpeter");
public static final RegistryKey<PlacedFeature> PF_SANDSALPETER = genPf("sandsalpeter");
public static final RegistryKey<PlacedFeature> PF_ORESANDSALPETER = genPf("oresandsalpeter");
private static final RegistryKey<ConfiguredFeature<?, ?>> genCf(String name) {
return RegistryKey.of(RegistryKeys.CONFIGURED_FEATURE, Identifier.of(QuickieMod.MODID, name));
}
private static final RegistryKey<PlacedFeature> genPf(String name) {
return RegistryKey.of(RegistryKeys.PLACED_FEATURE, Identifier.of(QuickieMod.MODID, name));
}
protected static final BiConsumer<BiomeSelectionContext, BiomeModificationContext> overworldOres() {
return (bsc, bmc) -> {
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESULPHOR);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESALPETER);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_DIRTSALPETER);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_SANDSALPETER);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESANDSALPETER);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_OREDEEPSLATESULPHOR);
};
}
protected static final BiConsumer<BiomeSelectionContext, BiomeModificationContext> netherOres() {
return (bsc, bmc) -> {
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORENETHERSULPHOR);
bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_BLOCKSULPHOR);
};
}
}

View File

@ -1,102 +0,0 @@
package de.jottyfan.quickiemod.init;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.jottyfan.quickiemod.QuickieMod;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blocks.QuickieBlocks;
import de.jottyfan.quickiemod.event.BreakBlockCallback;
import de.jottyfan.quickiemod.event.EventBlockBreak;
import de.jottyfan.quickiemod.items.QuickieItems;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
import net.fabricmc.fabric.api.biome.v1.ModificationPhase;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.registry.FuelRegistry;
import net.minecraft.block.ComposterBlock;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item.Settings;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class RegistryManager {
private static final Logger LOGGER = LoggerFactory.getLogger(QuickieMod.MODID);
public static final void registerItemGroup() {
Registry.register(Registries.ITEM_GROUP, RegistryKey.of(RegistryKeys.ITEM_GROUP, Identifier.of(QuickieMod.MODID, "itemgroups")),
FabricItemGroup.builder().icon(() -> new ItemStack(QuickieItems.ROTTEN_FLESH_STRIPES.getItem())).displayName(Text.literal(QuickieMod.MODID))
.entries((enabledFeatures, stacks) -> {
for (QuickieItems i : QuickieItems.values()) {
stacks.add(new ItemStack(i.getItem()));
}
for (QuickieBlocks b : QuickieBlocks.values()) {
if (b.getAdd2BlockPanel()) {
stacks.add(new ItemStack(b.getBlock()));
}
}
}).build());
}
public static final void registerItems() {
LOGGER.info("registering items");
for (QuickieItems i : QuickieItems.values()) {
Registry.register(Registries.ITEM, Identifier.of(QuickieMod.MODID, i.getName()), i.getItem());
}
ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.put(QuickieItems.COTTONSEED.getItem(), 0.5f);
ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.put(QuickieItems.COTTON.getItem(), 0.75f);
ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.put(QuickieItems.CANOLASEED.getItem(), 0.5f);
ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.put(QuickieItems.CANOLA.getItem(), 0.75f);
FuelRegistry.INSTANCE.add(QuickieItems.SULPHOR.getItem(), 200);
FuelRegistry.INSTANCE.add(QuickieBlocks.BLOCKSULPHOR.getBlock(), 2000);
}
public static final void registerBlocks() {
LOGGER.info("registering blocks");
for (QuickieBlocks b : QuickieBlocks.values()) {
Registry.register(Registries.BLOCK, Identifier.of(QuickieMod.MODID, b.getName()), b.getBlock());
Registry.register(Registries.ITEM, Identifier.of(QuickieMod.MODID, b.getName()), new BlockItem(b.getBlock(), new Settings()));
}
}
public static final void registerFeatures() {
// Overworld features
BiomeModifications.create(Identifier.of(QuickieMod.MODID, "features")).add(ModificationPhase.ADDITIONS, BiomeSelectors.foundInOverworld(),
FeaturesManager.overworldOres());
// Nether features
BiomeModifications.create(Identifier.of(QuickieMod.MODID, "nether_features")).add(ModificationPhase.ADDITIONS, BiomeSelectors.foundInTheNether(),
FeaturesManager.netherOres());
}
public static final void registerEvents() {
LOGGER.info("registering events");
BreakBlockCallback.EVENT.register((world, blockPos, blockState, playerEntity) -> {
new EventBlockBreak().doBreakBlock(world, blockPos, blockState, playerEntity);
return ActionResult.SUCCESS;
});
}
public static final void registerBlockEntityTypes() {
try {
Class.forName(BlockEntityTypes.class.getName());
LOGGER.info("registering block entity types");
} catch (ClassNotFoundException e) {
LOGGER.error("class BlockEntityType not loaded", e);
}
}
public static final void registerScreenHandlerTypes() {
}
}

View File

@ -0,0 +1,20 @@
package de.jottyfan.quickiemod.item;
import net.minecraft.item.Item;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public abstract class AbstractIdentifiedItem extends Item {
public AbstractIdentifiedItem(Identifier identifier, Integer maxCount) {
super(new Item.Settings().maxCount(maxCount).useItemPrefixedTranslationKey()
.registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)));
}
}

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.io.Serializable; import java.io.Serializable;
@ -34,6 +34,15 @@ public class HarvestRange implements Serializable {
this.zRange = zRange; this.zRange = zRange;
} }
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append(xRange).append(":");
buf.append(yRange).append(":");
buf.append(zRange).append(":");
return buf.toString();
}
/** /**
* add i to x, y and z and return the resulting class as a new one * add i to x, y and z and return the resulting class as a new one
* *

View File

@ -0,0 +1,16 @@
package de.jottyfan.quickiemod.item;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class Item64Stack extends AbstractIdentifiedItem {
public Item64Stack(Identifier identifier) {
super(identifier, 64);
}
}

View File

@ -0,0 +1,45 @@
package de.jottyfan.quickiemod.item;
import de.jottyfan.quickiemod.Quickiemod;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.registry.Registries;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class ItemSeed extends Item64Stack {
private Identifier plant;
public ItemSeed(Identifier identifier, Identifier plant) {
super(identifier);
this.plant = plant;
}
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
BlockPos pos = context.getBlockPos();
World world = context.getWorld();
if (this.asItem().equals(context.getStack().getItem())) {
BlockState state = world.getBlockState(pos);
if (Registries.BLOCK.containsId(plant)) {
if (Blocks.FARMLAND.equals(state.getBlock()) && world.getBlockState(pos.up()).isAir()) {
world.setBlockState(pos.up(), Registries.BLOCK.get(plant).getDefaultState());
context.getStack().decrement(1);
} else {
Quickiemod.LOGGER.error("could not find block {} in Registries...", plant.toShortTranslationKey());
}
}
}
return super.useOnBlock(context);
}
}

View File

@ -0,0 +1,117 @@
package de.jottyfan.quickiemod.item;
import java.util.ArrayList;
import java.util.List;
import de.jottyfan.quickiemod.Quickiemod;
import de.jottyfan.quickiemod.identifier.ModIdentifiers;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class ModItems {
public static final Item ITEM_STUB = registerItem(ModIdentifiers.ITEM_STUB,
new Item64Stack(ModIdentifiers.ITEM_STUB));
public static final Item ITEM_SPEEDPOWDER = registerItem(ModIdentifiers.ITEM_SPEEDPOWDER,
new Item64Stack(ModIdentifiers.ITEM_SPEEDPOWDER));
public static final Item ITEM_QUICKIEPOWDER = registerItem(ModIdentifiers.ITEM_QUICKIEPOWDER,
new Item64Stack(ModIdentifiers.ITEM_QUICKIEPOWDER));
public static final Item ITEM_SALPETER = registerItem(ModIdentifiers.ITEM_SALPETER,
new Item64Stack(ModIdentifiers.ITEM_SALPETER));
public static final Item ITEM_SULFOR = registerItem(ModIdentifiers.ITEM_SULFOR,
new Item64Stack(ModIdentifiers.ITEM_SULFOR));
public static final Item ITEM_OXIDIZEDCOPPERPOWDER = registerItem(ModIdentifiers.ITEM_OXIDIZEDCOPPERPOWDER,
new Item64Stack(ModIdentifiers.ITEM_OXIDIZEDCOPPERPOWDER));
public static final Item ITEM_SPEEDINGOT = registerItem(ModIdentifiers.ITEM_SPEEDINGOT,
new Item64Stack(ModIdentifiers.ITEM_SPEEDINGOT));
public static final Item ITEM_QUICKIEINGOT = registerItem(ModIdentifiers.ITEM_QUICKIEINGOT,
new Item64Stack(ModIdentifiers.ITEM_QUICKIEINGOT));
public static final Item ITEM_CARROTSTACK = registerItem(ModIdentifiers.ITEM_CARROTSTACK,
new Item64Stack(ModIdentifiers.ITEM_CARROTSTACK));
public static final Item ITEM_ROTTENFLESHSTRIPES = registerItem(ModIdentifiers.ITEM_ROTTENFLESHSTRIPES,
new Item64Stack(ModIdentifiers.ITEM_ROTTENFLESHSTRIPES));
public static final Item ITEM_COTTON = registerItem(ModIdentifiers.ITEM_COTTON,
new Item64Stack(ModIdentifiers.ITEM_COTTON));
public static final Item ITEM_COTTONPLANT = registerItem(ModIdentifiers.ITEM_COTTONPLANT,
new Item64Stack(ModIdentifiers.BLOCK_COTTONPLANT));
public static final Item ITEM_COTTONSEED = registerItem(ModIdentifiers.ITEM_COTTONSEED,
new ItemSeed(ModIdentifiers.ITEM_COTTONSEED, ModIdentifiers.BLOCK_COTTONPLANT));
public static final Item ITEM_CANOLA = registerItem(ModIdentifiers.ITEM_CANOLA,
new Item64Stack(ModIdentifiers.ITEM_CANOLA));
public static final Item ITEM_CANOLAPLANT = registerItem(ModIdentifiers.ITEM_CANOLAPLANT,
new Item64Stack(ModIdentifiers.BLOCK_CANOLAPLANT));
public static final Item ITEM_CANOLASEED = registerItem(ModIdentifiers.ITEM_CANOLASEED,
new ItemSeed(ModIdentifiers.ITEM_CANOLASEED, ModIdentifiers.BLOCK_CANOLAPLANT));
public static final Item ITEM_CANOLABOTTLE = registerItem(ModIdentifiers.ITEM_CANOLABOTTLE,
new Item64Stack(ModIdentifiers.ITEM_CANOLABOTTLE));
public static final Item ITEM_CANOLABOTTLESTACK = registerItem(ModIdentifiers.ITEM_CANOLABOTTLESTACK,
new Item64Stack(ModIdentifiers.ITEM_CANOLABOTTLESTACK));
public static final Item TOOL_SPEEDPOWDERAXE = registerItem(ModIdentifiers.TOOL_SPEEDPOWDERAXE,
new ToolSpeedpowderAxe(ModIdentifiers.TOOL_SPEEDPOWDERAXE));
public static final Item TOOL_SPEEDPOWDERHOE = registerItem(ModIdentifiers.TOOL_SPEEDPOWDERHOE,
new ToolSpeedpowderHoe(ModIdentifiers.TOOL_SPEEDPOWDERHOE));
public static final Item TOOL_SPEEDPOWDERPICKAXE = registerItem(ModIdentifiers.TOOL_SPEEDPOWDERPICKAXE,
new ToolSpeedpowderPickaxe(ModIdentifiers.TOOL_SPEEDPOWDERPICKAXE));
public static final Item TOOL_SPEEDPOWDERSHEARS = registerItem(ModIdentifiers.TOOL_SPEEDPOWDERSHEARS,
new ToolSpeedpowderShears(ModIdentifiers.TOOL_SPEEDPOWDERSHEARS));
public static final Item TOOL_SPEEDPOWDERSHOVEL = registerItem(ModIdentifiers.TOOL_SPEEDPOWDERSHOVEL,
new ToolSpeedpowderShovel(ModIdentifiers.TOOL_SPEEDPOWDERSHOVEL));
public static final Item TOOL_SPEEDPOWDERWATERHOE = registerItem(ModIdentifiers.TOOL_SPEEDPOWDERWATERHOE,
new ToolSpeedpowderWaterHoe(ModIdentifiers.TOOL_SPEEDPOWDERWATERHOE));
public static final Item TOOL_QUICKIEPOWDERAXE = registerItem(ModIdentifiers.TOOL_QUICKIEPOWDERAXE,
new ToolQuickiepowderAxe(ModIdentifiers.TOOL_QUICKIEPOWDERAXE));
public static final Item TOOL_QUICKIEPOWDERHOE = registerItem(ModIdentifiers.TOOL_QUICKIEPOWDERHOE,
new ToolQuickiepowderHoe(ModIdentifiers.TOOL_QUICKIEPOWDERHOE));
public static final Item TOOL_QUICKIEPOWDERPICKAXE = registerItem(ModIdentifiers.TOOL_QUICKIEPOWDERPICKAXE,
new ToolQuickiepowderPickaxe(ModIdentifiers.TOOL_QUICKIEPOWDERPICKAXE));
public static final Item TOOL_QUICKIEPOWDERSHOVEL = registerItem(ModIdentifiers.TOOL_QUICKIEPOWDERSHOVEL,
new ToolQuickiepowderShovel(ModIdentifiers.TOOL_QUICKIEPOWDERSHOVEL));
public static final Item TOOL_QUICKIEPOWDERWATERHOE = registerItem(ModIdentifiers.TOOL_QUICKIEPOWDERWATERHOE,
new ToolQuickiepowderWaterHoe(ModIdentifiers.TOOL_QUICKIEPOWDERWATERHOE));
private static final Item registerItem(Identifier identifier, Item item) {
return Registry.register(Registries.ITEM, identifier, item);
}
public static final List<Item> registerModItems() {
Quickiemod.LOGGER.debug(String.format("registering item %s", Quickiemod.MOD_ID));
List<Item> items = new ArrayList<>();
items.add(ITEM_STUB);
items.add(ITEM_SPEEDPOWDER);
items.add(ITEM_QUICKIEPOWDER);
items.add(ITEM_SALPETER);
items.add(ITEM_SULFOR);
items.add(ITEM_OXIDIZEDCOPPERPOWDER);
items.add(ITEM_SPEEDINGOT);
items.add(ITEM_QUICKIEINGOT);
items.add(ITEM_CARROTSTACK);
items.add(ITEM_ROTTENFLESHSTRIPES);
items.add(ITEM_COTTON);
items.add(ITEM_COTTONSEED);
items.add(ITEM_CANOLA);
items.add(ITEM_CANOLASEED);
items.add(ITEM_CANOLABOTTLE);
items.add(ITEM_CANOLABOTTLESTACK);
items.add(TOOL_SPEEDPOWDERPICKAXE);
items.add(TOOL_SPEEDPOWDERAXE);
items.add(TOOL_SPEEDPOWDERSHOVEL);
items.add(TOOL_SPEEDPOWDERHOE);
items.add(TOOL_SPEEDPOWDERWATERHOE);
items.add(TOOL_SPEEDPOWDERSHEARS);
items.add(TOOL_QUICKIEPOWDERPICKAXE);
items.add(TOOL_QUICKIEPOWDERAXE);
items.add(TOOL_QUICKIEPOWDERSHOVEL);
items.add(TOOL_QUICKIEPOWDERHOE);
items.add(TOOL_QUICKIEPOWDERWATERHOE);
return items;
}
}

View File

@ -1,21 +0,0 @@
package de.jottyfan.quickiemod.item;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class ModdedItemUsageContext extends ItemUsageContext {
public ModdedItemUsageContext(World world, PlayerEntity player, Hand hand, ItemStack stack, BlockHitResult hit) {
super(world, player, hand, stack, hit);
}
}

View File

@ -0,0 +1,30 @@
package de.jottyfan.quickiemod.item;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class ToolQuickiepowderAxe extends ToolRangeableAxe {
private final static ToolMaterial MATERIAL = new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 2400, 7f, 1f, 15, ItemTags.DIAMOND_TOOL_MATERIALS);
public ToolQuickiepowderAxe(Identifier identifier) {
super(MATERIAL, 7F, -3.1F, new Item.Settings().useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)));
}
@Override
public HarvestRange getRange(ItemStack stack) {
// TODO: get the range from the stack
return new HarvestRange(64, 128, 64); // trees bigger than that are too heavy for one small axe...
}
}

View File

@ -0,0 +1,24 @@
package de.jottyfan.quickiemod.item;
import net.minecraft.item.Item;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class ToolQuickiepowderHoe extends ToolRangeableHoe {
public static final Integer DEFAULT_PLOW_RANGE = 4;
private final static ToolMaterial MATERIAL = new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 2400, 7f, 1f, 15, ItemTags.DIAMOND_TOOL_MATERIALS);
public ToolQuickiepowderHoe(Identifier identifier) {
super(MATERIAL, 7F, -3.1f, new Item.Settings().useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)), new HarvestRange(DEFAULT_PLOW_RANGE));
}
}

View File

@ -1,15 +1,20 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.PickaxeItem; import net.minecraft.item.PickaxeItem;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.util.Identifier;
/** /**
* *
@ -19,10 +24,15 @@ import net.minecraft.item.PickaxeItem;
public class ToolQuickiepowderPickaxe extends PickaxeItem implements ToolRangeable { public class ToolQuickiepowderPickaxe extends PickaxeItem implements ToolRangeable {
public static final int[] DEFAULT_HARVEST_RANGE = new int[] { 6, 6, 6 }; public static final int[] DEFAULT_HARVEST_RANGE = new int[] { 6, 6, 6 };
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 2400, 15, 1f, QuickieItems.SPEEDINGOT.getItem()); private final static ToolMaterial MATERIAL = new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 2400, 7f, 1f, 15, ItemTags.DIAMOND_TOOL_MATERIALS);
public ToolQuickiepowderPickaxe() { public ToolQuickiepowderPickaxe(Identifier identifier) {
super(MATERIAL, new Item.Settings().attributeModifiers(PickaxeItem.createAttributeModifiers(MATERIAL, 7F, -3.1F))); super(MATERIAL, 7F, -3.1F, new Item.Settings().useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)));
}
@Override
public boolean isCorrectForDrops(ItemStack stack, BlockState state) {
return super.isCorrectForDrops(stack, state);
} }
@Override @Override

View File

@ -1,17 +1,22 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext; import net.minecraft.item.ItemUsageContext;
import net.minecraft.item.ShovelItem; import net.minecraft.item.ShovelItem;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -23,11 +28,11 @@ import net.minecraft.world.World;
*/ */
public class ToolQuickiepowderShovel extends ShovelItem implements ToolRangeable { public class ToolQuickiepowderShovel extends ShovelItem implements ToolRangeable {
public static final Integer DEFAULT_HARVEST_RANGE = 6; public static final Integer DEFAULT_HARVEST_RANGE = 6;
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 2400, 15, 1f, QuickieItems.SPEEDINGOT.getItem()); private final static ToolMaterial MATERIAL = new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 2400, 7f, 1f, 15, ItemTags.DIAMOND_TOOL_MATERIALS);
public HarvestRange range; public HarvestRange range;
public ToolQuickiepowderShovel() { public ToolQuickiepowderShovel(Identifier identifier) {
super(MATERIAL, new Item.Settings().attributeModifiers(ShovelItem.createAttributeModifiers(MATERIAL, 7F, -3.1F))); super(MATERIAL, 7F, -3.1F, new Item.Settings().useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)));
this.range = new HarvestRange(DEFAULT_HARVEST_RANGE); this.range = new HarvestRange(DEFAULT_HARVEST_RANGE);
} }

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext; import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -17,6 +18,10 @@ import net.minecraft.world.World;
* *
*/ */
public class ToolQuickiepowderWaterHoe extends ToolQuickiepowderHoe { public class ToolQuickiepowderWaterHoe extends ToolQuickiepowderHoe {
public ToolQuickiepowderWaterHoe(Identifier identifier) {
super(identifier);
}
@Override @Override
public ActionResult useOnBlock(ItemUsageContext context) { public ActionResult useOnBlock(ItemUsageContext context) {
ActionResult res = super.useOnBlock(context); ActionResult res = super.useOnBlock(context);
@ -28,7 +33,7 @@ public class ToolQuickiepowderWaterHoe extends ToolQuickiepowderHoe {
Hand hand = context.getHand(); Hand hand = context.getHand();
PlayerEntity player = context.getPlayer(); PlayerEntity player = context.getPlayer();
ItemStack oldTool = player.getStackInHand(hand); ItemStack oldTool = player.getStackInHand(hand);
ItemStack newTool = new ItemStack(QuickieItems.QUICKIEPOWDERHOE.getItem()); ItemStack newTool = new ItemStack(ModItems.TOOL_QUICKIEPOWDERHOE);
newTool.setDamage(oldTool.getDamage()); newTool.setDamage(oldTool.getDamage());
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(oldBlockState.getBlock()))); world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(oldBlockState.getBlock())));
player.setStackInHand(hand, newTool); player.setStackInHand(hand, newTool);

View File

@ -1,10 +1,11 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.util.List; import java.util.List;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
/** /**
* *
@ -13,6 +14,13 @@ import net.minecraft.item.ItemStack;
*/ */
public interface ToolRangeable { public interface ToolRangeable {
/**
* dummy to have a getName method that comes with the item
*
* @return the name
*/
public Text getName();
/** /**
* @param stack the item stack that keeps the range * @param stack the item stack that keeps the range
* @return range of blocks to be harvested * @return range of blocks to be harvested

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.util.List; import java.util.List;
@ -20,8 +20,8 @@ import net.minecraft.registry.tag.BlockTags;
*/ */
public abstract class ToolRangeableAxe extends AxeItem implements ToolRangeable { public abstract class ToolRangeableAxe extends AxeItem implements ToolRangeable {
protected ToolRangeableAxe(ToolMaterial material, Item.Settings settings) { protected ToolRangeableAxe(ToolMaterial material, float attackDamage, float attackSpeed, Item.Settings settings) {
super(material, settings); super(material, attackDamage, attackSpeed, settings);
} }
@Override @Override
@ -53,7 +53,7 @@ public abstract class ToolRangeableAxe extends AxeItem implements ToolRangeable
@Override @Override
public boolean canBreakNeighbors(BlockState blockIn) { public boolean canBreakNeighbors(BlockState blockIn) {
return new ItemStack(this).isSuitableFor(blockIn) || isLeavesBlock(blockIn) || blockIn.isIn(BlockTags.LOGS); return new ItemStack(this).isSuitableFor(blockIn) || isLeavesBlock(blockIn) || blockIn.isIn(BlockTags.LOGS);
} }
@Override @Override

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.util.List; import java.util.List;
@ -28,8 +28,8 @@ public abstract class ToolRangeableHoe extends HoeItem implements ToolRangeable
public HarvestRange range; public HarvestRange range;
public ToolRangeableHoe(ToolMaterial material, Settings settings, HarvestRange range) { public ToolRangeableHoe(ToolMaterial material, float attackDamage, float attackSpeed, Settings settings, HarvestRange range) {
super(material, settings); super(material, attackDamage, attackSpeed, settings);
this.range = range; this.range = range;
} }

View File

@ -0,0 +1,30 @@
package de.jottyfan.quickiemod.item;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class ToolSpeedpowderAxe extends ToolRangeableAxe {
private final static ToolMaterial MATERIAL = new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 800, 7f, 1f, 15, ItemTags.DIAMOND_TOOL_MATERIALS);
public ToolSpeedpowderAxe(Identifier identifier) {
super(MATERIAL, 7f, -3.1f, new Item.Settings().useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)));
}
@Override
public HarvestRange getRange(ItemStack stack) {
// TODO: get the range from the stack
return new HarvestRange(32, 64, 32);
}
}

View File

@ -0,0 +1,24 @@
package de.jottyfan.quickiemod.item;
import net.minecraft.item.Item;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class ToolSpeedpowderHoe extends ToolRangeableHoe {
public static final Integer DEFAULT_PLOW_RANGE = 2;
private final static ToolMaterial MATERIAL = new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 800, 7f, 1f, 15, ItemTags.DIAMOND_TOOL_MATERIALS);
public ToolSpeedpowderHoe(Identifier identifier) {
super(MATERIAL, 7F, -3.1F, new Item.Settings().useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)), new HarvestRange(DEFAULT_PLOW_RANGE));
}
}

View File

@ -1,16 +1,20 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.item.AxeItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.PickaxeItem; import net.minecraft.item.PickaxeItem;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.util.Identifier;
/** /**
* *
@ -20,10 +24,10 @@ import net.minecraft.item.PickaxeItem;
public class ToolSpeedpowderPickaxe extends PickaxeItem implements ToolRangeable { public class ToolSpeedpowderPickaxe extends PickaxeItem implements ToolRangeable {
public static final int[] DEFAULT_HARVEST_RANGE = new int[] { 3, 3, 3 }; public static final int[] DEFAULT_HARVEST_RANGE = new int[] { 3, 3, 3 };
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 800, 15, 1f, QuickieItems.SPEEDINGOT.getItem()); private final static ToolMaterial MATERIAL = new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 800, 7.0F, 1.0F, 15, ItemTags.DIAMOND_TOOL_MATERIALS);
public ToolSpeedpowderPickaxe() { public ToolSpeedpowderPickaxe(Identifier identifier) {
super(MATERIAL, new Item.Settings().attributeModifiers(AxeItem.createAttributeModifiers(MATERIAL, 7F, -3.1F))); super(MATERIAL, 7F, -3.1F, new Item.Settings().useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)));
} }
@Override @Override

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.util.Random; import java.util.Random;
@ -14,9 +14,12 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.item.ShearsItem; import net.minecraft.item.ShearsItem;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.DyeColor; import net.minecraft.util.DyeColor;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
/** /**
@ -26,8 +29,8 @@ import net.minecraft.util.math.Vec3d;
*/ */
public class ToolSpeedpowderShears extends ShearsItem { public class ToolSpeedpowderShears extends ShearsItem {
public ToolSpeedpowderShears() { public ToolSpeedpowderShears(Identifier identifier) {
super(new Item.Settings().component(DataComponentTypes.TOOL, ShearsItem.createToolComponent())); super(new Item.Settings().component(DataComponentTypes.TOOL, ShearsItem.createToolComponent()).useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)));
} }
@Override @Override

View File

@ -1,17 +1,22 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext; import net.minecraft.item.ItemUsageContext;
import net.minecraft.item.ShovelItem; import net.minecraft.item.ShovelItem;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.ItemTags;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -23,11 +28,11 @@ import net.minecraft.world.World;
*/ */
public class ToolSpeedpowderShovel extends ShovelItem implements ToolRangeable { public class ToolSpeedpowderShovel extends ShovelItem implements ToolRangeable {
public static final Integer DEFAULT_HARVEST_RANGE = 3; public static final Integer DEFAULT_HARVEST_RANGE = 3;
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 800, 15, 1f, QuickieItems.SPEEDINGOT.getItem()); private final static ToolMaterial MATERIAL = new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 800, 7f, 1f, 15, ItemTags.DIAMOND_TOOL_MATERIALS);
public HarvestRange range; public HarvestRange range;
public ToolSpeedpowderShovel() { public ToolSpeedpowderShovel(Identifier identifier) {
super(MATERIAL, new Item.Settings().attributeModifiers(ShovelItem.createAttributeModifiers(MATERIAL, 7F, -3.1F))); super(MATERIAL, 7F, -3.1F, new Item.Settings().useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)));
this.range = new HarvestRange(DEFAULT_HARVEST_RANGE); this.range = new HarvestRange(DEFAULT_HARVEST_RANGE);
} }

View File

@ -1,4 +1,4 @@
package de.jottyfan.quickiemod.items; package de.jottyfan.quickiemod.item;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext; import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -17,6 +18,10 @@ import net.minecraft.world.World;
* *
*/ */
public class ToolSpeedpowderWaterHoe extends ToolSpeedpowderHoe { public class ToolSpeedpowderWaterHoe extends ToolSpeedpowderHoe {
public ToolSpeedpowderWaterHoe(Identifier identifier) {
super(identifier);
}
@Override @Override
public ActionResult useOnBlock(ItemUsageContext context) { public ActionResult useOnBlock(ItemUsageContext context) {
ActionResult res = super.useOnBlock(context); ActionResult res = super.useOnBlock(context);
@ -28,7 +33,7 @@ public class ToolSpeedpowderWaterHoe extends ToolSpeedpowderHoe {
Hand hand = context.getHand(); Hand hand = context.getHand();
PlayerEntity player = context.getPlayer(); PlayerEntity player = context.getPlayer();
ItemStack oldTool = player.getStackInHand(hand); ItemStack oldTool = player.getStackInHand(hand);
ItemStack newTool = new ItemStack(QuickieItems.SPEEDPOWDERHOE.getItem()); ItemStack newTool = new ItemStack(ModItems.TOOL_SPEEDPOWDERHOE);
newTool.setDamage(oldTool.getDamage()); newTool.setDamage(oldTool.getDamage());
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(oldBlockState.getBlock()))); world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(oldBlockState.getBlock())));
player.setStackInHand(hand, newTool); player.setStackInHand(hand, newTool);

View File

@ -0,0 +1,38 @@
package de.jottyfan.quickiemod.itemgroup;
import java.util.List;
import de.jottyfan.quickiemod.Quickiemod;
import de.jottyfan.quickiemod.item.ModItems;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
public class ModItemGroup {
public static final void registerItemGroup(List<Item> items, List<Block> blocks) {
Registry.register(Registries.ITEM_GROUP,
RegistryKey.of(RegistryKeys.ITEM_GROUP, Identifier.of(Quickiemod.MOD_ID, "itemgroup")),
FabricItemGroup.builder().icon(() -> new ItemStack(ModItems.ITEM_SPEEDPOWDER))
.displayName(Text.literal(Quickiemod.MOD_ID)).entries((enabledFeatures, stacks) -> {
for (Item item : items) {
stacks.add(new ItemStack(item));
}
for (Block block : blocks) {
stacks.add(new ItemStack(block));
}
}).build());
}
}

View File

@ -1,15 +0,0 @@
package de.jottyfan.quickiemod.items;
import net.minecraft.item.Item;
/**
*
* @author jotty
*
*/
public class ItemCanola extends Item {
public ItemCanola() {
super(new Item.Settings().maxCount(64));
}
}

Some files were not shown because too many files have changed in this diff Show More